API repository for microservice configuration and management

Receive and manage service features in container environments through API registry, solve the problem of deployment and management of services in different environments, and realize the high availability of services and the automated generation of client libraries.

CN113641460BActive Publication Date: 2025-04-22ORACLE INT CORP
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
CN202111007894.3
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Priority Date
2017-09-30
Filing Date
2018-09-28
Publication Date
2025-04-22
Estimated Expiration
2038-09-28

AI Technical Summary

Technical Problem

When deploying a service from a development environment to a production environment, the service loses runtime access to the information used during development, resulting in problems such as service feature deployment and client library generation.

Method used

Receive service features in container environments through API registry, and perform service deployment, client library generation and call processing based on these features during deployment and runtime, ensuring consistency and high availability of services in different environments.

Benefits of technology

It solves the deployment and management problems of service features in different environments, realizes high availability of services and automated generation of client libraries, and simplifies the service call and management process.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN113641460B_ABST
    Figure CN113641460B_ABST
Patent Text Reader

Abstract

The present invention relates to an API repository for implementing microservice configuration and management. A method for customizing the deployment and operation of a service in a container environment may include receiving characteristics of a service at an API registrar, the service being encapsulated or to be encapsulated in a container being deployed or to be deployed in the container environment. The method may also include determining whether the characteristics of the service affect the deployment of the service to the container environment, and deploying the service based at least in part on the characteristics in response to determining that the characteristics affect the deployment of the service. The method may additionally include determining whether the characteristics of the service affect the generation of a client library that calls the service in the container environment, and generating a client library based at least in part on the characteristics in response to determining that the characteristics affect the generation of the client library.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application is a divisional application of the invention patent application with application number 201880069219.3, application date September 28, 2018, and invention name “API repository for implementing microservice configuration and management”.

[0002] CROSS-REFERENCE TO RELATED APPLICATIONS

[0003] This application claims the benefit of U.S. Provisional Application No. 62 / 566,351, filed on September 30, 2017, which is incorporated herein by reference. This application is also related to the following commonly assigned applications filed on the same date as this application, each of which is also incorporated herein by reference:

[0004] U.S. Patent Application No. __ / __, __, filed on September __, 2018, entitled “API REGISTRY IN A CONTAINER PLATFORM FOR AUTOMATICALLY GENERATING CLIENT CODE LIBRARIES” (Attorney Docket No. 088325-1090745);

[0005] U.S. Patent Application No. __ / __, __, filed on September __, 2018, entitled “DYNAMIC NODEREBALANCING BETWEEN CONTAINER PLATFORMS” (Attorney Docket No. 088325-1090747);

[0006] U.S. Patent Application No. __ / __, __, filed on September __, 2018, entitled “OPTIMIZINGREDEPLOYMENT OF FUNCTIONS AND SERVICES ACROSS MULTIPLE CONTAINER PLATFORMS AND INSTALLATIONS” (Attorney Docket No. 088325-1090748);

[0007] U.S. Patent Application No. __ / __, __, filed on September __, 2018, entitled “REAL-TIME DEBUGGING INSTANCES IN A DEPLOYED CONTAINER PLATFORM” (Attorney Docket No. 088325-1090753). Background Art

[0008] In general, any form of container represents a standardized way of packaging and interacting with information. Containers can be isolated from each other and can be used in parallel without the risk of cross contamination. In the modern software world, the word "container" has a specific meaning. Software containers, such as A container is a software construct that logically encapsulates and defines a piece of software. The most common types of software to be encapsulated in a container are applications, services, or microservices. Modern containers also include all the software support required for the application / service to operate, such as an operating system, libraries, storage volumes, configuration files, application binaries, and other parts of the technology stack that will be found in a typical computing environment. This container environment can then be used to create multiple containers, each running its own service in any environment. Containers can be deployed in production data centers, on-premises data centers, cloud computing platforms, and more without any changes. Spinning up a container on the cloud is the same as spinning up a container on a local workstation.

[0009] Modern service-oriented architectures and cloud computing platforms break down large tasks into many small, specific tasks. Containers can be instantiated to focus on individual specific tasks, and then multiple containers can work together to implement complex applications. This can be called a microservice architecture, and each container can use different versions of programming languages ​​and libraries that can be upgraded independently. The isolated nature of the processes within the containers allows them to be upgraded or replaced with little work or risk compared to changes that would be made to the larger, more monolithic architecture. Although virtual machines can be used to run container platforms, container platforms are much more efficient than traditional virtual machines in running this microservice architecture. Summary of the invention

[0010] In some embodiments, a method for customizing the deployment and operation of a service in a container environment may include receiving characteristics of a service at an API registrar, the characteristics of the service being encapsulated or to be encapsulated in a container that is deployed or to be deployed in the container environment. The method may also include determining, by the API registrar, whether the characteristics of the service affect the deployment of the service to the container environment, and deploying the service based at least in part on the characteristics in response to determining that the characteristics affect the deployment of the service. The method may additionally include determining, by the API registrar, whether the characteristics of the service affect the generation of a client library that calls the service in the container environment, and generating a client library based at least in part on the characteristics in response to determining that the characteristics affect the generation of the client library. The method may also include determining, by the API registrar, whether the characteristics of the service affect how calls to the service are handled in the container environment, and handling calls to the service based at least in part on the characteristics in response to determining that the characteristics affect how calls to the service are handled.

[0011] In some embodiments, a non-transitory computer-readable medium may include instructions that, when executed by one or more processors, cause the one or more processors to perform operations, the operations including receiving a characteristic of a service at an API registrar, the characteristic of the service being encapsulated or to be encapsulated in a container that is deployed or to be deployed in a container environment. The operation may also include determining, by the API registrar, whether the characteristic of the service affects the deployment of the service to the container environment, and deploying the service based at least in part on the characteristic in response to determining that the characteristic affects the deployment of the service. The operation may additionally include determining, by the API registrar, whether the characteristic of the service affects the generation of a client library that calls the service in the container environment, and generating a client library based at least in part on the characteristic in response to determining that the characteristic affects the generation of the client library. The operation may also include determining, by the API registrar, whether the characteristic of the service affects how calls to the service are handled in the container environment, and handling calls to the service based at least in part on the characteristic in response to determining that the characteristic affects how calls to the service are handled.

[0012] In some embodiments, a system may include one or more processors and one or more memory devices including instructions that, when executed by the one or more processors, cause the one or more processors to perform operations, the operations including receiving a characteristic of a service at an API registrar, the characteristic of the service being encapsulated or to be encapsulated in a container that is deployed or to be deployed in a container environment. The operation may also include determining, by the API registrar, whether the characteristic of the service affects the deployment of the service to the container environment, and deploying the service based at least in part on the characteristic in response to determining that the characteristic affects the deployment of the service. The operation may additionally include determining, by the API registrar, whether the characteristic of the service affects the generation of a client library that calls the service in the container environment, and generating a client library based at least in part on the characteristic in response to determining that the characteristic affects the generation of the client library. The operation may also include determining, by the API registrar, whether the characteristic of the service affects how calls to the service are handled in the container environment, and handling calls to the service based at least in part on the characteristic in response to determining that the characteristic affects how calls to the service are handled.

[0013] In any embodiment, any one or all of the following features may be included in any combination and without limitation. A feature may include code executed by an API registrar. A feature may include a flag used by an API registrar to select a predefined process to be executed. Determining by the API registrar whether a feature of a service affects the deployment of a service to a container environment may include determining that the feature indicates that the service should be deployed to a container environment to make it highly available. Deploying a service based at least in part on the feature may include deploying multiple containerized instances of a service to a container environment. Determining whether a feature of a service affects the generation of a client library that calls the service in a container environment may include determining that the feature indicates that the service requires end-to-end encryption. Generating a client library based at least in part on the feature may include generating code in the client library that encrypts the data before the data is sent in a service call to an endpoint of the service. Determining whether a feature of a service affects the generation of a client library that calls the service in a container environment may include determining that the feature indicates that the calling service should log the usage of the service. Generating a client library based at least in part on the feature may include generating code in the client library that logs usage information for calls to endpoints of the service. Determining whether a characteristic of a service affects how calls to the service are handled in a container environment may include determining that the characteristic indicates that the service should be instantiated on demand in the container environment. Handling calls to the service based at least in part on the characteristic may include generating a containerized instance of the service by an API registrar in response to receiving an indication that a call service will send a request to the service. The client library may include an object class with member functions that implement API functions to make direct calls to endpoints of the service. The method / operation may also include receiving an API definition at an API registrar, the API definition may include an endpoint and one or more API functions of a service in a container environment. The characteristics of the service may be received using the API definition. The container environment may include multiple services encapsulated in a container. The API registrar may be deployed as a service encapsulated in a container in a container environment. The API registrar may be available to services under development in an integrated development environment (IDE) and services already deployed in a container environment. Determining whether a characteristic of a service affects how calls to the service are handled in a container environment may include determining that the characteristic indicates that the service should be rate limited when a call is made to the service in a container environment. BRIEF DESCRIPTION OF THE DRAWINGS

[0014] A further understanding of the nature and advantages of the present invention may be achieved by reference to the remainder of this specification and the drawings, wherein like reference numerals are used throughout the several drawings to refer to like parts. In some cases, a sub-label is associated with a reference numeral to denote one of a plurality of similar parts. When reference is made to a reference numeral without specifying an existing sub-label, it is intended to refer to all such plurality of similar parts.

[0015] Figure 1 The software structure and logical arrangement of a development and runtime environment for services in a container platform according to some embodiments are illustrated.

[0016] Figure 2 A special purpose computer hardware system specifically designed to run the embodiments described herein is illustrated.

[0017] Figure 3 Illustrated is a data organization that may be specific to a container platform used by some of the embodiments described herein.

[0018] Figure 4 Illustrated is an API registrar that may be deployed to an IDE and a production / runtime environment according to some embodiments.

[0019] Figure 5 Deployment of an API registrar for use with a container platform at runtime is illustrated in accordance with some embodiments.

[0020] Fig. 6A A flow chart of a method for deploying an API registrar according to some embodiments is illustrated.

[0021] Figure 6B The diagram illustrates the use of Fig. 6A The software structure of the container platform when deploying the API registrar is shown in the flowchart.

[0022] Fig. 7A Illustrated is a flow diagram of a method for registering a service with an API registrar according to some embodiments.

[0023] Figure 7B A hardware / software diagram illustrating steps for registering an API with an API registrar according to some embodiments.

[0024] Figure 8 Illustrated are examples of a graphical interface and a command line interface for browsing and selecting an API to register with an API registrar according to some embodiments.

[0025] Fig. 9 Illustrated is a flow diagram of a method for using services registered with an API registrar and their corresponding functions according to some embodiments.

[0026] Fig.10 Illustrate how the API Registrar may receive selections through the graphical interface of the CreateUser() function.

[0027] Fig.11 Illustrated is an example of a client library automatically generated for a service by an API registrar in accordance with some embodiments.

[0028] Fig.12 An embodiment of a client library that accommodates dynamic binding between service endpoints and API functions is illustrated in accordance with some embodiments.

[0029] Fig.13 An embodiment of a client library that can marshal additional data to complete an input data set for a service call is illustrated in accordance with some embodiments.

[0030] Fig.14 Illustrated is a client library that can handle retries when calling a service according to some embodiments.

[0031] Fig.15A A method of providing API properties to an API registrar according to some embodiments is illustrated.

[0032] Fig. 15B A hardware / software diagram illustrating how a service may provide API properties to an API registrar according to some embodiments.

[0033] Fig.16 Illustrated is a hardware / software diagram in which an API registrar uses features to deploy services with high availability according to some embodiments.

[0034] Fig.17 Illustrated is a hardware / software diagram that illustrates the feature of enforcing end-to-end encryption through an API registrar in accordance with some embodiments.

[0035] Fig.18 Illustrated are features of an API registrar for implementing usage logging for service 1808 in accordance with some embodiments.

[0036] Fig.19 Illustrated is a hardware / software diagram that may enforce characteristics of an authentication protocol on a service in accordance with some embodiments.

