Note: This is the last entry in a four-part series on modernizing mainframe applications into cloud applications.
It's certainly possible to port/migrate a mainframe legacy application into the cloud with little to no modifications to the application using the “lift-and-shift” strategy described in the previous post. However, the application will not have many, if any, of the features and benefits offered by the cloud: elastic scalability, use of pooled resources, on-demand ubiquitous access, high availability, and pay/show-as-you-go pricing will be difficult to implement. In addition, and perhaps most importantly, you will continue to have a monolithic, highly coupled system to maintain. So, assuming you decide to modernize your legacy mainframe application via an incremental replacement, tiered replacement, or complete application rewrite, consider applying the following application architecture and design characteristics indicative of a cloud application:
Create Applications as a Set of Highly Decoupled Services: Strive to create business functionality as a set of autonomous software components, which are interoperable with other software components through messaging, not through embedding or calling other functions using language-specific libraries or APIs. I believe REST based interfaces implemented over HTTPS with JSON payloads are now the de facto standard, but nothing is preventing you from using other exchange protocols and payloads including WS-* and XML.
Design Stateless Applications: Many of today’s legacy applications, including mainframe, client-server, and web, were developed with a stateful architecture: the application, specifically shared server-side resources, must “remember” or keep track of client processes and invocations between requests. Keeping state makes it challenging to both scale applications and make them fault-tolerant; you reduce the ability of the cloud to provide elastic scalability and reliability through redundancies. A stateless application, one in which only the client maintains state, allows for your application to scale to cloud proportions if and when needed. Designing a stateless application contributes to greater decoupling of services from vertical perspective; your user interface and client processes are less attached to the server processes running in the cloud.
Focus on Security: The mainframe is known for providing a high-level of security. Cloud applications can be just as secure if designed properly. Taking a private cloud first approach will help mitigate many security risks because your IT organization will have complete control of the network, software, hardware, and physical facilities for which the cloud operates within. A move to a public or hybrid cloud can be performed at a later date if security, business, and cost concerns merit the move. Applications running in the cloud may be moved around to various physical locations. Therefore, data should be encrypted both in motion and while at rest - most organization already encrypt sensitive data in transit but many do not encrypt data when stored in databases, files, or even memory. Encrypting data at rest will provide another level of security, regardless of where your data resides in the cloud. Lastly, look to implement a security framework that matches your existing framework. Several products and frameworks are available for securing cloud applications. A combination products and frameworks may be required to match the security posture of your legacy mainframe application.
Assume Failure by Designing a Resilient Application Architecture: Mainframe applications assume, for the most part, that reliability will be achieved through hardware. This is a safe assumption given the built in redundancies and power offered by traditional mainframes. Cloud environments typically rely on virtual servers running on low-cost, commodity-based x86 processors. Therefore, you must build in redundancies and fault tolerance through application frameworks, middleware, and the application itself. I think some of the best ideas on designing resilient cloud applications are coming from the Netflix Tech Blog.
Adopt Agile Application Development Methodologies: Not technically a chararcteristic of cloud applications but just as important - Modernizing applications to the cloud will brings tremendous speed and agility to your IT organization's application development shop. Application environments (unit test, integration test, QA, PROD, etc.) will be provisioned within minutes, instead of the typical days, weeks, or months required within traditional mainframe environments. Templates, blueprints, and deployment plans, along with automation, will allow you to quickly select and deploy Federal and agency compliant application infrastructures and software. IT infrastructure resources no longer become the bottleneck. The bottleneck is now your development methodology. Continuing to use methodologies which delivery working code in 6 months or 1 year is no longer acceptable - your delivery cycles should be pared down to 2 to 4 weeks at the most. The Holy Grail is to achieve Continuous Integration, and maybe even Continuous Delivery.
Conclusion
The cloud application architecture and design principles I propose are not new to application development, but they need to be applied with even greater amplitude when developing applications in the Cloud. In most ways, modernizing a legacy mainframe application is similar to modernizing any other type of application; there are many challenges and risks to success. But modernizing your mainframe applications to the cloud presents opportunities to lower overall costs (TCO) and improve services supporting your agency's mission. The specific reasons for modernizing mainframe applications to cloud applications will help drive your business case, and the strategy and approach, used to modernize mainframe applications to the cloud.