Modernization Paths for Existing .NET Applications & Services
Understanding your journey to realizing the benefits of the cloud
When you decide to modernize your web applications or services and move them to the cloud, you don’t necessarily have to fully rearchitect your apps. Rearchitecting an application by using an advanced approach like microservices isn’t always an option because of cost and time restraints. Depending on the type of application, rearchitecting an app also might not be necessary. To optimize the cost-effectiveness of your organization’s cloud migration strategy, it’s important to consider the needs of your business and the requirements of your apps. You’ll need to determine:
- Which apps require a transformation or rearchitecting.
- Which apps need to be only partially modernized.
- Which apps you can “lift and shift” directly to the cloud.
Organizations typically choose to move to the cloud for the agility and speed they can get for their applications. You can set up thousands of servers (VMs) in the cloud in minutes, compared to the weeks it typically takes to set up on-premises servers.
There isn’t a single, one-size-fits-all strategy for migrating applications to the cloud. The right migration strategy for you will depend on your organization’s needs and priorities, and the kind of applications you are migrating. Not all applications warrant the investment of moving to a platform as a service (PaaS) model or developing a cloud-native application model. In many cases, you can take a phased or incremental approach to invest in moving your assets to the cloud, based on your business needs.
For modern applications with the best long-term agility and value for the organization, you might benefit from investing in cloud-native application architectures. However, for applications that are existing or legacy assets, the key is to spend minimal time and money (no rearchitecting or code changes) while moving them to the cloud, to realize significant benefits.
Each migration approach has different benefits and reasons for using it. You can choose a single approach when you migrate apps to the cloud, or choose certain components from multiple approaches. Individual applications aren’t limited to a single approach or maturity state. For instance, a common hybrid approach would have certain on-premises components plus other components in the cloud.
The definition and short explanation for each application maturity level are the following:
Level 1: Cloud Infrastructure-Ready applications: In this migration approach, you just migrate or rehost your current on-premises applications to an infrastructure as a service (IaaS) platform. Your apps have almost the same composition as before, but now you deploy them to VMs in the cloud. This simple type of migration is typically known in the industry as “Lift & Shift.”
Level 2: Cloud Optimized applications: At this level and still without rearchitecting or altering significant code, you can gain additional benefits from running your app in the cloud with modern technologies like containers and additional cloud-managed services. You improve the agility of your applications to ship faster by refining your enterprise development operations (DevOps) processes. You achieve this functionality by using technologies like Windows Containers, which is based on Docker Engine. Containers remove the friction that’s caused by application dependencies when you deploy in multiple stages. In this maturity model, you can deploy containers on IaaS or PaaS while using additional cloud-managed services related to databases, cache as a service, monitoring, and continuous integration/continuous deployment (CI/CD) pipelines.
The third level of maturity is the ultimate goal in the cloud, but optional for many apps.
Level 3: Cloud-Native applications: This migration approach typically is driven by business need and targets modernizing your mission-critical applications. At this level, you use PaaS services to move your apps to PaaS computing platforms. You implement cloud-native applications and microservices architecture to evolve applications with long-term agility, and to scale to new limits. This type of modernization usually requires architecting specifically for the cloud. New code often must be written, especially when you move to cloud-native application and microservice-based models. This approach can help you gain benefits that are difficult to achieve in your monolithic and on-premises application environment.
The table below describes the main benefits of and reasons for choosing each migration or modernization approach.
(Lift and Shift)
(Modernize, Re-Architect, Rewrite)
|Applications Compute Target|
|Applications deployed to VMs in Azure||Monolithic or N-Tier apps deployed to Azure App Service, Azure Container Instance (ACI), VMs with containers, or AKS (Azure Kubernetes Service)||Containerized microservices on Azure Kubernetes Service (AKS) and/or serverless microservices based on Azure Functions.|
|SQL or any relational database on a VM||Azure SQL Database Managed Instance or another managed database in the cloud.||Fined-grain databases per microservice, based on Azure SQL Database, Azure Cosmos DB, or another managed database in the cloud|
|No rearchitecting, no new code||No rearchitecting||Architect for the cloud, you get the best benefits from the cloud but new code is needed|
|Least effort for quick migration||Minimal code/config changes||Microservices cloud-native approaches|
|Least-common denominator supported in Azure||Improved deployment and DevOps agility to release because of containers||Modern mission-critical applications, cloud-resilient hyper-scalable|
|Basic availability guarantees||Increased density and lower deployment costs||Fully managed services|
|After moving to the cloud, it’s easier to modernize even more||Portability of apps and dependencies||Optimized for scale|
|Flexibility of host targets: PaaS approaches or IaaS||Optimized for autonomous agility by subsystem|
|Built on deployment and DevOps|
|Smaller cloud value, other than the shift in operating expense or closing datacenters||Containerizing is an additional step in the learning curve for developers and IT Operations||Requires rearchitecture for cloud-native apps and microservice architectures and usually requires significant code refactoring or rewriting when modernizing (increased time and budget)|
|Little is managed: No OS or middleware patching; might use infrastructure solutions, like Terraform, Spinnaker, or Puppet||DevOps and CI/CD pipelines are usually ‘a must’ for this approach. If not currently present in the culture of the organization, it might be an additional challenge|
To better understand where you should begin in modernizing your organization’s core applications to better realize the benefits of moving to the cloud, leave us a note below and we’ll schedule a conversation today.