[0037] Fig. 20 Illustrated is a hardware / software schematic for enabling features of runtime instantiation of services in accordance with some embodiments.

[0038] Fig.21 Illustrated is a hardware / software schematic that implements the features of rate limiting functionality for a service in accordance with some embodiments.

[0039] Fig. 22 A simplified block diagram of a distributed system for implementing some of the embodiments is illustrated.

[0040] Fig.23Illustrated is a simplified block diagram of components of a system environment by which services provided by components of an embodiment system may be provided as cloud services.

[0041] Fig.24 An exemplary computer system is illustrated in which various embodiments may be implemented. DETAILED DESCRIPTION

[0042] Described herein is an embodiment of an application programming interface (API) registrar, which is part of an integrated development environment (IDE) that allows developers to register services during development and make those services available to other services during and after deployment. The API registrar can be deployed as part of an orchestrated container platform, thereby operating as a containerized application on the container platform. As services or microservices are developed and deployed to containers on the container platform, the API registrar can perform a discovery process for locating available endpoints (e.g., IP addresses and port numbers) corresponding to available services within the container platform. The API registrar can also accept uploads of API definition files, which can be used to convert the original service endpoints into API functions available through the API registrar. The API registrar can dynamically bind the discovered endpoints to API functions, which can be kept up to date and available to other services in the container platform. This provides a stable endpoint that other services can call statically, and the API registrar manages any changes in the binding between API functions in the service endpoint. This also simplifies the process of using services in the container platform. Instead of writing code for HTTP calls, new services can access registered services using only API interfaces.

[0043] In some embodiments, the IDE can provide developers with a navigation / browsing interface to locate services available in the container platform and registered with the API registrar. When the API registrar creates a call to an existing service for a new service being developed, the API registrar can automatically generate a collection of client libraries including all necessary functions for interacting with the registered services. For example, some embodiments can generate object classes including member functions corresponding to API calls. During development, new services can simply instantiate these objects and / or use their member functions to call the corresponding API. The code in the client library manages the direct connection between the endpoint of the calling service and the registered service, and can include code for handling all functions necessary for such interaction. For example, the automatically generated client library may include: code for packaging and formatting parameters from the API call into an HTTP call to the service endpoint, code for collating data to complete the parameter set for the call, code for packaging information into compatible packets (JSON, XML, etc.), code for receiving and parsing result packets, code for handling retries and error conditions, etc. From the perspective of calling the service, the code for handling all such functions is automatically generated by the API registrar, and the details of the service call are thus abstracted and encapsulated into the client library object. All that is required to call a service is to execute a member function of the client library object created by the API registrar.

[0044] In some embodiments, the API registrar may also accept uploads of a feature set that can define the runtime execution of the registered service. This feature set can be uploaded together with the API definition file during development. These features can define runtime features, such as end-to-end encryption, usage / logging requirements, user authentication, on-demand service instantiation, multiple service deployment instances for high availability, rate / usage restrictions, and other runtime features. The API registrar can ensure that these features are met by interacting with the container environment during development, during deployment, and during runtime. During development, the automatically generated client library for calling the service may include the code required to execute these features, such as encryption code, usage logging code, and / or interaction with the user authentication service. When deploying registered services, the API registrar may instruct the container platform to instantiate multiple instances of the service and / or other load balancing modules to ensure that the service has high reliability during runtime. During runtime, when the service is called, the API registrar can enable the service to be instantiated for on-demand instantiation, limit the number of API calls that can be made to adjust usage, and perform other runtime functions.

[0045] Figure 1The software structure and logical arrangement of the development and runtime environment for services in the container platform according to some embodiments are illustrated. These environments may include an IDE 102, which may be used to develop services and microservices to be deployed on the container platform. An IDE is a software suite that incorporates and provides all the basic tools that service developers can use to write and test new services. The IDE 102 may include a source code editor 106 with a graphical user interface (GUI), code completion functions, and a navigation / browsing interface, which allows developers to write, navigate, integrate, and visualize the source code writing process. The IDE 102 may also include a debugger 110, which includes a variable interface, an immediate variable interface, an expression evaluation interface, a memory content interface, breakpoint visualization and functions, and other debugging functions. The IDE 102 may also include a compiler and / or interpreter 108 for compiling and running compiled machine code or interpreted byte code. The compiler / interpreter 108 may include a build tool that allows developers to use / generate another makefile (make file) that builds an automated construct. Some embodiments of the IDE 102 may include a code library 112 that includes common code functions, objects, interfaces, and / or other structures that may be linked into a service being developed and reused across multiple developments.

[0046] Services can be developed within the IDE 102 and thoroughly tested until they are ready for deployment. The services can then be deployed to the production / deployment environment 104. The production / development environment 104 can include many different hardware and / or software structures, including dedicated hardware, virtual machines, and containerized platforms. Prior to the present disclosure, when the service 114 was deployed to the production / deployment environment 104, the service 114 would no longer have runtime access to many of the tools used in the IDE 102. Any functionality required for the service 114 to run in the production / development environment 104 needs to be packaged from the code base 112 and deployed to the production / deployment environment 104 with the service 114. In addition, typically the service 114 will be deployed without any functionality of the debugger 110 or a copy of the source code from the source code editor 106. In essence, the service 114 will be deployed to the production / deployment environment 104 with all the functionality required for runtime operation, but will be stripped of information that is only used during development.

[0047] Figure 2The diagram illustrates a dedicated computer hardware system specifically designed to run the embodiments described herein. For example, the service 114 can be deployed into an Infrastructure as a Service (IaaS) cloud computing environment 202. This is a form of cloud computing that provides virtualized or shared computing resources over a network. The IaaS cloud computing environment 202 can also include other cloud computing environments that are arranged as Software as a Service (SaaS) and / or Platform as a Service (PaaS) architectures, or be coupled with other cloud computing environments. In such an environment, a cloud provider can host an infrastructure of hardware and / or software components that traditionally exist in an on-premises data center. Such hardware can include servers, storage devices, networking hardware, disk arrays, software libraries, and virtualization utilities (such as a hypervisor layer). The IaaS environment 202 can be provided by commercial sources (such as or other publicly available cloud platforms). The IaaS environment 202 can also be deployed as a private cloud using a private infrastructure of hardware and software.

[0048] Regardless of the type of cloud environment, the service 114 can be deployed on a variety of different types of hardware / software systems. For example, the service 114 can be deployed on dedicated hardware 206. The dedicated hardware 206 can include hardware resources specifically assigned to the service 114, such as servers, disks, operating systems, software packages, etc. For example, a specific server can be assigned to handle traffic flowing into and out of the service 114.

[0049] In another example, the service 114 can be deployed to hardware / software that operates as one or more virtual machines 208. A virtual machine is a simulation of a computer system that provides the functionality of dedicated computer hardware 206. However, instead of being dedicated to a specific function, the physical hardware can be shared by multiple different virtual machines. Each virtual machine can provide all the functionality required for execution, including a complete operating system. This allows virtual machines with different operating systems to run on the same physical hardware and allows multiple services to share a single hardware.

[0050] In another example, the service 114 can be deployed to a container platform 210. The container platform differs from the virtual machine 208 in several important ways. First, the container platform 210 packages the individual services into containers, as shown below. Figure 3Each container shares the host operating system kernel, and they also share binaries, libraries, and other read-only components. This makes containers very lightweight - often only a few megabytes in size. In addition, lightweight containers are very efficient, starting in just seconds, while booting a virtual machine takes minutes. Containers also reduce management overhead by sharing an operating system and other libraries that can be maintained together for the entire collection of containers in the container platform 210. Although containers share the same operating system, they provide an isolated platform because the operating system provides virtual memory support for isolation. Container technology can include Containers, Linux Open Container Initiative (OCI), CoeOS, Mesos, etc. These containers can be deployed to a container orchestration platform, which may be referred to herein as a "container platform" 210. The container platform manages the automated placement, coordination, and management of deployed software containers. The container platform 210 can provide service discovery, load balancing, health checks, multiple deployments, etc. The container platform 210 can be implemented by any publicly available container platform (such as Kubernetes) that runs containers organized in nodes and pods.

[0051] Regardless of the platform 206, 208, 210 on which the service 114 is deployed, each of the platforms 206, 208, 210 can provide service endpoints 212, 214, 216 that provide public access for calling the service 114. Generally speaking, these endpoints can be accessed through HTTP calls and are associated with IP addresses and port numbers. By connecting to the correct IP address and port number, other services can call services deployed to any one of the platforms 206, 208, 210 when they are publicly available. Each service (such as service 114) can include its own proprietary format and data requirements for calling the service. Similarly, each service can return results that are specific to the service 114 in terms of format and data type. In addition to service-specific requirements, a specific deployment platform 206, 208, 210 can also include additional requirements for interacting with the service 114, such as programming languages, data packet formats (JSON, XML, etc.) that need to be met in order to interact correctly with the service, etc.

[0052] While the above examples allow the service 114 to be deployed to any of the platforms 206, 208, 210, the embodiments described herein are specifically designed for the above-described container platform 210. Thus, embodiments specifically documented as being to be deployed in a "container platform" can be distinguished from other embodiments specifically documented as being to be deployed in a virtual machine platform, deployed on a server or dedicated hardware platform, or generally deployed in an IaaS environment.

[0053] Figure 3 The diagram illustrates the data organization of the container platform 210 that may be specific to some of the embodiments described herein. In general, any deployment of services to the container platform will be deployed to the pods 304, 306. The pod is an abstraction that represents a set of one or more application containers (such as Docker or rkt). The pod may also include some shared resources that are generally available to all containers in the pod. For example, the pod 304 includes a container 310 and a container 312. The pod 304 also includes shared resources 308. Resources may include storage volumes or other information about how the container is run or connected within the pod 304. The pod 304 may model a dedicated logical host containing relatively tightly coupled different service containers 310, 312. For example, a service 326 in a container 310 may utilize a resource 308 and call a service 320 in a container 312. Service 320 may also call service 322, which in turn calls service 324, each of which is deployed to container 312. The output of service 324 may be provided to a network IP address and port 318, which is another common resource shared by the pod 304. Thus, services 320, 322, 324, 326 all work together with shared resources 308 to provide a single service that can be accessed by services running in other containers via IP address and port number 318. The service can also be accessed via IP address and port 318 by computer systems external to the container platform, such as workstations, laptops, smart phones, or other computing devices that are not part of the container platform or IaaS environment.

[0054] In the simplest deployment, each container can include a single service, and each cabin can include a single container that encapsulates the service. For example, cabin 306 includes only a single container 314 with a single service 328. The single service can be accessed through the IP address and port number 316 of cabin 306. Typically, when a service is deployed to a container platform, containers and cabins are instantiated to maintain the service. Many different cabins can be deployed to container nodes 302. In general, cabins run within nodes. A node represents a worker machine (virtual or physical) in a container platform. Each node is managed by a "master device", which automatically handles scheduling cabins within each node. Each node can run a process responsible for communication between the master device and the node and for managing the cabins in the container on the machine represented by the node. Each node can also include a container runtime responsible for pulling container images from a registrar, unpacking the container, and running the service.

[0055] Figure 4An API registrar 404 is illustrated that can be deployed to an IDE 102 and a production / runtime environment 104 according to some embodiments. As described above, there is a technical problem in that when a service 114 is deployed from an IDE 102 to a production / deployment environment 104, the service 114 loses runtime access to information that is only available in the IDE 102. The API registrar 404 is accessible by the service 114 when the API registrar 404 is deployed and operated during runtime in the production / development environment 104. By registering services with the API registrar 404 during development and providing API definitions and / or API properties to the API registrar 404, the API registrar 404 overcomes the previous technical problem of isolation of development functionality from runtime functionality. The information defining the API can be used by new services being developed in the IDE 102 as well as services that have been deployed to the production / deployment environment 104. After completing this registration process, the service 114 can operate using a client library that accesses the API registrar 404 during runtime to ensure that the API functions are correctly bound to the current IP address and port number of the corresponding service. API Registry 404 represents new data structures and processing units specifically designed to address these technical issues.

