In IT, each generational transition has called for modernizing and redesigning applications, business processes...
and IT infrastructure to exploit new capabilities and efficiencies. This occurred when PCs and LANs usurped the mainframe and drove client-server computing, eliminating expensive hardware and the issue of data scarcity. Innovation happened again when the internet and WANs disrupted client-server computing, and then subsequently tech modernized again when cloud computing gained popularity.
Consequently, the need for application modernization is a regular, if not entirely predictable occurrence in IT. App modernization isn't carried out as a fashion statement, status symbol or to keep up with nimble tech startups, but for cold, hard business reasons. Regardless of the era, the benefits of a periodic app overhaul include better performance, more features, greater usability and higher reliability. But while the need to modernize is obvious, it's unique to each business. And choosing the modernization approach to go with can be difficult because there are several options.
All the business reasons for application modernization are addressed in the current cycle of modernization. However, moving to the cloud, whether public or private, also provides much greater application scalability, deployment flexibility, responsiveness for today's mobile users and efficient use of IT resources.
The third platform: foundation of modern apps
The third platform is one model for understanding modern application design. It derives its name as the successor to prior mainframe and client-server frameworks, and its impetus is the nexus of four primary technologies: mobile devices, social networks, cloud services and big data analytics. Together, these change nearly everything about applications: their features, UIs, internal instrumentation, how they are designed, developed and deployed, even the application lifecycle and update frequency.
The explosion of mobile devices and web users, along with the speed of information flow and memes that social networks can produce means public-facing apps must handle highly unpredictable workloads, demand spikes of unprecedented scale and users from all geographies accessing the web via public networks. Mobile and social technology have also changed the way that users interact with apps along with their expectations about usability, convenience and performance. All these factors affect app design and the related need for modernization.
The explosion of data collection, fueled by cheap storage and networking, enables aggregating so-called data lakes of immense capacity that require new database and software systems designed for the task. Smart devices (or the internet of things) and apps themselves contribute to the data deluge by logging data from remote sensors, app usage, performance telemetry and crash reports. All are useful to organizations seeking competitive advantage through analysis of previously unavailable data.
Big data analytics, machine learning and cognitive systems that can all make sense of massive, complex data sets that are seemingly meaningless have become powerful tools for improving business decisions. However, the scale and specialization of big data and machine learning infrastructure and software mean that it is best consumed as a service, not built into a monolithic app. While not limited to big data, the decomposition of apps into a mashup of independent microservices that can be reused, reconnected, widely distributed and simultaneously executed is another core tenet of modern, third-platform apps.
Although mobile and social interfaces have revolutionized app front ends, I focus on the infrastructure side where cloud services, massive data collection and aggregation and big data analysis are pillars of the modernized app.
Cloud benefits to enterprise modernization
The NIST definition lists five essential characteristics of cloud computing: on-demand self-service, broad network access, resource pooling, rapid elasticity or expansion, and measured service. It also lists three "service models" (software, platform and infrastructure), and four "deployment models" (private, community, public and hybrid) that together categorize ways to deliver cloud services.
There are various deployment options that can include shared, public services such as AWS, private infrastructure based on something like VMware vCloud or a hybrid design using a mix of public and private infrastructure such as Microsoft Azure (public) with Azure Stack (private).
Although public clouds often get a toehold in the enterprise as a quick and dirty way to deploy software development and test systems, when incorporated as the foundation of modern applications, cloud computing provides many benefits, including:
- Rapid, virtually unlimited scalability
- Higher utilization and resource efficiency via shared services
- Growing portfolio of built-in, higher-level services for application integration, data management and analysis, infrastructure automation and security
- Enhanced staff efficiency via APIs and scriptable CLIs for service automation and through a consolidated management portal for service administration, monitoring and reporting
- Fine-grained data about infrastructure use that can feed consumption-based billing by user or product
- Lower IT overhead by offloading hardware and low-level operations management
Together, these benefits percolate to the bottom line through lower costs for IT staff and infrastructure to run a given workload. Cloud services also provide greater flexibility and agility in application provisioning, whether for development, testing or production deployment. By using a consistent set of services and APIs, the cloud inserts a portable abstraction layer between applications and infrastructure that allows apps to be easily moved to new locations, cloned for testing or non-disruptively updated. Such ease of app modification, testing and deployment also enable new processes such as Agile development, DevOps and continuous integration and delivery.
Core application modernization strategy: Going cloud
Microsoft's Azure execs are fond of characterizing the cloud as a model, not a place. This is an important distinction to remember throughout this series. The cloud is a way of presenting, deploying and consuming information and application services, not just some computing capability one rents over the internet. The initial cloud experience at most organizations will be on a public service such as AWS, Azure or Google Cloud Platform, but there are other options for bringing the cloud infrastructure service model in-house. So the core architecture won't change when moving between platforms, although modernized apps may need some redesign to use different APIs and services for various platforms.
Applications can treat clouds like a traditional hypervisor with the core application running on a virtual machine (VM) such as AWS EC2. An increasingly popular technique involves deconstructing the app into a set of microservices that run in separate software containers. Containers, also known as OS-level virtualization, allow multiple applications to run in isolated environments on the same OS, which increases resource efficiency, reduces load time and simplifies deployment and management of distributed applications that are spread across multiple systems and locations. Because containers can be rapidly instantiated and scaled, they are a perfect fit for a modularized application design composed of microservices. Managing clusters of containers distributed across multiple systems is the job of a container orchestrator such as Kubernetes or Docker Swarm.
Moving to the cloud
Moving apps to the cloud can happen in a couple of ways. One way is to migrate existing virtualized apps to use cloud services. The other is building cloud-native, service-oriented apps that essentially replace the features and services available through a server OS with cloud services accessed via APIs. The latter is done using several techniques that I explore in depth throughout this series, but I'll share the highlights below.
Rearchitecting to be cloud-friendly
Enterprises typically run most applications on a VM using virtualization management systems like VMware vCenter or Microsoft System Center to handle configuration, provisioning and monitoring of VMs and associated storage. Most virtualized apps can move to the cloud by running their VM image on cloud computing instances, then migrating their associated storage to object, file or block storage services. From this base level of cloud operation, apps can be transformed into something more cloud-native by opportunistically using higher-level infrastructure as a service databases, load balancers, in-memory caches, search and load balancers to replace software running within the VM.
Redesigning cloud-native apps
Some organizations already have apps born in the cloud, but those apps might have been built around specific cloud services that make them difficult to migrate to other environments. For these, app modernization isn't a reconstruction project but more like minor remodeling that eliminates the use of proprietary features, inserts service abstraction layers and develops functional APIs that can plug into multiple cloud implementations.
Full stack redesign using cloud platform services
Virtualization abstracts application interactions with the OS from the underlying hardware. For example, a MySQL database running on CoreOS can be deployed as a machine image on an x86 system running VMware vSphere, a Power8 server running Kernel-based VM or an AWS EC2 instance running Xen. Platform as a service (PaaS) extends the concept by abstracting application services such as databases, identity management systems, a message queue, load balancing and auto-scaling as consumable services. PaaS instances typically run in a container and include a development runtime environment like Java, Python or Go. Like all cloud services, PaaS technology automatically updates code and features without user intervention or management.
Using PaaS can significantly reduce the complexity of building cloud-native apps, thus speeding up the development cycle. PaaS is particularly useful when building cloud back ends for mobile or web apps by allowing developers to focus on the user experience, features and interface instead of the server-side plumbing. Many software as a service applications like Salesforce expose features through a PaaS to enable customization or to extend their packaged software. Using PaaS this way can help non-developers such as business analysts or end users create cloud-native custom apps that automate business processes or fill specific niches.
Technology improves, languages emerge, new provisioning and deployment methods arise and users adopt new clients with vastly different workload characteristics. Application modernization is the rubric for reacting to the changing environment and exploiting new technologies to provide innovative new features and significantly better performance at a lower capacity-normalized cost. The present generation of application modernization offers many approaches to meet those goals, but as we've seen, a common denominator exploits the availability of infrastructure and platform functions encapsulated as cloud services. One's preferred modernization strategy is a function of the existing conditions for both IT infrastructure and legacy applications, an organization's tolerance for risk and enthusiasm for fundamentally new application designs.
When modernizing, consider a middleware approach
Or try using a BPM strategy to modernize legacy apps
Join the conversation: Do you use PaaS technology?