A cloud computing environment is a network-based computing environment (e.g., an Internet-based computing environment), which enables access to shared pools of configurable computing infrastructure and software services. These computing infrastructure and software services can be rapidly provisioned with minimal management effort, often over the Internet, to support (i.e., execute or run) software applications. Cloud computing is another paradigm shift that follows the shift from mainframe based computing to client-server based computing and is implemented as services. Cloud computing service providers (cloud providers) generally deliver three main types of services: infrastructure as a service (IaaS); platform as a service (PaaS); and software as a service (SaaS), by creating virtual machines on demand for use by customers. IaaS provides a computing infrastructure for creating virtual machines that can be rented and used by customers. The computing infrastructure includes physical computing resources (e.g. processors, memory, storage, servers, networking components, etc.) that are virtualized and shared among customers. PaaS provides platform services, such as application platform services, that allow customers to develop, run, and manage software applications without having to build and maintain the computing infrastructure. SaaS provides software applications that run on the computing infrastructure on demand over the Internet on a subscription basis.
The PaaS, generally includes two types of middleware software services: (1) application server services; and (2) application platform services. Application server services are used to run the software applications of the SaaS. The application server services manage the interaction between applications of the SaaS and the application platform services of the PaaS, enabling software applications of the SaaS to interact with the application platform services.
In a cloud computing environment, application platform services of the PaaS layer provide facilities, which software applications of the SaaS layer may use during execution of the software applications in the application server services of the PaaS layer. As examples of application platform services, an application that accesses a database may use a database platform service; an application that writes data to a file may use a file storage service; and so forth. As a result, software applications which are deployed in the SaaS layer, run on application server services of the PaaS layer, and integrate with (e.g., connect to and consume) application platform services of the PaaS layer.
A given software application (called an “on-premises application” herein) may be developed for a non-cloud based computing environment, such as an application that was developed before the era of cloud computing. One way to migrate an on-premises application to a cloud computing environment is to modify the application code (e.g., modify the machine executable instructions of the application). For example, the application code of the on-premises application may be modified to incorporate cloud computing environment variables into the application code, such that when the modified on-premises application is migrated to the cloud computing environment, the environment cloud computing variables are exposed to enable the modified on-premises application to be deployed in the SaaS layer of the cloud computing environment, run on a particular application server service of the PaaS layer of the cloud computing environment, and integrate with (e.g., connect to and consume) a particular application platform service of the PaaS layer. Alternatively, a cloud adapter may be incorporated directly into the on-premises application to enable the on-premises application to be migrated to a cloud computing environment (e.g., by deploying the on-premises application with the integrated cloud adapter in the SaaS layer, run on an application server service of the PaaS layer, and integrate with (e.g., connect to and consume) an application platform service of the PaaS layer.
In accordance with example implementations that are disclosed herein, the PaaS layer of the cloud computing environment is modified, in lieu of modifying the application code of the on-premises application. In this manner, as further described herein, the application code on-premises application may be analyzed for purposes of identifying a particular integration pattern based on an application server service to be used by the application (after migration) and an application platform service to be used by the application (after migration) in the cloud environment. Based on the identified integration pattern, a customization procedure is identified to generate a customized server service for the PaaS layer that enables the on-premises application to run on the customized server service and integrated with the application platform service without any modification to the application code of the on-premises, thereby resulting in a “lift and shift” migration of the on-premises application to the cloud computing environment.
According to an aspect of the present disclosure, there is provided a method of migrating an on-premises application that is developed for an on-premises environment to a cloud computing environment. The method includes receiving, by a build server, application code of the on-premises application; and analyzing, by the build server, the application code of the on-premises application to identify a pattern in the on-premises application based on an application server service to be used by the on-premises software application in the cloud computing environment and an application platform service to be used by the on-premises application in the cloud computing environment. The application server service and the application platform service are part of a platform as a service (PaaS) layer of the cloud computing environment. The method includes generating, by the build server, data, based on the identified pattern, to configure the PaaS layer for migration of the on-premises application to the cloud computing environment.
According to another aspect of the present disclosure, there is provided a non-transitory machine readable storage medium to store instructions that, when executed by a machine, cause the machine to analyze application code of an application based on a cloud-based application server category and a cloud-based application platform service category to recognize a pattern of the application code. The instructions, when executed by the machine, cause the machine to, based on the recognized pattern, determine a configuration for a cloud-based application server service of a cloud-based computer system to prepare the cloud-based computer system for migration of the application to the cloud-based computer system.
According to another aspect of the present disclosure, there is provided an apparatus that includes at least one processor and a memory. The memory stores instructions that, when executed by the processor(s), cause the processor(s) to access a file that is associated with at least one of installing an application server service of a cloud computer system or configuring the application server service; and analyze application code of an application to be migrated to the cloud computer system to identify a pattern that is associated with the application based on an application platform service to be used by the application after being migrated to the cloud computer system. The instructions, when executed by the processor(s), cause the processor(s) to communicate with a repository to receive data representing a procedure to be performed based on the identified pattern; and modify the file based on the procedure to prepare the cloud computer system for migration of the application to the cloud computer system.
In any of the preceding aspects, analyzing the application code to identify the pattern includes performing analysis of application code of the application.
In any of the preceding aspects, analyzing the application code to identify the pattern includes searching for a file name in the application code or text in the application code.
In any of the preceding aspects, identifying the pattern includes identifying a plurality of candidate patterns that are associated with the application based on the application server service and the application platform service; and selecting a given pattern of the plurality of candidate patterns based on a predetermined selection criterion.
In any of the preceding aspects, generating the data includes at least one of generating data to configure a configuration file that is associated with the application server service, generating data to configure a library that is associated with the application server service, or generating data to configure a network proxy that is associated with the application server service.
In any of the preceding aspects, generating the data includes communicating with a repository to receive data identifying a procedure that is associated with the identified pattern, and generating the data to configure the PaaS layer for the migration of the application based on the procedure.
In of the preceding aspects, generating the data includes generating data to modify at least one of a configuration file or an installation file that is associated with an application server service of the PaaS layer.
In any of the preceding aspects, the application platform service includes a caching service, a database platform service, or a file service.
In any of the preceding aspects, the application is migrated to a cloud computer system without modifying application code that is associated with the application.
In this era of cloud computing, a lot of companies are trying to migrate their software applications from an on-premises environment to a cloud computing environment. In this context, a “cloud computing environment” refers to a remotely accessed computer system of hardware and software, which provides rented cloud-related services to a company, such as software as a service (SaaS), platform as a service (PaaS) and infrastructure as a service (IaaS); and an “on-premises computing environment” refers to a computer system of hardware and software, which may be owned and maintained by a company. A primary motivation to migrate software applications developed for deployment on on-premises computing environment (e.g., on-premises applications) to the cloud computing environment is the reduction of the total costs associated with owning and maintaining computing infrastructure and software applications, while enjoying high-availability, scalability and reliability benefits that are provided by cloud providers providing cloud computing environments.
Migrating an on-premises application to the cloud computing environment may involve cloud application and cloud service integration (referred to hereinafter as cloud integration). Cloud integration enables on-premises applications developed for deployment in an on-premises environment to be deployed in the SaaS layer of the cloud computing environment, to run on an application server service of the PaaS layer of the cloud computing environment, and to integrate with (e.g. connect to and consume) an application platform service of the PaaS layer of the cloud computing environment. An on-premises application that is developed and deployed in an on-premises computing environment has no knowledge about the cloud computing environment and the application platform services of the cloud computing environment. The cloud integration of the on-premises application with the cloud computing environment, in general, involves changes that ensure that the on-premises application, can be deployed in the SaaS layer of the cloud environment, run on an application server service of the PaaS layer of the cloud environment, and connects to and consumes the application platform service of the PaaS layer in the same way that the on-premises application runs on an application server and connects with application platforms of the on-premises computing environment.
One way to migrate an on-premises application into a cloud computing environment is to modify the application code (e.g., modify the machine executable instructions of the on-premises application). For example, the application code may be modified to incorporate environment variables. Environment variables refer to a set of named values defined in the cloud computing environment, and the environment variables are exposed and used by the modified on-premises application after migration of the modified on-premises application to the cloud computing environment. This is a way of communicating the environment settings, service configurations and connection information to the on-premises application after migration to of the cloud environment. For application server service integration, the on-premises application, after being migrated to the cloud computing environment (e.g. deployed in the SaaS layer), uses the corresponding service environment variables to connect and consume an application platform service.
Another way to migrate an on-premises application to a cloud computing environment is through the use of a cloud adapter. A cloud adapter is special purpose software, which connects on-premises applications to different application platform services of the PaaS layer of the cloud computing environment. Developers may adopt the cloud adapter directly in the on-premises application, or the cloud adapter may be included with the on-premises application.
Modifying an on-premises application, such as through the above-described environment variables or cloud adapter, may involve significant costs and time. In this manner, such modifications may involve substantial redesign or rewriting of the application code of the on-premises application, which may be costly or, in general, may not be feasible. In accordance with example implementations that are described herein, a customized application server service is generated for a cloud computing that enables integration of the on-premises application into a cloud computing environment, without any modifications to the application code of the on-premises application.
More specifically, in accordance with example implementations, the on-premises application may be associated with a particular application server service category, or type. For example, the on-premises application may be a Java application that uses a Tomcat server in the on-premises computing environment; and when migrated to the cloud computing environment, the on-premises application correspondingly uses a Tomcat application server service. The on-premises application may also, after being migrated to the cloud computing environment, use one or multiple application platform services, such as a caching service, a database platform service, a file service, and so forth.
As described herein, methods to migrate an on-premises application to the cloud computing environment (so that the application is integrated with the cloud computing environment) include deploying the on-premises application in the SaaS layer of the cloud computing environment (e.g., copying the application code to an SaaS layer of the cloud computing environment without any changes to the application code of the on-premises application); selecting the appropriate application server service; selecting the appropriate application platform service(s); and generating a customized application server service so that the on-premises application, when deployed in the SaaS layer, runs on the customized application server service, and integrates with the application platform service(s).
More specifically, in accordance with example implementations, a build server may use the following method to migrate an on-premises application into a cloud computing environment. The build server receives information including user selected data representing aspects of the integration, such as the application code; a user-selected application server service category, or type; and one or multiple user selected application platform service categories, or types, to be used by the application. Based on the received information, the build server retrieves application server service artifacts from a server service artifacts repository. In this context, the “server artifacts” refer to information pertaining to the configuration of the application server service, such as, for example, installation and/or configuration files for the application server service. In accordance with some implementations, the server artifacts repository stores server artifacts for all application server services (a Tomcat server service, an Apache server service, a Node.js server service, as examples).
In accordance with example implementations, the build server discovers an integration pattern associated with the on-premises application (through the use of integration pattern-based matching, as described herein) for purposes of identifying a suitable procedure for modifying the application server service. In accordance with example implementations, the build server may discover an integration pattern associated with the on-premises application by analyzing the application code to identify or discover integration patterns associated with the on-premises application, which match patterns that are stored in an integration patterns repository. As further described herein, a given integration pattern may be associated with one or more of the following: machine executable instructions of the application; settings of the on-premises application, texts of the on-premises application, procedures or file names associated with the on-premises application; settings contained in the server service artifacts; machine executable instructions appearing in the server artifacts; file names or procedures identified in the server artifacts; and so forth.
More specifically, in accordance with example implementations, the build server may perform the integration pattern discovery by analyzing the application code of the on-premises application and application server artifacts for purposes of determining whether the application code of the on-premises application and/or the application server artifacts exhibit integration patterns that correspond to one or multiple integration patterns that are stored in the integration patterns repository. For the case in which the build server discovers multiple such integration patterns, then, as further described herein, the build server may select one of these integration patterns based on an integration pattern preference, which may be defined by the cloud service provider.
A selected integration pattern, in turn, corresponds to a particular customization procedure, which the build server retrieves from a customization procedures repository. In accordance with example implementations, the customization procedure defines how the build server is to modify the application server service to integrate the on-premises application into the cloud computing environment. In general, the customization procedures repository may store the customization procedures available for all integration patterns. The build server may then, based on the retrieved customization procedure, modify the application server artifacts to generate a customized application server service to enable the on-premises application to migrate to the cloud computing environment. As described further herein, the customization procedures for generating the customized application server service may involve, as examples, modifying a configuration file associated with the application server services, modifying a library associated with the application server services, or modifying a network proxy associated with the application server services.
Referring to
The PaaS layer 104 provides the capabilities for hosting and running the applications 112 of the SaaS layer 102 and includes the following middleware layers: application server services 140 and application platform services 122. For the example implementation that is depicted in
The applications 112 may be potentially associated with many different application server types, or categories. For example, a particular application 112 may be a Java application that is associated with the Tomcat server service 141; another application 112 may be a PHP application that is associated with the Apache server service 141; another application 112 may be a JavaScript application that is associated with the Node.js server service 141; and so forth. For the example implementation that is depicted in
The IaaS layer 102 may include, as an example, a hypervisor, or virtualization layer 110, which may provide virtual machines 138, virtual storage 120, and so forth. The virtualization layer 110 generates virtual machines using actual, physical hardware resources 108 of the IaaS layer 102, such as actual, physical processor-based computing machines 134, physical storage devices 136, and so forth.
In accordance with example implementations, migration of the on-premises Java application 112 into the cloud computer environment 100 involves a “lift-and-shift” 220 of the on-premises application 112 (e.g., copying of the application code, configuration files, libraries, and so forth) of the on-premises application 112 into the SaaS layer 106 of the cloud computer environment 100 without any modifying of the application code of the on-premises software application. As depicted in
As described herein, one or multiple processors 304 may execute the instructions 312 for purposes of performing one or more of the methods that are described herein, such as, for example, analyzing the application code to identify integration patterns in application code of the software application; modifying an application server service for purposes of migrating an on-premises software application to a cloud computing environment; and so forth. Moreover, as depicted in
Although
In accordance with example implementations, regardless of its particular form, the build server 300 receives the on-premises application to be migrated to the cloud computer environment 100, a user input describing the application server service to be used to host and run the on-premises application, and a user input describing the application platform service(s) to be used by the on-premises application after migration. As further described herein, one or multiple of the user inputs may be provided through user interaction with the GUI 314. The build server 300 generates data, which is used to generate a customized application server service 141. As an example, the build server 300 receives the application code 301, including the source code for the on-premises application, configuration files for the software application, and libraries for the on-premises application for the on-premises application. As depicted in
In accordance with example implementations, after receiving the above-described input, the build server 300 uses an automated process (i.e., a computer-directed process that the build server 300 performs automatically without further user input) to generate data (data customizing a configuration file of the application server service 141, data customizing a library of the application server service 141, data setting up a network proxy for the application server service 141, and so forth) for purposes of customizing the application server service 141 so that the application code 301 may be copied to the SaaS layer 106 without modification to integrate the on-premises application into the cloud computing system 100.
As depicted at block 420, based on the selected type of application server service, the build server 300 retrieves application server service artifacts 422 from a server artifacts repository 421 corresponding to the type of selected application server service. In accordance with example implementations, the application server service artifacts, in this context, refer to configurations files, installation files that are associated with the selected type of application server service and which are used to generate a customized application server service. As a more specific example, in accordance with some implementations, the application server service artifacts may be installation files (i.e., files to install the application server service) and/or configuration files (i.e., files to configure the application server service). In accordance with example implementations, the server artifacts repository 421 stores artifacts for all supported application server service types.
As depicted at block 430, based on the selected application server service type and the selected application platform service type, the build server 300 discovers one or multiple integration patterns through code analysis of the application code of the software application 112 and/or the server service artifacts. In this context, an “integration pattern” refers to a particular sequence of code, filenames, calls, configurations, and so forth, associated with the application code and/or server artifacts. The integration pattern has an associated customization procedure for the application server service. Therefore, by discovering a particular integration pattern, as further described herein, the build server 300 discovers a specific way to modify, or customize, the application server service. As described in more detail in connection with
In accordance with example implementations, the build server 300 may analyze the application code to identify one or multiple integration patterns in block 430. If multiple integration patterns are identified in the application code, then, in accordance with example implementations, the build server 300 may select the most suitable pattern based on a pattern preference 433, which may be stored in the integration patterns repository 431. In accordance with example implementations, the pattern preference 433 represents one or multiple criteria to be used by the build server 300 to select the best integration pattern (according to the criteria) from multiple discovered integration patterns. As a more specific example, in accordance with some implementations, the integration patterns may be assigned priorities for different performance metric criteria categories; the integration pattern preference 433 may, for example, identify which performance metric category controls selection of the integration pattern; and the build server 300 may select the highest priority integration pattern (from the discovered integration patterns) from the performance metric category that is identified by the pattern preference 433.
In accordance with example implementations, the cloud computing service provider defines the preferences of integration patterns according to integration needs. For example, if application connection time to a particular application platform service is important, then the integration pattern preference 433 may identify that connection time controls selection of the integration pattern. Accordingly, for this example, a first integration pattern that is associated with modifying a configuration file associated with the application server service may be may be preferred over a second integration pattern that is associated with creating a network proxy, as the network proxy may add network latency to the service integration. The first integration pattern may correspondingly have a higher priority for connection time than the priority of the second integration pattern. It is noted that the cloud provider may change the integration pattern preferences 433 over time.
Upon selecting the integration pattern, the build server 300 retrieves (block 450) a set of one or multiple customization procedures 452 to be performed to modify the application server service to generate a customized application server service. In general, customization procedures may be stored in a customization procedure repository 451. A customization procedure is a set of instructions (machine executable instructions, for example), which may be executed by the build server 300 to customize the application server service artifacts for purposes of generating a customized application server service. In general, the customization procedure repository 451 stores these customization procedures for all integration patterns. As also depicted in block 460 of
Therefore, by searching (block 610) for integration patterns, the build server determines (decision block 622) whether an integration pattern has been found. If no existing integration patterns are identified for the software application 112, then, as depicted at block 626, a human analyst may manually analyze the application code and/or server artifacts to identify any previously-undiscovered or undocumented integration pattern. This new pattern may then be saved (block 630) in the integration patterns repository 431 so that next time, a similar application may use the saved integration pattern. Otherwise, if one or multiple integration patterns are found (decision block 622), then the build server 300 outputs (block 634) the discovered integration pattern(s).
As depicted in
As examples, the application platform service type identifiers 516 may identify a database platform service and a file service as available application platform service types. Each application platform service identifier 516 may be associated with one or multiple specific application platform service name identifier 518. As examples, MySQL Database platform service and File Storage Service may be specific services for the database platform service and file service application platform service types, respectively.
User selection of a specific application server service name identifier 514 provides an index 519 that the build server 300 may use to access the artifacts 422 for the selected application server service. In this manner, as depicted in
Each integration pattern name may provide an index 560 that directly or indirectly points to information 570 that is stored in the customization procedures repository 451. By using the index 560, the build server 300 may, for example, retrieve data 574 representing the customization procedures 452 (such as details 570 (machine executable instructions or a flow, for example) for customizing the application server services) and artifacts (e.g., files, libraries and so forth) pertaining to the configurations of the application server services.
In the example that is depicted in
For the example that is depicted in
In the example that is depicted in
While the present disclosure has been described with respect to a limited number of implementations, those skilled in the art, having the benefit of this disclosure, will appreciate numerous modifications and variations therefrom. It is intended that the appended claims cover all such modifications and variations.