[0056] Another technical problem that exists in the prior art is the implementation of service features when deploying service features to the production / development environment 104. For example, if a service with high availability is to be deployed, then the developer will need to build a container deployment file that specifically instantiates multiple instances of the service in the container platform and balances the business in a way that the service is always available. Service developers do not always have this expertise, and they often cannot manage the deployment of their services. As described below, the API registrar 404 allows the service to simply select features (such as high availability), which can then be automatically implemented by the API registrar 404. This technical solution is feasible because the API registrar 404 eliminates the barriers between the IDE 102 and the production / deployment environment 104.

[0057] Figure 5The deployment of an API registrar 404 used with a container platform 210 at runtime according to some embodiments is illustrated. One of the technical solutions and improvements to the prior art provided by the API registrar 404 is to maintain a stable endpoint for service calls, as well as simplified and automatic code generation for accessing service calls. Prior to the present disclosure, calls between services were point-to-point connections, such as HTTP calls to IP addresses and port numbers. As services are updated, replaced, relocated, and redeployed in the container platform 210, IP addresses and port numbers may change frequently. This requires that all services that call the updated service must update their IP addresses and port numbers in the actual code that calls the service. The API registrar 404 solves this technical problem by providing dynamic binding between the IP address and port number of the service and the API function available through the API registrar. The client library automatically generated by the API registrar 404 may include access to the API registrar 404 to retrieve and / or verify the current IP address and port number for a particular service. Therefore, the first service connected to the second service only needs to perform client library generation once to provide a stable connection to the second service during its life cycle.

