Are your Enterprise Applications Ready for Cloud Deployment? "Let us identify and gear up"
Author: Jitendra Jain, Senior Technology Architect (HILife - Architecture & Design Group)
Cloud computing can be defined as "usage of high end remote servers and other virtually hosted network services over the internet to efficiently manage, process and store the data in highly scalable fashion". Cloud computing make it possible for enterprises to use highly computable network remote infrastructure and fully scalable environment for mission critical complex business applications. Resources like virtual machines (VMs), storage units, shared utilities, intelligent applications, network and infrastructure are some of the computing resources provided by cloud computing environment.
Cloud adoption trends
Cloud computing is emerging as a major industry trend in IT modernization and digital transformation strategies among enterprises. As per a recent survey global cloud (SaaS software) revenues are forecasted to reach $106B in 2016, increasing 21% over projected 2015 spending levels. Software-as-a-service (SaaS) and infrastructure-as-a-service (IaaS) activities are the top most cloud computing trends of 2016. It shows remarkable growth in cloud adoption across large to small enterprises.
Variety of Cloud Offerings
Are you Cloud-ready? " Ask this question to all stake holders"
If you can deploy or migrate your existing enterprises applications directly without making major changes on cloud (public/private cloud platform) such applications are known as "cloud ready" applications however it is not practically feasible in most of the cases due to architectural design limitations. If we talk about legacy enterprise business applications typically they are built on top of standard two or three tier architectural design principals with minimal focus on network topologies, optimal file system, generic session management techniques, common protocol oriented design, OS independent approach, DevOps oriented automation and infrastructure independence which is eventually key architectural considerations for building any cloud ready application infrastructure. Hence most of the applications fails in their cloud migration and deployment phase and falls under non-cloud ready category. On the other side businesses are still trying to move their existing applications on cloud or rapidly adapting cloud-ready apps. The biggest concern is how can we ensure and verify cloud readiness for existing or new enterprise applications? Let us follow below general guidelines.
General guidelines for cloud readiness- "Let us make app cloud ready"
All below guidelines and suggestions will help making our new or existing enterprise app cloud ready.
Guideline#1: Avoid using any specific topology for application code and deployment
Suggestion: Try to build your application generic and stateless as much as possible, network attributes like IP address, Host details, number of app nodes etc. can change anytime hence don't rely.
Guideline#2: Do not rely on local file system, storage or cache data, it may disappear
Suggestion: It is highly recommended to build and store such valuable data remotely using any SQL or NoSQL kind of database. It will prevent duplicate and inconsistent data.
Guideline#3: Never use manual installation, configuration and deployment options for your application
Suggestion: Always use OS specific build scripts or automation platforms like Jython scripts for IBM WAS or use automation platforms like Puppet, Chef etc.
Guideline#4: Avoid using any low level platform specific APIs features (e.g. Java thread Pool, JMX) in application
Suggestion: Use generic loosely coupled infrastructure for such API's, PaaS environment should be preferred in this use case. Let us move low level platform specific APIs on PaaS (Platform as Service) and consume it as an independent service.
Guideline#5: Never store session state in your application's local file system or local memory.
Suggestion: Avoid using HTTPSession, HTML5 storage, cookies or any other kind of local session memory storage instead it is highly recommended to use any distributed caching store mechanism like Memcached, Redis or use any external distributed SQL or a NoSQL database.
Guideline#6: Let us not build your app using non-standard deprecated type of protocols (e.g. IIOP)
Suggestion: They always requires specific kind of configuration and tuning instead of generic configuration which creates problem when you move to cloud. Guideline is to migrate from legacy protocol (e.g. IIOP) to a newer generic HTTP based configuration with the maximum use of REST or even SOAP WS based service specifications so that your application could be cloud ready with minimal migration effort. With advanced HTTP based protocols we can also leverage multiple API Management platforms like Google Apigee, CA Layer7
Guideline#7: Never bank on Operating System specific core features (e.g. OS specific task schedulers, Batch jobs, event driven services, timer services etc.)
Suggestion: Avoid using any such platform (Java, UNIX, Windows, Solaris) dependent core services while application development rather better to use some open source platform independent generic API's (e.g. quartz job scheduler). Such platform independent OS-neutral generic considerations will save big time on code refactoring before we move our enterprise applications to cloud based infrastructure
Guideline#8: Avoid using local file system configuration for application logging purposes (Server side logging)
Suggestion: Local file system logging can be dangerous in case your whole system gets down because in such situation you have to take out the whole container/VM on which app is running which eventually causes availability and reliability issues for end users along with the loss of valuable debugging triage information. Suggestion is to use open source or commercial PaaS platform log recorder or log aggregators. They can redirect critical logging real-time information out of the box which will be best suited option for any dynamic cloud platform. Some recommended platforms are as given below:
- Apache Flume
- PureApplication Platform
Guideline#9: Specific infrastructure dependency can create big problems, avoid it.
Suggestion: It is highly discouraged to inject any specific dependencies in application code base and configuration like hard coding of Host-names, IP addresses, Port Numbers, Hosted or Consumed Services URL's, URIs, Endpoints, CORS (Cross Domain Resource sharing) configuration, Third Party API's calling details or any other contextual details. This information will be modified when you move your application on cloud infrastructure hence dynamic contextual information will always help breaking the application post migration.
Suggestion is to abstract any such environment specific information into a common property files however it is also a workaround not a full proof solution hence better to procure an external service registry for all such information. It could be an enterprise service bus (ESB's) or a vendor provided load balancer. It even helps in clustering environment.
Cloud Deployment Strategy (New Apps v/s Existing Apps)
Case A: Developing a new business application from scratch for Cloud Platform?
If you are developing a business application from scratch for Cloud Platform then do follow above suggestions which gives you a cloud centric approach so that you can design and build your new app as per above cloud infrastructure requirements. In this case migration or deployment the app on cloud will be real quick with minimal effort provided you would have proactively chosen above design and architectural considerations.
Case B: Migrating an existing business application on Cloud Platform?
If you are migrating an existing business application on cloud platform then you have to do following steps to make your app cloud ready
Top Cloud Platform Providers
Other Cloud Platform Providers
Lot of other cloud provider vendors are also available. They provide various kind of cloud service offerings. We may chose any one based on their offerings, licensing cost, vendor credentials, business requirements. Couple of them are really coming up very fast with good service offerings model like Saleforce, Rack-space and Oracle cloud however they are still in improvisation phase as compare to AWS, Microsoft, Google and IBM cloud offerings
As per above details, market trends and current reports it is a clear cut indication for all the IT organizations that they do not have any other fish to fry other than start planning for cloud movement. It can not be ignored anymore. Sooner or later most of the small to large scale enterprises have to migrate on cloud infrastructure. However step by step careful planning, tech assessment, regress analysis, business need, CIO's vision, time to market , financial situation and strong vision is the key factors. Cloud movement decision may varies based on enterprise to enterprise.