[0058] Another technical problem that API registrar 404 solves is the automatic generation of client libraries. Before the disclosure, the first service accessed the second service and required developers to write custom codes for accessing the second service. Because this code may change over time, the incompatibility between the first service and the second service may increase, which requires that the two services be updated. API registrar 404 solves this technical problem by uploading the API definition file for automatically generating the client library for calling services. Therefore, the service can specifically specify how the calling code in any other service should operate, thereby ensuring compatibility. These client libraries have also greatly simplified and encapsulated the code for calling services. As described below, the complex HTTP call using IP address and port number can be replaced with a simple member function call specific to the language (for example, Java, C#, etc.) of the calling service. This allows the calling service to select an API function from API registrar 404, and the code for implementing the function can be downloaded to the calling service as a client library.

[0059] Fig. 6AA flowchart of a method for deploying an API registrar 404 according to some embodiments is illustrated. The method may include deploying an API registrar service to a container environment (601). The API registrar may be implemented as a service operating in a container environment within a container. Therefore, after the service is deployed to the container environment, the API registrar may be actively run so that it can be accessed at runtime. The API registrar may also be linked to the above-mentioned existing IDE. The method may also include discovering ports for available services in the container platform (603). When the service is deployed to the container platform, the API registrar may initiate a discovery process that sequentially traverses each service deployed to the container platform. For each service, the API registrar may detect and record an IP address and port number. A list of IP addresses and port numbers discovered by this process may be stored in a data structure, such as in a table associated with the API registrar. Each IP address and port number may also be stored with the name of the service or other identifiers that uniquely identify the service on the container platform. Fig. 6A These initial steps, shown in the flowchart in , provide a starting point for the API Registry to begin operating in the runtime environment of the container platform and to be available to services being developed in the IDE.

[0060] Figure 6B The diagram illustrates the use of Fig. 6A The software structure of the container platform 210 when the API registrar is deployed according to the flowchart in FIG. As described above, the API registrar 404 can be deployed to the container 620 in the container platform 210. The container 620 can operate in one or more pods and in a node, as described above in Figure 3 . The API registrar 404 can be made dedicated to any of the other containers in the container platform 210. In some embodiments, the API registrar 404 can also be made publicly available to other devices that are not part of the container platform 210. As a containerized service, the API registrar 404 can have an IP address and port number that can be used for other services. However, the IP address and port number of the API registrar 404 will only be used by code automatically generated in the client library, so some embodiments do not need to publish the IP address and port number of the API registrar 404. Instead, the client library in the IDE itself can maintain an up-to-date list of the IP address and port number of the API registrar 404 so that it can be contacted during development, deployment, and runtime of other services.

[0061] After the API registrar 404 is deployed to the container 620, the API registrar 404 can perform a discovery process. The discovery process can use the directory list of nodes in the container platform to identify the cabin that implements the service using the IP address and port number. The API registrar 404 can then access a unique identifier (such as the number or name of each available service) and store the identifier with each IP address and port number in the container platform 210. This discovery process can be performed periodically to detect new services added to the container platform 210, and to identify existing services removed from the container platform 210. As described below, this discovery process can also be used to detect when the IP address and port number of an existing service change. For example, the API registrar 404 can discover services with endpoints 602, 604, 606, 608. In the process described below, the API registrar 404 can bind each of these endpoints 602, 604, 606, 608 to an API function registered with the API registrar 404. At some point after this initial discovery, the IP address and / or port number of endpoint 602 may change when the service associated with endpoint 602 is replaced, updated, or revised. API registrar 404 may detect such changes to endpoint 602 and update the bindings to the existing API functions provided by API registrar 44.

[0062] Similarly, API registrar 404 can use a discovery process to detect when an endpoint is no longer available and then remove the API function associated with the service. In some embodiments, when a service has been registered with API registrar 404, but the corresponding API function is not currently bound to a valid endpoint, API registrar 404 can provide a virtual (mock) response to any service that calls the corresponding API function. For example, if an API has been registered for a service corresponding to endpoint 604, but endpoint 604 is not currently available, then API registrar 404 can intercept calls to endpoint 604 and provide default or dummy data as a response. This allows the service that calls the service associated with endpoint 604 to maintain functionality and / or continue the design process without "disconnecting" from this particular service. Virtual / test data scenarios will be described in more detail below.

[0063] Fig. 7AA flow diagram of a method for registering a service with an API registrar 404 according to some embodiments is illustrated. The method may include receiving an upload of an API definition (701). The API definition may be provided in the form of a data packet, a file, or a link to an information repository. The API definition may include any information that may be used to identify and define an API function that should be bound to an endpoint associated with a service. For example, some embodiments of an API definition may include the following data: a service name or other unique identifier; a function name corresponding to a service endpoint and call; data inputs required to call the service and corresponding descriptions and data types; result data formats and data types; current IP addresses and / or port numbers; documentation describing the functionality of the API function to be associated with the endpoint; default or dummy data values ​​that should be returned during virtual / test scenarios; and any other information that may be used by the API registrar 404 to translate HTTP requests received by the endpoint into API function calls using class data objects by a client library.

[0064] The method may also include creating corresponding API functions (703) based on the uploaded API definition. These API functions may be automatically generated based on the API definition. Each endpoint of the service may be associated with a plurality of different API functions. For example, an endpoint implementing a RESTful interface may receive HTTP calls to POST, GET, PUT, and DELETE functions at the same IP address and port number. For example, this may result in different API functions. For example, if the interface represents a list of users, then this list may correspond to at least four different API functions, such as GetUser(), AddUser(), RemoveUser(), and UpdateUser(). In addition, each API function may include a plurality of different parameter lists, such as UpdateUser(id), UpdateUser(name), UpdateUser(firstname, lastname), etc. These API functions may be generated and made available to other services through an API registrar. As will be described in more detail below, it should be noted that services are not required to call these functions through an API registrar. Instead, these functions may be used to browse in an API registrar, and when selected, an API registrar may generate a client library that implements these functions in a calling service.

[0065] The method may additionally include creating bindings in the API registrar between corresponding endpoints of the API function and the service (705). Based on the above discovery process and the registration process of step 701, the API registrar can now create dynamic bindings between the endpoints of the service in the container platform and the API functions created by the API registrar. In the data structure formed when the available endpoints and services are discovered above, the API registrar can now store the corresponding function or set of functions for each endpoint. As described above, this binding can be continuously updated when the discovery process determines when a service is updated, moved, replaced, or added to the container platform. This allows the client library created in calling the service to first check the API registrar to verify or receive the current IP address and port number for the service.

[0066] Figure 7B A hardware / software schematic diagram of the steps for registering an API with an API registrar 404 according to some embodiments is illustrated. As described above, the API registrar 404 can be instantiated and run in a container 620 in a container platform 210. Even if the container platform 210 represents a production / deployment environment, the API registrar 404 can still be accessed by the IDE 102 for developing services. Therefore, the IDE 102 can provide a mechanism for uploading an API definition file 702 to the API registrar 404. Specifically, the user interface of the IDE 102 can include a window or interface that allows developers to define and / or fill in fields for the API definition file 702. Such information described above can include function names, parameter lists, data types, field lengths, object class definitions, IP addresses and port numbers, service names or other unique identifiers, etc. Such information can be uploaded to the API registrar 404 and linked to a specific IP address and port number of the endpoint 602 in a dynamic binding manner. Finally, the API registrar 404 can generate one or more API functions 704 that can be used through the API registrar 404.

[0067] After registering a service with the API registrar 404 and generating one or more API functions, the API registrar can make these functions available to developers as they design services. Figure 8 An example of a graphical interface 802 and a command line interface 804 for browsing and selecting an API registered with an API registrar 804 according to some embodiments is illustrated. When programming and developing new services for a container platform, developers can access the graphical interface 802 to browse and select API functions that can be used in their services. This graphical interface 802 is merely an example and is not meant to limit the type of graphical interface that can be used to browse and select API functions.

[0068] In this embodiment, IDE 102 can summon graphical interface 802 to provide a list of APIs registered with the API registrar. In this embodiment, APIs are classified based on endpoints. For example, an endpoint corresponding to a service can provide a RESTful interface (e.g., "UserStorage") for storing user records. Graphical interface 802 can display all API functions available through the selected endpoint (e.g., "CreateUser", "DeleteUser", "UpdateUser", etc.). In the case where a service provides multiple endpoints, other embodiments can group functions based on the entire service. Graphical interface 802 can receive a selection of one or more API functions to be used when calling a service. The API registrar can then provide documentation explaining how to use the API functions, including required parameters and return values. It will be understood by those of ordinary skill in the art that command line interface 804 can provide similar information to graphical interface 802 and can receive similar input.

[0069] Figure 8 The interfaces 802, 804 shown in FIG. 8 provide a number of technical advantages. First, these interfaces 802, 804 provide an up-to-date list of all APIs registered with the API registry. This corresponds to a list of all services currently available in the container platform. Service developers can retrieve and display this information in real time, rather than having to look up documentation, contact service developers, and / or perform other inefficient tasks to locate a list of available services. In addition, as services are updated, the API definition files can be updated in a corresponding manner. This update can then be used to create a new API definition file. Figure 8 to provide the latest availability information for each API function.

[0070] Fig. 9 A flow chart of a method for using services registered with an API registrar and their corresponding functions according to some embodiments is illustrated. The method may include providing a list of registered APIs (901). This step may be omitted if the desired service is already known. However, in general, the above Figure 8 The method may also include receiving a selection of an API function (901). The API registrar may receive this selection from a developer of the service. For example, the developer may decide to use the CreateUser() function described above to update a database of user records. Fig.10 It illustrates how the API registrar may receive selections 1002 through the graphical interface 802 for the CreateUser() function. Other embodiments may receive selections through a command line interface or through other input methods provided by an IDE.

[0071] Return to reference Fig. 9 Once the selection of the API function is received, the API registrar can generate one or more client libraries for the calling service (905). Generating the client library can provide the calling service with a service endpoint that is dynamically bound to the API function. Specifically, the IDE can generate a collection of class objects in the IDE that encapsulate the functionality required to interface directly with the service endpoint in the container platform. In some embodiments, the client library can include an object class that can be instantiated or used to call member functions of the code required to implement communication with the service. Examples of these client libraries will be described in more detail below.

[0072] The method may additionally include providing test data (907). When a service is registered with an API registrar, it does not need to be complete. Instead, the service may indicate to the API registrar that it is not yet ready to provide a function response to the calling service. In some embodiments, the API definition file uploaded to the API registrar may include specifications for the type of information that should be returned before the service functions. When the calling service calls the API function, the client library generated by the API registrar may route the request to the API registrar instead of the service endpoint. The API registrar may then provide a response using a dummy value, a null value, or a default value. Alternatively, the code within the client library itself may generate default data to be returned to the calling service.

[0073] It should be recognized that Fig. 9 The specific steps shown in provide specific methods for using the API registrar according to various embodiments of the present invention. According to alternative embodiments, other sequences of steps may also be performed. For example, alternative embodiments of the present invention may perform the steps outlined above in a different order. Moreover, Fig. 9 The various steps shown in the may include multiple sub-steps, which may be performed in various orders suitable for the various steps. In addition, additional steps may be added or removed depending on the specific application. Those of ordinary skill in the art will recognize many variations, modifications, and alternatives.

[0074] Fig.11 An example of a client library automatically generated for a service by an API registrar according to some embodiments is illustrated. This client library 1102 may correspond to a service that stores user records. This client library 1102 and corresponding classes and services are provided by way of example only and are not meant to be limiting. As described above, each API function and service may specify how the client library should be generated by an API definition file uploaded to the API registrar. Therefore, the principles described below with respect to the "User" service may be applied to other services.

[0075] To represent the "User" service, the API registrar can generate a class for User. When a calling service requests the API registrar to generate a client library, the calling service can specify the programming language used by the calling service. For example, if the calling service is written in Java in an IDE, the API registrar can generate a class library in the Java programming language. Alternatively, if the calling service is written in C#, the API registrar can generate a class library in the C# programming language. The User class can be generated to have member functions corresponding to different operations that can be performed through the service endpoint. These member functions can be static, so that they do not require an instantiated instance of the User class, or they can be used with an instantiated User object.

[0076] In this example, the User service can use a RESTful interface to edit each user record stored by the service. For example, the API registrar can generate a CreateUser() function to implement a POST call to the User service. One of the functions that the class library can perform is to parse, filter and format the data provided to the API function as a parameter to be directly sent to the service as a data packet. In this example, the CreateUser() function can accept parameters that are formatted for the convenience of calling the service. For example, the calling service can store strings of the user's first name and the user's last name respectively. However, the POST command may require a string of cascades of the first name and last name together. In order to adapt to a user-friendly parameter set, the client library 1102 can perform a setup operation that formats the data received as a parameter of the function into a format compatible with the service endpoint. This can include generating header information, changing the format of certain data fields, cascading data fields, requesting additional data from other sources, performing calculations or data transformations, etc. This can also include packaging the reformatted parameters into formats such as JSON, XML, etc.

[0077] Once the parameters are correctly formatted into a package for the service endpoint, the client library 1102 can also handle POST calls to the service. When the client library is generated, the IP address and port number of the service can be inserted into the CreateUser() function to be used in the HTTP request to the service. Note that the details of the HTTP request are encapsulated in the CreateUser() function. When developers calling the service want to use the POST function available through the service instead of writing code in the library 1102 themselves, they can instead select the "User" service from the API registrar. The API registrar will then automatically generate a client library 1102 that includes the User class. Then, to use the POST function, the service developer can simply use the User.CreateUser("John", "Smith", 2112) function to add user John Smith to the service.

[0078] Fig.12 An embodiment of a client library 1202 that accommodates dynamic binding between service endpoints and API functions according to some embodiments is illustrated. In this example, when the API registrar generates the client library 1202, the CreateUser() function may include code 1204 that dynamically retrieves the IP address and port number of the service. When the call service 114 operates in a production / deployment environment 104 (such as a container platform), the call service 114 may use the GetIPPort() function to send a request to the API registrar 404 at runtime. The API registrar 404 may access its internal table, which is consistently updated to maintain the latest binding between the API function and the service endpoint. The API registrar 404 may then return the current IP address and port number to the call service 114. The client library 1202 may then insert the IP address and port number into the HTTP POST code that connects to the service. Because the API registrar 404 may be accessed by any call service in the container platform at runtime, there is no need to update or patch these services when the IP address or port number of the called service changes. Instead, the API registrar 404 may provide the latest information each time the service is called. In some embodiments, assuming that the service endpoint does not change frequently in a production environment, the GetIPPort() function may only need to call the API registrar 404 once an hour, once a day, once a week, etc. to minimize the number of function calls made for the service 114 outside the container.

[0079] Fig.13An embodiment of a client library 1302 according to some embodiments is illustrated, which can collate additional data to complete an input data set for a service call. In order to simplify the use of the client library 1302, the client library 1302 can minimize the number of parameters required by the service developer. The additional data required for the service call can be retrieved from other sources, and therefore can be omitted from the parameter list. Alternatively, the client library 1302 can retrieve these additional parameters directly from these other sources. For example, creating a new user can include specifying a user role for the user. Instead of requiring the service developer to provide a user role as one of the parameters, the client library 1302 can instead include code 1304 that automatically retrieves the user's role from some other source. In this example, the user role can be retrieved from a database, from another service in the container platform, or from another class that stores the user role in the calling service. In any of these cases, the code 1304 can automatically retrieve the user role and package it as part of the input data of the HTTP POST command sent to the service.

[0080] In addition to arranging and formatting the data for inputting into the service, the client library 1302 can also parse and return the data received from the service and handle error conditions. In this example, the POST command can return the data packet to the Result variable. The service can often return the data packet including more information than the information required for calling the service. Therefore, the client library 1302 can parse the data fields in the Result variable, and extract and format the data from the Result variable, and package the data from the Result variable into a more usable and desired format for the User class. In this example, code 1306 can extract fields from the Result variable, and use them to create a new User object returned from the API function. In another example using the GET command, each API function can be generated in the User class, and these API functions extract different fields from the Result variable from the GET command. For example, the User class can provide GetFirstName (id) function, GetLastName (id) function, GetRole (id) function, etc. Each of these functions can include very similar code, while returning different fields from the Result variable.

[0081] In addition to parsing the results, the client library 1302 can also generate code 1308 to handle error conditions associated with using the service. In this example, the code 1308 can test the status field in the Result variable to determine whether the POST command was successful. If the command is successful, the CreateUser() function can return a new User object. In the event that the Post command fails, the function can instead return an empty object and / or retry the call to the service.

[0082] Fig.14 1402 is illustrated that can handle retries when calling a service according to some embodiments. Fig.13 As in the example of , the client library 1402 uses the status in the Result variable populated by the POST HTTP call to determine whether the call is successful. When the result is unsuccessful, the client library 1402 can continue to retry until the call is successful. Some embodiments can use a counter or other mechanism to limit the number of retries or add a waiting time between retries.

[0083] As described above, some embodiments may also upload a set of API properties along with the API definition to an API registrar. Fig.15A A method of providing API characteristics to an API registrar according to some embodiments is illustrated. The method may include receiving an upload of an API definition (1501). The method may also include receiving an upload of an API characteristic (1503). The upload of the characteristic may be part of the same transmission as the upload of the API definition. In some embodiments, the API characteristic may be part of the API definition. In some embodiments, the API characteristic may be one or more flags or predefined data fields that are checked to indicate that the characteristic should be set by the API registrar. In some embodiments, the API characteristic need not conform to any pre-structured format, but may instead be represented by instruction code that causes the API registrar to implement the following features (such as authentication, encryption, etc.). The API characteristics may be stored with the API definition for each service.

[0084] The method may additionally include creating an API binding between the service and the API (1505). This operation may be performed as described in detail above. In addition, the method may include using the API feature to perform one or more operations associated with the service (1507). The API feature may be used at different stages during the life cycle of the service. Generally speaking, this can be described as using the API feature to implement a function associated with the feature during service deployment, when generating a client library for the service, and / or when calling the service. Examples of each of these functions will be described in more detail below.

[0085] It should be recognized that Fig.15A The specific steps shown in provide specific methods for providing API features to an API registrar according to various embodiments of the present invention. According to alternative embodiments, other sequences of steps may also be performed. For example, alternative embodiments of the present invention may perform the steps outlined above in a different order. Moreover, Fig.15A The various steps shown in the may include multiple sub-steps, which may be performed in various orders suitable for the various steps. In addition, additional steps may be added or removed depending on the specific application. Those of ordinary skill in the art will recognize many variations, modifications, and alternatives.

[0086] Fig. 15B A hardware / software diagram illustrating how a service may provide API properties to an API registrar according to some embodiments. When developing a service in IDE 102, a service developer may provide an API definition file 1502 and one or more properties 1504 to API registrar 404. Because API registrar 404 is accessible in both IDE 102 and container platforms at runtime, API registrar 404 may store properties 1504 and use them to affect how services are deployed, called, and / or used to generate client libraries during development and runtime scenarios.

[0087] Fig.16 A hardware / software schematic diagram is illustrated according to some embodiments, in which an API registrar uses features to deploy services with high availability. In addition to the API definition file 1505 for a particular service, the API registrar 404 may also receive a feature 1602 indicating that the service should be deployed to be very resilient or with high availability. This feature 1602 may be received as a set of instructions executed by the API registrar 404 to deploy the service with high availability. This option allows developers to define what "high availability" means for this service. For example, feature 1602 may include instructions that cause the API registrar 404 to deploy multiple instances 602, 604 of a service to the container platform 210. By executing these instructions, the API registrar 404 does not need to make any decisions or determinations on its own, but may instead simply execute the deployment code provided as part of feature 1602.

[0088] The characteristic 1602 may also be received as a flag or setting that indicates to the API registrar 404 an option to execute existing instructions for deploying a service with high availability at the API registrar 404. With this option, the API registrar 404 need not receive any code to be executed as the characteristic 1602. Instead, the API registrar 404 may recognize the high availability characteristic 1602 and execute code maintained in the API registrar 404 to deploy multiple instances 602, 604 of a service. This allows the API registrar 404 to define what "high availability" means for the deployment of any service registered with the API registrar 404.

[0089] Because the API registrar 404 is connected to the runtime environment of the container platform 210, the API registrar 404 can interact with the container platform 210 to deploy instances 602, 604 that determine the runtime availability of the service. Fig.16 The two instances 602, 604 of the service shown in FIG. 5 are provided as an example only and are not meant to be limiting. A high availability service may include more than two redundant instances of a service deployed to a container platform.

[0090] Some embodiments may include code in the API registrar 404 that may be executed by default. If feature 602 includes only a simple indication that high availability is desired, then the API registrar 404 may execute its own code. If feature 602 includes deployment code for deploying a service, then the API registrar 404 may execute the code of feature 1602 instead. In some cases, feature 1602 may include only the portion of the code required to deploy a service with high availability. The API registrar 404 may execute the portion of the code provided by feature 1602 and then use the code at the API registrar 404 to execute any code not provided by feature 1602. This allows developers to override existing definitions of how features (such as high availability) are executed at the API registrar 404, while still allowing the API registrar 404 to provide a unified definition for executing features that can be used by registered services.

[0091] In some embodiments, the high availability feature may also enable the container platform 210 to deploy a load balancing service 606 that distributes requests to multiple instances 602, 604 of the service. The endpoints of the load balancing service 606 may be registered with the API registrar 404 and available to other services. Alternatively or additionally, each of the multiple instances of the service 602, 604 may be registered with the API registrar 404 as a service endpoint.

[0092] In each of the examples described below, you can apply Fig.16The same principles discussed above. For example, any of the features described below can be accompanied by code that can be received by the API registrar 404 and used to override code that would otherwise be executed by the API registrar 404. Prior to the present disclosure, there was no method for creating uniform defaults for executing features while allowing service developers to override those features when needed. Therefore, the API registrar 404 solves the technical problem by allowing code at the API registrar 404 to be executed by default, while still allowing that code to be overridden by features 1602 received from developers.

[0093] Fig.17 A hardware / software schematic diagram of a feature for enforcing end-to-end encryption through an API registrar according to some embodiments is illustrated. Along with the API definition file 1505, the API registrar 404 can receive a feature 1704 that indicates end-to-end encryption for calling a service 1708 or includes code that generates end-to-end encryption for calling a service 1708. During development, the service 1708 can include its own decryption / encryption code 1710 that causes packets received by the service 1708 to be decrypted and packets returned by the service 1708 to be encrypted. Prior to this disclosure, developers would need to provide specifications that indicate that users of the service 1708 need to provide encryption to be compatible with the service 1708. This embodiment solves the technical problem by allowing the service 1708 to indicate how the client library is generated in calling the service 1706, which ensures compatibility with the encryption of the service 1708.

[0094] In some embodiments, the developer of service 1708 need not include encryption / decryption code 1710 in service 1708. Instead, feature 1704 may simply instruct API registrar 404 to enforce end-to-end encryption for service 1708. When service 1708 is deployed to container platform 210, API registrar 404 may cause encryption / decryption code 1710 to be inserted into service 1708 when service 1708 is deployed. This allows developers to select between different encryption schemes based on feature 1704 and / or allows API registrar 404 to select a preferred encryption scheme as the default scheme.

[0095] End-to-end encryption requires not only that the encryption / decryption code 1710 be inserted into the service 1708 when the service is deployed or during development, but also that the calling service 1706 also includes compatible encryption / decryption code. As described above, when the calling service 1706 needs to use the service 1708, the API registrar 404 can generate one or more client libraries 1702, which fully implement the code required to interact with the service 1708 in a simple and efficient manner. When generating this client library 1702, the API registrar 404 can analyze the characteristics 1704 to determine the encryption scheme used by the service 1708. Then, based on the characteristics 1704, the API registrar 404 can cause compatible encryption / decryption code to be added to the client library 1702 for calling the service 1706. Therefore, when the calling service 1706 sends a request to the service 1708, the information can be encrypted at the calling service 1706 and decrypted once received by the service 1708. Similarly, service 1708 can encrypt the response before sending it to calling service 1706, which can then decrypt the response before passing it outside of client library 1702. This makes the entire encryption process completely transparent to the developer calling service 1706. Feature 1704 can ensure that API registrar 404 has generated encryption / decryption code in client library 1702 for compatibility and implementation of the end-to-end encryption feature, rather than requiring a compatible encryption / decryption scheme to be implemented when calling service 1706.

[0096] Fig.18 The diagram illustrates a feature 1804 for enabling an API registrar to implement usage logging for a service 1808 according to some embodiments. Prior to the present disclosure, in order to monitor and log the frequency, source, success rate, etc. of requests to a service, the service itself had to log such information. Alternatively, the container environment must monitor the service and log its usage information. Logging information at the service 1808 itself is very inefficient and slows down the throughput of each request handled by the service. Similarly, the overhead of requiring the container platform to monitor and log all calls to a particular service also introduces significant overhead to the scheduling and orchestration of container services. This embodiment solves this technical problem by inserting code directly into the client library of the service used to call the service 1808. This allows logging and monitoring of the usage of the service 1808 without affecting the performance of the service 1808 at all in terms of memory usage or CPU usage.

[0097] In addition to the API definition file 1505, the API registrar 404 may also receive a property 1804 indicating usage logging 1804 or including code that implements usage logging 1804. When a developer calling a service 1806 desires to submit a request to a service 1808, the API registrar 404 may automatically generate a client library 1802 that includes code for logging activities associated with the service 1808. As described above, such code may be generated based on default code maintained and executed by the API registrar 404, or may be generated by code received using the property 1804 and executed by the API registrar 404.

[0098] Code for logging activity in client library 1802 may include a counter that increments each time service 1808 is called, a function that causes activity to be logged to a log file when service 1808 is called, and other functions that monitor and record characteristics of requests sent to service 1808 and responses received from service 1808. Depending on the particular embodiment, such code may monitor many different types of characteristics associated with requests made to service 1808. For example, some embodiments may log the total number of calls made to service 1808. Some embodiments may log the success rate of responses received from service 1808. Some embodiments may log the type of data sent in a request to service 1808. Some embodiments may log the time of day or other external information when service 1808 is called. Some embodiments may log input and output packets to / from service 1808 that can be used to debug service 1808. Some embodiments may log any or all of these characteristics in any combination without limitation.

[0099] Fig.19 A hardware / software schematic of feature 1904 that may enforce an authentication protocol on a service 1908 according to some embodiments is illustrated. Some services may require authentication of a user's identity and require the user to be authorized to use the service before responding to a request. Prior to the present disclosure, there were technical issues with performing the authentication and authorization process at the service 1908 itself. This adds overhead in terms of memory usage and CPU usage for each call received by the service 1908, and increases latency to the service when responding. This in turn reduces throughput and limits the number of requests that the service 1908 can handle during any given time interval. These embodiments address this technical issue by moving the authentication / authorization code to a client library 1902 that is automatically generated by the API registrar 1404.

[0100] When the calling service 1906 wants to use the service 1908, the API registrar 404 can generate a client library 1902 including code for performing authorization and / or authentication. In some embodiments, this can include contacting an external authentication / authorization service 1920 that specifically verifies the identity of the user and / or determines whether the user is authorized to use the service 1908. The external authentication / authorization service 1920 can include an access manager, a lightweight directory access protocol (LDAP) manager, an access control list (ACL), a network authentication protocol manager, etc. Then, when the authentication / authorization process is successful, the code in the client library 1902 can send the call to the service 1908.

[0101] By offloading authentication / authorization enforcement to the API registrar 404 and client library 1902, such code can be completely eliminated from the service 1908. Because interaction with external authentication / authorization services 1920 often comes with significant delays, such delays can be removed from the service 1908 to increase throughput. In addition, rather than hard-coding authentication / authorization enforcement into the service 1908, developers of the service 1908 can simply select a predefined authentication / authorization scheme using the feature 1904 sent to the API registrar 404 instead. The API registrar 404 can maintain a predefined list of authorization / authentication with accompanying implementation code for the client library 1902. This also prevents the calling service 1906 from sending a request that cannot be authorized and / or authenticated to the service 1908. Instead, if the authentication and / or authorization routine is unsuccessful, the call can be terminated at the client library 1902. This ensures that the service 1908 only receives authenticated and / or authorized requests.

[0102] Another technical improvement provided by API registrar 404 is the ability to upgrade any functionality provided by feature 1904 without changing any code of any registered service. For example, because the authentication / authorization code has been offloaded to client library 1902 generated by API registrar 1404, client library 1902 can be updated to change the authentication / authorization scheme. No code in calling service 1906 or service 1908 needs to be modified. Because the code is only changed in a single location, this greatly reduces the probability of code integration errors that would otherwise accompany distributed patches sent to each individual service.

[0103] Fig. 20A hardware / software schematic of feature 2004 for enabling runtime instantiation of services according to some embodiments is illustrated. Some services may be rarely used or only used within predefined time intervals. Therefore, deploying a service to a container platform does not necessarily always result in actually instantiating a service instance in a container that is immediately available. Containers can be instantiated and activated very quickly compared to virtual machines. Therefore, a service developer may expect that the service is instantiated only when the service is called. The service developer may also expect that the service is instantiated only within a predefined time interval. Similarly, a service developer can specify that a service instance should be deleted after a predefined time interval of inactivity.

[0104] In addition to receiving the API definition file 1505, the API registrar 404 may also receive properties 2004 that specify runtime instantiation or other instantiation parameters. For example, a property may include a specification of one or more time intervals after deployment that the service 2008 should be instantiated. In another example, a property may include an indication that the service 2008 should only be instantiated on demand. In another example, a property may specify a timeout interval after which the instantiated service 2008 should be deleted from the container platform.

[0105] When the calling service 2006 wants to use the service 2008, the API registrar 404 can generate code in the client library 2002 to handle the runtime instance of the service 2008. For example, the CreateInstance() function call in the client library 2002 can create a call to the API registrar 404. The API registrar can then interact with the container platform 210 to determine whether an operational instance of the service 2008 is available. If it is not available, the API registrar 404 can instruct the container platform 210 to instantiate an instance of the service 2008 in a container in the container platform 210. The container platform 210 can then return an endpoint (e.g., an IP address and port number) to the API registrar 404. The API registrar 404 can then create a binding between the endpoint and the API function call created in the client library 2002. The API registrar 404 can then return the endpoint to the client library 2002, which can be used to create a direct connection between the calling service 2006 and the newly instantiated service 2008.

[0106] For services that should only be instantiated during predefined time intervals, API registrar 404 can establish a table of instantiation and deletion times for certain services. Based on these stored instantiation / deletion times, API registrar 404 can instruct container platform 210 to instantiate or delete instances of service 2008. API registrar 404 can also specify multiple instances that should be instantiated during these predefined intervals. For example, from 5:00PM to 10:00PM, feature 2004 can specify that at least 10 instances of service 2008 are active on container platform 210. When this time interval occurs, API registrar 404 can instruct container platform 210 to create additional instances.

[0107] Fig.21 The hardware / software schematic diagram of feature 2104 for implementing the rate limiting function for service 2108 according to some embodiments is illustrated. Some services may need to limit the rate at which requests are received. Other services may need to limit requests from certain senders or types of services. Prior to the present disclosure, this function must be performed by the service itself by determining the source of each request, comparing the source with a whitelist / blacklist, and adjusting the rate at which it serves these requests. As with most of the above examples, placing this overhead in the service itself will increase the amount of memory and CPU power used by the service and limit the throughput of the service. These embodiments solve this technical problem by automatically generating rate limiting code in the client library generated by the API registrar. This allows the service to specify rate limits with the help of feature 2104 without requiring service 2108 to implement the function using all its associated overhead.

[0108] When calling service 2106 wants to send a request to service 2108, API registrar 404 can automatically generate client library 2102 including rate limiting code. When generating client library 2102, API registrar 404 can determine whether specific service 2106 should be subject to rate limiting. If not, client library 2102 can be generated as usual. If API registrar 404 determines that calling service 2106 should be subject to rate limiting (e.g., by comparing with whitelist / blacklist), then API registrar 404 can insert code that adds delay, adds counter and / or otherwise implements rate limiting function in client library 2102 to ensure that the calling service 2106 performs a predefined maximum number of requests in any given time interval according to a predefined rate. Such code can also implement a time window in which the rate limiting function will be active. This allows service 2108 to automatically implement rate limiting during high business intervals.

[0109] Each method described herein can be realized by a special-purpose computer system. Each step of these methods can be automatically performed by a computer system, and / or can be provided with input / output related to a user. For example, a user can provide input for each step in the method, and each of these inputs can be in response to a specific output requesting such input, wherein the output is generated by a computer system. Each input can be received in response to a corresponding request output. In addition, the input can be received from a user, received from another computer system as a data stream, retrieved from a memory location, retrieved through a network, requested from a web service, etc. Similarly, the output can be provided to a user, provided to another computer system as a data stream, stored in a memory location, sent through a network, provided to a web service, etc. In short, each step of the method described herein can be performed by a computer system, and can be related to a computer system and any number of inputs, outputs and / or requests from a computer system, which can be related to or may not be related to a user. Those steps that can be referred to as not involving a user are automatically performed by a computer system without human intervention. Therefore, it will be understood from this disclosure that each step of each method described herein can be modified to include input and output to and from a user, or can be completed automatically by a computer system without human intervention, with any determination made by a processor. In addition, some embodiments of each method described herein can be implemented as a set of instructions stored on a tangible, non-transitory storage medium to form a tangible software product.

[0110] Fig. 22 A simplified diagram of a distributed system 2200 that can interact with any of the above-described embodiments is depicted. In the illustrated embodiment, the distributed system 2200 includes one or more client computing devices 2202, 2204, 2206, and 2208 that can be configured to execute and operate client applications, such as web browsers, proprietary clients (e.g., Oracle Forms), etc., over one or more networks 2210. A server 2212 can be communicatively coupled to the remote client computing devices 2202, 2204, 2206, and 2208 via the network 2210.

[0111] In various embodiments, the server 2212 may be adapted to run one or more services or software applications provided by one or more components of the system. In some embodiments, these services may be provided as web-based services or cloud services, or provided to users of client computing devices 2202, 2204, 2206, and / or 2208 under a software as a service (SaaS) model. Users operating client computing devices 2202, 2204, 2206, and / or 2208 may in turn utilize one or more client applications to interact with the server 2212 to utilize the services provided by these components.

[0112] In the configuration depicted in the figure, the software components 2218, 2220 and 2222 of the system 2200 are shown as being implemented on the server 2212. In other embodiments, one or more components of the system 2200 and / or the services provided by these components may also be implemented by one or more of the client computing devices 2202, 2204, 2206 and / or 2208. Then, the user operating the client computing device can use the services provided by these components using one or more client applications. These components can be implemented with hardware, firmware, software or a combination thereof. It should be appreciated that various different system configurations are possible, which may be different from the distributed system 2200. The embodiment shown in the figure is therefore an example of a distributed system for implementing the embodiment system, and is not intended to be limiting.

[0113] Client computing devices 2202, 2204, 2206, and / or 2208 may be portable handheld devices (e.g., Cellular phone, computing tablets, personal digital assistants (PDAs), or wearable devices (e.g., Google head mounted display), running software such as Microsoft Windows and / or various mobile operating systems (such as iOS, Windows Phone, Android, BlackBerry 10, Palm OS, etc.), and enable Internet, email, short message service (SMS), or other communication protocols. The client computing device may be a general-purpose personal computer, including, for example, a computer running various versions of Microsoft Apple The client computing device may be a personal computer and / or laptop computer running a variety of commercially available or any workstation computer running any operating system in a UNIX-like operating system (including but not limited to various GNU / Linux operating systems, such as, for example, Google Chrome OS). Alternatively or additionally, client computing devices 2202, 2204, 2206, and 2208 may be any other electronic device capable of communicating over network(s) 2210, such as a thin client computer, an Internet-enabled gaming system (e.g., with or without A gesture input device such as a Microsoft Xbox game console) and / or a personal messaging device.

[0114] Although the exemplary distributed system 2200 is shown with four client computing devices, any number of client computing devices may be supported. Other devices (such as devices with sensors, etc.) may interact with the server 2212 .

[0115] The network(s) 2210 in the distributed system 2200 may be any type of network familiar to those skilled in the art that may support data communications using any of a variety of commercially available protocols, including but not limited to TCP / IP (Transmission Control Protocol / Internet Protocol), SNA (Systems Network Architecture), IPX (Internetwork Packet Exchange), AppleTalk, and the like. Merely by way of example, the network(s) 2210 may be a local area network (LAN), such as a LAN based on Ethernet, Token Ring, and the like. The network(s) 2210 may be a wide area network and the Internet. It may include virtual networks, including but not limited to virtual private networks (VPNs), intranets, extranets, public switched telephone networks (PSTNs), infrared networks, wireless networks (e.g., in accordance with the Institute of Electrical and Electronics Engineers (IEEE) 802.11 protocol suite, and / or any other wireless protocol); and / or any combination of these and / or other networks.

[0116] Server 2212 may include one or more general-purpose computers, dedicated server computers (including, by way of example, PC (personal computer) servers, Servers 2212 may be servers, mid-size servers, mainframe computers, rack-mounted servers, etc.), server farms, server clusters, or any other suitable arrangement and / or combination. In various embodiments, server 2212 may be adapted to run one or more services or software applications described in the foregoing disclosure. For example, server 2212 may correspond to a server for performing the above-described processing according to an embodiment of the present disclosure.

[0117] Server 2212 can run an operating system including any of the operating systems discussed above, as well as any commercially available server operating system. Server 2212 can also run any of a variety of additional server applications and / or middle-tier applications, including HTTP (Hypertext Transfer Protocol) servers, FTP (File Transfer Protocol) servers, CGI (Common Gateway Interface) servers, Servers, database servers, etc. Exemplary database servers include, but are not limited to, those commercially available from Oracle, Microsoft, Sybase, IBM (International Business Machines), etc.

[0118] In some implementations, server 2212 may include one or more applications to analyze and integrate data feeds and / or event updates received from users of client computing devices 2202, 2204, 2206, and 2208. As examples, data feeds and / or event updates may include, but are not limited to: feed, Real-time updates and continuous data streams updated or received from one or more third-party information sources, which may include real-time events related to sensor data applications, financial quote machines, network performance measurement tools (e.g., network monitoring and business management applications), clickstream analysis tools, automobile traffic monitoring, etc. Server 2212 may also include one or more applications to display data feeds and / or real-time events via one or more display devices of client computing devices 2202, 2204, 2206, and 2208.

[0119] Distributed system 2200 may also include one or more databases 2214 and 2216. Databases 2214 and 2216 may reside in various locations. As an example, one or more of databases 2214 and 2216 may reside on a non-transient storage medium local to server 2212 (and / or residing in server 2212). Alternatively, databases 2214 and 2216 may be away from server 2212 and communicate with server 2212 via a network-based connection or a dedicated connection. In one set of embodiments, databases 2214 and 2216 may reside in a storage area network (SAN). Similarly, any necessary files for executing the functions that server 2212 has may be appropriately stored locally on server 2212 and / or stored remotely. In one set of embodiments, databases 2214 and 2216 may include a relational database suitable for storing, updating and retrieving data in response to commands in SQL format, such as a database provided by Oracle.

[0120] Fig.232300 by which services provided by one or more components of the embodiment system can be provided as cloud services. In the illustrated embodiment, the system environment 2300 includes one or more client computing devices 2304, 2306, and 2308 that can be used by a user to interact with a cloud infrastructure system 2302 that provides cloud services. The client computing device can be configured to operate a client application, such as a web browser, a proprietary client application (e.g., Oracle Forms), or some other application, that can be used by a user of the client computing device to interact with the cloud infrastructure system 2302 to use the services provided by the cloud infrastructure system 2302.

[0121] It should be appreciated that the cloud infrastructure system 2302 depicted in the figure may have other components in addition to the components depicted. In addition, the embodiment shown in the figure is only one example of a cloud infrastructure system that can be combined with embodiments of the present invention. In some other embodiments, the cloud infrastructure system 2302 may have more or fewer components than shown in the figure, may combine two or more components, or may have a different configuration or arrangement of components.

[0122] Client computing devices 2304 , 2306 , and 2308 may be similar devices to those described above with respect to 2202 , 2204 , 2206 , and 2208 .

[0123] Although the exemplary system environment 2300 is shown with three client computing devices, any number of client computing devices can be supported. Other devices such as devices with sensors and the like can interact with the cloud infrastructure system 2302 .

[0124] Network(s) 2310 can facilitate data communication and exchange between clients 2304, 2306, and 2308 and cloud infrastructure system 2302. Each network can be any type of network familiar to those skilled in the art that can support data communication using any of a variety of commercially available protocols, including the protocols described above for network(s) 2210.

[0125] Cloud infrastructure system 2302 may include one or more computers and / or servers, which may include those described above with respect to server 2212 .

[0126] In certain embodiments, the services provided by the cloud infrastructure system may include many services available on demand to users of the cloud infrastructure system, such as online data storage and backup solutions, web-based email services, hosted office suites and document collaboration services, database processing, managed technical support services, etc. The services provided by the cloud infrastructure system can be dynamically scaled to meet the needs of users of the cloud infrastructure system. The specific instantiation of the services provided by the cloud infrastructure system is referred to as a "service instance" in this article. In general, any service available to users from a cloud service provider's system via a communication network (such as the Internet) is referred to as a "cloud service." Typically, in a public cloud environment, the servers and systems that make up the cloud service provider's system are different from the customer's own on-premises servers and systems. For example, a cloud service provider's system can host applications, and users can order and use applications on demand via a communication network such as the Internet.

[0127] In some examples, services in a computer network cloud infrastructure may include protected computer network access to storage devices, hosted databases, hosted web servers, software applications, or other services provided by a cloud provider to users, or as otherwise known in the art. For example, a service may include password-protected access to remote storage devices on the cloud over the Internet. As another example, a service may include a hosted relational database and scripting language middleware engine based on web services for private use by networked developers. As another example, a service may include access to an email software application hosted on a cloud provider's website.

[0128] In certain embodiments, the cloud infrastructure system 2302 may include a suite of application, middleware, and database service offerings delivered to customers in a self-service, subscription-based, elastically scalable, reliable, highly available, and secure manner. An example of such a cloud infrastructure system is the Oracle public cloud provided by the present assignee.

[0129] In various embodiments, the cloud infrastructure system 2302 may be adapted to automatically provision, manage, and track customer subscriptions to services provided by the cloud infrastructure system 2302. The cloud infrastructure system 2302 may provide cloud services via different deployment models. For example, services may be provided in accordance with a public cloud model, in which the cloud infrastructure system 2302 is owned by an organization that sells cloud services (e.g., owned by Oracle), and the services are available to the general public or businesses in different industries. As another example, services may be provided in accordance with a private cloud model, in which the cloud infrastructure system 2302 operates only for a single organization and may provide services to one or more entities within the organization. Cloud services may also be provided in accordance with a community cloud model, in which the cloud infrastructure system 2302 and the services provided by the cloud infrastructure system 2302 are shared by several organizations in a related community. Cloud services may also be provided in accordance with a hybrid cloud model, which is a combination of two or more different models.

[0130] In some embodiments, the services provided by cloud infrastructure system 2302 may include one or more services provided under a software as a service (SaaS) category, a platform as a service (PaaS) category, an infrastructure as a service (IaaS) category, or other service categories including hybrid services. A customer may subscribe to one or more services provided by cloud infrastructure system 2302 via a subscription order. Cloud infrastructure system 2302 then performs processing to provide the services in the customer's subscription order.

[0131] In some embodiments, the services provided by the cloud infrastructure system 2302 may include, but are not limited to, application services, platform services, and infrastructure services. In some examples, application services may be provided by the cloud infrastructure system via a SaaS platform. The SaaS platform may be configured to provide cloud services that fall into the SaaS category. For example, a SaaS platform may provide the ability to build and deliver on-demand application suites on an integrated development and deployment platform. The SaaS platform may manage and control the underlying software and infrastructure used to provide SaaS services. By utilizing the services provided by the SaaS platform, customers can utilize applications executed on the cloud infrastructure system. Customers can obtain application services without the need for customers to purchase separate licenses and support. A variety of different SaaS services may be provided. Examples include, but are not limited to, services that provide solutions for sales performance management, enterprise integration, and business flexibility to large organizations.

[0132] In some embodiments, platform services can be provided by a cloud infrastructure system via a PaaS platform. The PaaS platform can be configured to provide cloud services that fall into the PaaS category. Examples of platform services may include, but are not limited to, services that enable organizations (such as Oracle) to integrate existing applications on a shared public architecture and to fully utilize the shared services provided by the platform to build new applications. The PaaS platform can manage and control the underlying software and infrastructure for providing PaaS services. Customers can obtain PaaS services provided by a cloud infrastructure system without the need for customers to purchase separate licenses and support. Examples of platform services include, but are not limited to, Oracle Java Cloud Service (JCS), Oracle Database Cloud Service (DBCS), etc.

[0133] By utilizing the services provided by the PaaS platform, customers can adopt programming languages ​​and tools supported by the cloud infrastructure system, and can also control the deployed services. In some embodiments, the platform services provided by the cloud infrastructure system may include database cloud services, middleware cloud services (e.g., Oracle Fusion Middleware Services), and Java cloud services. In one embodiment, the database cloud service may support a shared service deployment model that enables organizations to pool database resources and supply databases as a service to customers in the form of a database cloud. In the cloud infrastructure system, the middleware cloud service can provide customers with a platform for developing and deploying various business applications, and the Java cloud service can provide customers with a platform for deploying Java applications.

[0134] A variety of different infrastructure services can be provided by IaaS platforms in cloud infrastructure systems. Infrastructure services facilitate the management and control of underlying computing resources (such as storage, networks, and other basic computing resources) for customers to utilize services provided by SaaS platforms and PaaS platforms.

[0135] In some embodiments, cloud infrastructure system 2302 may also include infrastructure resources 2330 for providing resources for providing various services to customers of the cloud infrastructure system. In one embodiment, infrastructure resources 2330 may include a combination of pre-integrated and optimized hardware (such as servers, storage devices, and networking resources) to perform services provided by PaaS platforms and SaaS platforms.

[0136] In some embodiments, resources in cloud infrastructure system 2302 can be shared by multiple users and dynamically reallocated as needed. In addition, resources can be allocated to users in different time zones. For example, cloud infrastructure system 2330 can enable a first group of users in a first time zone to utilize the resources of the cloud infrastructure system for a specified number of hours, and then enable the same resources to be reallocated to another group of users in a different time zone, thereby maximizing the utilization of the resources.

[0137] In certain embodiments, a plurality of internal shared services 2332 may be provided that are shared by different components or modules of the cloud infrastructure system 2302 and services provided by the cloud infrastructure system 2302. These internal shared services may include, but are not limited to: security and identity services, integration services, enterprise repository services, enterprise manager services, virus scanning and whitelisting services, high availability, backup and recovery services, cloud-enabled services, email services, notification services, file transfer services, and the like.

[0138] In some embodiments, cloud infrastructure system 2302 can provide comprehensive management of cloud services (e.g., SaaS, PaaS, and IaaS services) in the cloud infrastructure system. In one embodiment, cloud management functions can include capabilities for provisioning, managing, and tracking customer subscriptions received by cloud infrastructure system 2302, etc.

[0139] In one embodiment, as depicted in the figure, cloud management functionality may be provided by one or more modules, such as order management module 2320, order orchestration module 2322, order provisioning module 2324, order management and monitoring module 2326, and identity management module 2328. These modules may include or be provided using one or more computers and / or servers, which may be general purpose computers, dedicated server computers, server farms, server clusters, or any other suitable arrangement and / or combination.

[0140] In exemplary operation 2334, a customer using a client device (such as client device 2304, 2306, or 2308) may interact with cloud infrastructure system 2302 by requesting one or more services provided by cloud infrastructure system 2302 and placing a subscription order for one or more services offered by cloud infrastructure system 2302. In certain embodiments, the customer may access a cloud user interface (UI) (cloud UI 2312, cloud UI 2314, and / or cloud UI 2316) and place a subscription order via these UIs. The order information received by cloud infrastructure system 2302 in response to the customer placing an order may include information identifying the customer and one or more services offered by cloud infrastructure system 2302 to which the customer wants to subscribe.

[0141] After a customer places an order, order information is received via cloud UIs 2312 , 2314 , and / or 2316 .

[0142] At operation 2336, the order is stored in order database 2318. Order database 2318 may be one of several databases operated by cloud infrastructure system 2318 and in conjunction with other system elements.

[0143] At operation 2338, the order information is forwarded to order management module 2320. In some cases, order management module 2320 may be configured to perform billing and accounting functions related to the order, such as validating the order, and booking the order after validation.

[0144] At operation 2340, information about the order is transmitted to order orchestration module 2322. Order orchestration module 2322 can use the order information to orchestrate the provision of services and resources for the order placed by the customer. In some cases, order orchestration module 2322 can use the services of order provisioning module 2324 to orchestrate the provision of resources to support the subscribed services.

[0145] In certain embodiments, the order orchestration module 2322 enables management of the business processes associated with each order and applies business logic to determine whether the order should continue to be supplied. At operation 2342, upon receiving an order for a new subscription, the order orchestration module 2322 sends a request to the order supply module 2324 to allocate resources and configure those resources required to fulfill the subscription order. The order supply module 2324 enables allocation of resources for the services ordered by the customer. The order supply module 2324 provides an abstraction layer between the cloud services provided by the cloud infrastructure system 2300 and the physical implementation layer for supplying resources for providing the requested services. Therefore, the order orchestration module 2322 can be isolated from implementation details such as whether services and resources are actually supplied immediately or pre-provisioned and allocated / assigned only after request.

[0146] At operation 2344 , once the services and resources are provisioned, notifications of the provided services may be sent to customers on client devices 2304 , 2306 , and / or 2308 via the order provisioning module 2324 of the cloud infrastructure system 2302 .

[0147] At operation 2346, order management and monitoring module 2326 may manage and track the customer's subscription order. In some cases, order management and monitoring module 2326 may be configured to collect usage statistics for the services in the subscription order, such as the amount of storage used, the amount of data transferred, the number of users, and the amount of system uptime and system downtime.

[0148] In certain embodiments, cloud infrastructure system 2300 may include identity management module 2328. Identity management module 2328 may be configured to provide identity services, such as access management and authorization services in cloud infrastructure system 2300. In some embodiments, identity management module 2328 may control information about clients that wish to utilize services provided by cloud infrastructure system 2302. Such information may include information authenticating the identities of these clients and information describing which actions these clients are authorized to perform with respect to various system resources (e.g., files, directories, applications, communication ports, memory segments, etc.). Identity management module 2328 may also include management of descriptive information about each client and how and by whom the descriptive information may be accessed and modified.

[0149] Fig.24 An exemplary computer system 2400 in which various embodiments of the present invention may be implemented is shown. System 2400 may be used to implement any of the above-described computer systems. As shown, computer system 2400 includes a processing unit 2404 that communicates with multiple peripheral subsystems via a bus subsystem 2402. These peripheral subsystems may include a processing acceleration unit 2406, an I / O subsystem 2408, a storage subsystem 2418, and a communication subsystem 2424. Storage subsystem 2418 includes a tangible computer-readable storage medium 2422 and a system memory 2410.

[0150] The bus subsystem 2402 provides a mechanism for allowing the various components and subsystems of the computer system 2400 to communicate with each other by intention. Although the bus subsystem 2402 is schematically shown as a single bus, the alternative embodiment of the bus subsystem can utilize multiple buses. The bus subsystem 2402 can be any of the bus structures of several types of any bus architecture in the various bus architectures, including a memory bus or a memory controller, a peripheral bus, and a local bus. For example, this architecture can include an industrial standard architecture (ISA) bus, a microchannel architecture (MCA) bus, an enhanced ISA (EISA) bus, a video electronics standard association (VESA) local bus, and a peripheral component interconnect (PCI) bus, which can be implemented as a Mezzanine bus manufactured by the IEEE P1386.1 standard.

[0151] The processing unit 2404, which may be implemented as one or more integrated circuits (e.g., conventional microprocessors or microcontrollers), controls the operation of the computer system 2400. One or more processors may be included in the processing unit 2404. These processors may include single-core or multi-core processors. In certain embodiments, the processing unit 2404 may be implemented as one or more independent processing units 2432 and / or 2434, wherein a single-core or multi-core processor is included in each processing unit. In other embodiments, the processing unit 2404 may also be implemented as a quad-core processing unit formed by integrating two dual-core processors into a single chip.

[0152] In various embodiments, the processing unit 2404 can execute various programs in response to the program code and can maintain multiple concurrently executed programs or processes. At any given time, some or all of the program code to be executed may reside in (one or more) processors 2404 and / or in the storage subsystem 2418. Through appropriate programming, (one or more) processors 2404 can provide the various functions described above. The computer system 2400 can additionally include a processing acceleration unit 2406, which can include a digital signal processor (DSP), a special processor, and the like.

[0153] I / O subsystem 2408 may include user interface input devices and user interface output devices. User interface input devices may include a keyboard, a pointing device such as a mouse or trackball, a touch pad or touch screen incorporated into a display, a scroll wheel, a click wheel, a dial, buttons, switches, a keyboard, an audio input device with a voice command recognition system, a microphone, and other types of input devices. User interface input devices may include, for example, motion sensing and / or gesture recognition devices such as Microsoft Motion sensors that enable users to control apps such as Microsoft 360 game controller. The user interface input device may also include an eye gesture recognition device, such as detecting eye activity from the user (e.g., a "wink" when taking a picture and / or making a menu selection) and translating eye gestures to the input device (e.g., Google ) in Google In addition, the user interface input device may include a user interface that enables the user to communicate with the voice recognition system (e.g., Navigator) interactive voice recognition sensing device.

[0154] The user interface input device may also include, but is not limited to, a three-dimensional (3D) mouse, a joystick or pointing stick, a game board and a drawing board and audio / video equipment, such as a speaker, a digital camera, a digital video camera, a portable media player, a webcam, an image scanner, a fingerprint scanner, a barcode reader 3D scanner, a 3D printer, a laser rangefinder, and a sight tracking device. In addition, the user interface input device may include, for example, a medical imaging input device, such as a computer tomography, a magnetic resonance imaging, a positron emission tomography, a medical ultrasound device. The user interface input device may also include, for example, an audio input device such as a MIDI keyboard, a digital musical instrument, etc.

[0155] The user interface output devices may include a display subsystem, indicator lights, or non-visual displays such as audio output devices, etc. The display subsystem may be a cathode ray tube (CRT), a flat panel device such as using a liquid crystal display (LCD) or plasma display, a projection device, a touch screen, etc. In general, the use of the term "output device" is intended to include all possible types of devices and mechanisms for outputting information from the computer system 2400 to a user or other computers. For example, the user interface output devices may include, but are not limited to, various display devices that visually convey text, graphics, and audio / video information, such as monitors, printers, speakers, headphones, car navigation systems, plotters, voice output devices, and modems.

[0156] Computer system 2400 may include a storage subsystem 2418 containing software elements, shown as currently located in system memory 2410. System memory 2410 may store program instructions that may be loaded and executed on processing unit 2404, as well as data generated during execution of these programs.

[0157] Depending on the configuration and type of computer system 2400, system memory 2410 may be volatile (such as random access memory (RAM)) and / or non-volatile (such as read-only memory (ROM), flash memory, etc.). RAM typically contains data and / or program modules that are immediately accessible to and / or currently being operated and executed by processing unit 2404. In some implementations, system memory 2410 may include multiple different types of memory, such as static random access memory (SRAM) or dynamic random access memory (DRAM). In some implementations, a basic input / output system (BIOS) containing basic routines that help transfer information between elements of computer system 2400, such as during startup, may typically be stored in ROM. By way of example, but not limitation, system memory 2410 also illustrates application programs 2412, which may include client applications, web browsers, middle-tier applications, relational database management systems (RDBMS), etc., program data 2414, and an operating system 2416. By way of example, operating system 2416 may include various versions of Microsoft Apple and / or Linux operating systems, various commercially available or UNIX-like operating systems (including but not limited to various GNU / Linux operating systems, Google OS, etc.) and / or such as iOS, Phone, OS, 10OS and OS operating system such as mobile operating system.

[0158] Storage subsystem 2418 may also provide a tangible computer-readable storage medium for storing basic programming and data structures that provide the functionality of some embodiments. Software (programs, code modules, instructions) that provide the above-described functionality when executed by the processor may be stored in storage subsystem 2418. These software modules or instructions may be executed by processing unit 2404. Storage subsystem 2418 may also provide a repository for storing data used in accordance with the present invention.

[0159] The storage subsystem 2400 may also include a computer-readable storage media reader 2420 that may be further connected to a computer-readable storage medium 2422. Together with and, optionally in conjunction with the system memory 2410, the computer-readable storage medium 2422 may comprehensively represent remote, local, fixed, and / or removable storage devices plus storage media for temporarily and / or more permanently containing, storing, transmitting, and retrieving computer-readable information.

[0160] The computer-readable storage medium 2422 containing the code or portions of the code may also include any suitable media known or used in the art, including storage media and communication media, such as, but not limited to, volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage and / or transmission of information. This may include tangible computer-readable storage media, such as RAM, ROM, electrically erasable programmable ROM (EEPROM), flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage device, magnetic cassette, magnetic tape, magnetic disk storage device or other magnetic storage device, or other tangible computer-readable medium. This may also include non-tangible computer-readable media, such as data signals, data transmissions, or any other medium that can be used to send the desired information and can be accessed by the computing system 2400.

[0161] As examples, computer-readable storage media 2422 may include a hard disk drive that reads from or writes to a non-removable nonvolatile magnetic media, a magnetic disk drive that reads from or writes to a removable nonvolatile magnetic disk, and a magnetic disk drive that reads from or writes to a removable nonvolatile optical disk, such as a CD ROM, a DVD, and a DVD. Computer readable storage media 2422 may include, but is not limited to, optical disks or other optical media (discs or other optical media) or optical disk drives that read or write to removable non-volatile optical disks. Computer readable storage media 2422 may include, but is not limited to, The computer readable storage medium 2422 may include a solid-state drive (SSD) based on non-volatile memory (such as a flash memory-based SSD, an enterprise flash drive, a solid-state ROM, etc.), a volatile memory-based SSD (such as a solid-state RAM, a dynamic RAM, a static RAM, a DRAM-based SSD, a magnetoresistive RAM (MRAM) SSD), and a hybrid SSD using a combination of a DRAM-based SSD and a flash memory-based SSD. The disk drive and its associated computer readable media may provide non-volatile storage of computer readable instructions, data structures, program modules, and other data for the computer system 2400.

[0162] The communication subsystem 2424 provides an interface to other computer systems and networks. The communication subsystem 2424 is used as an interface for receiving data from other systems and sending data from the computer system 2400 to other systems. For example, the communication subsystem 2424 can enable the computer system 2400 to be connected to one or more devices via the Internet. In some embodiments, the communication subsystem 2424 may include a radio frequency (RF) transceiver component, a global positioning system (GPS) receiver component and / or other components for accessing wireless voice and / or data networks (for example, using cellular phone technology, advanced data network technologies such as 3G, 4G or EDGE (Enhanced Data Rate for Global Evolution), WiFi (IEEE 802.11 series standards), or other mobile communication technologies, or any combination thereof). In some embodiments, as an addition or replacement of a wireless interface, the communication subsystem 2424 may provide a wired network connection (for example, Ethernet).

[0163] In some embodiments, the communication subsystem 2424 may also receive input communications in the form of structured and / or unstructured data feeds 2426 , event streams 2428 , event updates 2430 , and the like on behalf of one or more users who may use the computer system 2400 .

[0164] As an example, the communication subsystem 2424 may be configured to receive data feeds 2426 in real time from users of a social network and / or other communication services, such as feed, Updates, web feeds such as Rich Site Summary (RSS) feeds, and / or real-time updates from one or more third-party information sources.

[0165] Additionally, the communication subsystem 2424 may also be configured to receive data in the form of a continuous data stream, which may include event streams 2428 and / or event updates 2430, which may be continuous or unbounded in nature, real-time events without explicit termination. Examples of applications that generate continuous data may include, for example, sensor data applications, financial quote machines, network performance measurement tools (e.g., network monitoring and traffic management applications), clickstream analysis tools, automobile traffic monitoring, and the like.

[0166] The communication subsystem 2424 may also be configured to output structured and / or unstructured data feeds 2426, event streams 2428, event updates 2430, etc. to one or more databases, which may be in computer communication with one or more streaming data source computers coupled to the computer system 2400.

[0167] Computer system 2400 may be one of various types, including a handheld portable device (e.g., Cellular phone, computing tablets, PDAs), wearable devices (e.g., Google head mounted display), PC, workstation, mainframe, kiosk, server rack, or any other data processing system.

[0168] Due to the ever-changing nature of computers and networks, the description of the computer system 2400 depicted in the figure is only intended as a specific example. Many other configurations with more or fewer components than the system depicted in the figure are possible. For example, customized hardware may also be used and / or specific elements may be implemented with hardware, firmware, software (including applets) or a combination thereof. In addition, connections to other computing devices such as network input / output devices may also be employed. Based on the disclosure and teachings provided herein, one of ordinary skill in the art will recognize other ways and / or methods of implementing various embodiments.

[0169] In the foregoing description, for the purpose of explanation, many specific details are set forth in order to provide a thorough understanding of various embodiments of the present invention. However, it is clear to those skilled in the art that embodiments of the present invention may be practiced without some of these specific details. In other cases, well-known structures and devices are shown in block diagram form.

[0170] The above description provides exemplary embodiments only and is not intended to limit the scope, applicability or configuration of the present disclosure. More specifically, the foregoing description of the exemplary embodiments will provide an enabling description for implementing the exemplary embodiments for those skilled in the art. It should be understood that various changes may be made to the functions and arrangements of the elements without departing from the spirit and scope of the present invention as set forth in the appended claims.

[0171] Specific details are given in the foregoing description to provide a thorough understanding of the embodiments. However, it will be appreciated by those of ordinary skill in the art that the embodiments may be practiced without these specific details. For example, circuits, systems, networks, processes, and other components may have been shown as components in block diagram form so as not to obscure the embodiments with unnecessary detail. In other cases, well-known circuits, processes, algorithms, structures, and techniques may have been shown without unnecessary detail so as not to obscure the embodiments.

[0172] Furthermore, it should be noted that various embodiments may have been described as a process, which is depicted as a flow chart, a flow diagram, a structure diagram, or a block diagram. Although the flow chart may have described the operations as a sequential process, many operations may be performed in parallel or simultaneously. In addition, the order of the operations may be rearranged. A process terminates when its operations are completed, but there may be additional steps not included in the figure. A process may correspond to a method, a function, a program, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination may correspond to the function returning to the calling function or the main function.

[0173] The term "computer-readable medium" includes, but is not limited to, portable or fixed storage devices, optical storage devices, wireless channels, and various other media capable of storing, containing, or carrying (one or more) instructions and / or data. A code segment or machine executable instruction can represent any combination of a process, function, subroutine, program, routine, subroutine, module, software package, class, or instruction, data structure, or program statement. A code segment can be coupled to another code segment or hardware circuit by transmitting and / or receiving information, data, independent variables, parameters, or memory contents. Information, independent variables, parameters, data, etc. can be transmitted, forwarded, or sent via any suitable means, including memory sharing, message passing, token passing, network transmission, etc.

[0174] In addition, the embodiments may be implemented by hardware, software, firmware, middleware, microcode, hardware description language, or any combination thereof. When implemented in software, firmware, middleware, or microcode, the program code or code segments for performing the necessary tasks may be stored in a machine-readable medium. (One or more) processors may perform the necessary tasks.

[0175] In the foregoing description, various aspects of the present invention have been described with reference to their specific embodiments, but it will be appreciated by those skilled in the art that the present invention is not limited thereto. Each feature and aspect disclosed above may be used alone or in combination. In addition, without departing from the broader spirit and scope of this specification, the embodiments may be used in any number of environments and applications other than those described herein. Accordingly, this specification and the accompanying drawings should be considered to be illustrative rather than restrictive.

[0176] In addition, for the purpose of illustration, method is described in a particular order. It should be appreciated that, in an alternative embodiment, the method can be performed in a sequence different from the described order. It should also be appreciated that the above method can be performed by hardware components, or can be implemented with a sequence of machine executable instructions, which can be used to make a machine (such as a general or special processor or logic circuit programmed with instructions) perform the method. These machine executable instructions can be stored in one or more machine-readable media, such as CD-ROM or other types of optical disks, floppy disks, ROM, RAM, EPROM, EEPROM, magnetic cards or optical cards, flash memory or other types of machine-readable media suitable for storing electronic instructions. Alternatively, the method can be performed by a combination of hardware and software.

Claims

1. A method for customizing the deployment and operation of a service in a container environment, the method comprising: An API definition is received at an API registrar, the API definition comprising: an endpoint of a service that is or is to be packaged in a container that is or is to be deployed in a container environment; and One or more API functions associated with the service; receiving, at an API registrar, characteristics of the service, wherein the characteristics of the service are received with the API definition and define runtime characteristics of the service, wherein the runtime characteristics of the service include one or more of: end-to-end encryption, usage / logging requirements, user authentication, on-demand service instantiation, multiple service deployment instances for high availability, and rate / usage limiting; Determining, by the API registrar, that characteristics of the service affect deployment of the service into the container environment; In response to determining that the characteristic affects deployment of the service, the service is deployed based at least in part on the characteristic.

2. The method of claim 1, wherein the characteristic comprises code executed by an API registrar.

3. The method of claim 1, wherein the characteristics include a flag used by the API registrar to select a predefined process to execute.

4. The method of claim 1, wherein: Determining, by the API registrar, that a characteristic of the service affects deployment of the service to a container environment includes determining that the characteristic indicates that the service is to be deployed to a container environment so that it has high availability; and Deploying the service based at least in part on the characteristic includes deploying a plurality of containerized instances of the service to a container environment. The method of claim 1 , wherein the container environment comprises a plurality of services encapsulated in a container. The method of claim 1 , wherein the API registrar is deployed as a service encapsulated in a container in a container environment.

7. A non-transitory computer readable medium comprising instructions that, when executed by one or more processors, cause the one or more processors to perform operations comprising: An API definition is received at an API registrar, the API definition comprising: an endpoint of a service that is or will be packaged in a container that is or will be deployed in a container environment; as well as One or more API functions associated with the service; receiving, at an API registrar, characteristics of a service, wherein the characteristics of the service are received with the API definition and define runtime characteristics of the service, wherein the runtime characteristics of the service include one or more of: end-to-end encryption, usage / logging requirements, user authentication, on-demand service instantiation, multiple service deployment instances for high availability, and rate / usage limiting; Determining, by the API registrar, that the characteristics of the service affect generation of a client library for calling the service in a container environment; as well as In response to determining that the characteristic affects generation of the client library, a client library is generated based at least in part on the characteristic.

8. The non-transitory computer readable medium of claim 7, wherein: Determining that a characteristic of the service affects generation of a client library in a container environment that calls the service includes determining that the characteristic indicates that the service requires end-to-end encryption; as well as Generating a client library based at least in part on the characteristics includes generating code in the client library that encrypts data before the data is sent in a service call to an endpoint of the service.

9. The non-transitory computer readable medium of claim 7, wherein: Determining that the characteristic of the service affects generation of a client library for calling the service in a container environment includes determining that the characteristic indicates that the calling service will log usage of the service; and Generating a client library based at least in part on the characteristics includes generating code in the client library that logs usage information for calls to an endpoint of the service.

10. The non-transitory computer-readable medium of claim 7, wherein the client library comprises an object class having member functions that implement API functions to make direct calls to endpoints of the service.

11. The non-transitory computer readable medium of claim 7, wherein the API registrar is operable to: Services under development in an integrated development environment (IDE); and Services deployed in a container environment.

12. A system for customizing deployment and operation of services in a container environment, comprising: one or more processors; as well as One or more processor devices comprising instructions that, when executed by the one or more processors, cause the one or more processors to perform operations comprising: An API definition is received at an API registrar, the API definition comprising: an endpoint of a service that is or is to be packaged in a container that is or is to be deployed in a container environment; and One or more API functions associated with the service; receiving, at an API registrar, characteristics of a service, wherein the characteristics of the service are received with the API definition and define runtime characteristics of the service, wherein the runtime characteristics of the service include one or more of: end-to-end encryption, usage / logging requirements, user authentication, on-demand service instantiation, multiple service deployment instances for high availability, and rate / usage limiting; Determining, by the API registrar, that characteristics of the service affect how calls to the service are handled in the container environment; and In response to determining that the characteristic affects how the call to the service is handled, the call to the service is handled based at least in part on the characteristic.

13. The system of claim 12, wherein: Determining that a characteristic of the service affects how calls to the service are handled in a container environment includes determining that the characteristic indicates that the service is to be instantiated on demand in a container environment; Handling the call to the service based at least in part on the characteristic includes generating, by the API registrar, a containerized instance of the service in response to receiving an indication that a calling service will send a request to the service.

14. The system of claim 12, wherein determining that a characteristic of the service affects how calls to the service are handled in a container environment comprises: Determining the characteristic indicates that the service will be rate limited when calls are made to the service in a container environment.

Citation Information

Patent Citations

  • A system and method for modeling and dynamically deploying services into a distributed networking architecture

    CN1942860A

  • Systems and methods for providing ranked deployment options

    US20140201218A1