This post covers a non-profit's on-premise application migration to Azure Cloud and the Cloud services implementation models that can be used to deploy applications to Azure.
A large, not-for-profit organization in the United States used a Result Management System (RMS) web-based application to store data about its members and donors. The web-based application was deployed on-premise, which presented a number of challenges.
In the following sections, we will discuss the use case, benefits, and process of migrating to Azure using the RMS application as an example for Azure through Cloud services implementation models.
Client Snapshot
Current RMS application architecture and deployment setup:
Challenges associated with on-premise hosting
Compelling reasons to migrate to Cloud
Azure is Microsoft’s application platform for the public Cloud. It allows applications to be deployed to it in various models. It is used to:
Key benefits of hosting in Azure
There are several key points that need to be considered when migrating an application to Azure:
1. Application compatibility — Analyze if the application is architecturally fit for Windows Azure before moving.
2. External/internal dependencies — Check if there are any external application dependencies if they need to be analyzed, and if they are accessible through Azure.
3. Application class — Verify how the application is classified in the business. Business-critical and LoB applications demand high availability.
4. Application integration — Check whether the candidate application is integrated with other on-premise applications and shared services.
1. Analyze whether the User Interface can be migrated to Azure directly in the PaaS model
Web applications and web services in non-cloud solutions can be mapped to Windows Azure web roles, while the non-web applications are kept on-premise. Re-engineering work is required to modify the existing web application code to use the Windows Azure SDK. This is to ensure that it runs on Windows Azure as hosted Cloud service. In addition, the library may require modification or will have to be rewritten if using any third-party framework or class library that is not supported by Azure. In the case of the IaaS model, no code changes are required. Instead, the entire server image will be migrated to the Windows Azure virtual machine.
2. Transactions / Session Handling
In Azure, each web role instance runs on its own VM server and is configured behind a load balancer. The ASP.Net session state is not automatically shared across instances in this load-balanced environment. Various approaches to address this are as follows:
1. Session state management using Inproc — Inproc session state may be the best-performing option and is the default state management unless overridden. In load-balanced environments such as Windows Azure, this will only function for single-instance setups. If more than one instance is used, it might result in inconsistency.
2. Table storage session provider — It is a subset of the Windows Azure ASP.NET providers specifically designed and written for use in Windows Azure. The table storage session provider is a custom provider that is compiled into a class library (.dll file), enabling developers to store session state inside Windows Azure table storage. This approach is relatively low-cost, well-tested, and ready for consumption, with almost no re-engineering work required.
3. Windows Azure SQL database session provider — Windows Azure SQL database is essentially a subset of SQL server. It can also be used as storage for the session state. With just a few modifications, it can be derived from the SQL server session provider. When used with the existing database, it is cost-effective.
4. Windows Azure cache:
Windows Azure caching remains the recommended option, despite the debates. Developers and architects could always consider a different option if it suits a given scenario.
1. Authentication and authorization model — Analyze and understand the current authentication mechanism in the application.
2. Interaction with other modules/applications Web services
3. Diagnostics Support — Windows Azure diagnostics provides non-intrusive capture of diagnostic data and its subsequent data to the Windows Azure storage service. In WA diagnostics, one can:
4. Message Queues — MSMQ is not currently supported in Azure. Azure storage queue and service bus queue features can be used to implement queues in Azure. Azure service bus topics/subscriptions can be used for the message publish and subscribe model.
5. Configuration Changes
There are three ways to maintain application data while migrating an application to Azure:
1. Analyze the DAL layer and see if any framework/class library is being used.
2. Determine whether all data required by the application is in a single database or if it is dependent upon:
3. Determine the modifications required to be done in the database schema for migration to Windows Azure SQL Database.
The application migration strategy should also include a data migration strategy as most of the applications are typically data-centric. Therefore, while migrating applications from on-premise to Cloud, we need to ensure that the users do not see any discrepancy in their data. The application can store data on a disk, in a database, in network stores, and more. Cloud provides the flexibility to persist data in the same way they are stored in the on-premise application. Azure-hosted applications data can be saved in the following ways:
In the migration of the candidate application (RMS), components are migrated to Cloud in an incremental and independent fashion. At each phase, it was ensured that the application worked with no internal (application) / external (network) issues. The section below explains the migration process for the IaaS options.
Simplified administration — Easier DB management drives operational efficiencies as upgrades and maintenance are handled by cloud providers. Leading-edge tools are more accessible, version control is minimized, and add-on services, like backup and recovery, improve productivity.
Lower cost — Cloud services shift expenses from upfront hardware and software costs to economical pay-per-use operating fees, often with no long-term commitments. Reduced DBA expenses and free open-source tools offset cloud service expenses.
Higher scalability and availability — Cloud DB as a service (DBaaS) offers highly scalable compute and storage resources with minimal capacity constraints. High availability is enabled by automated backups, periodic snapshots, and synchronous replication across availability zones.
Advanced security — Cloud DBaaS are built with strong threat prevention, robust access control, isolated VM instances, IPSec VPN connections, and encryption at rest and in transit. Many offer industry compliance, such as PCI governance, that evolve with changing regulations.
Improved business agility — Cloud-based RDBs, like those in Azure, enable faster innovation, improved staff, and partner access, and expedite time-to-market, often provisioned in minutes versus weeks for on-premise solutions. They also provide increased access to advanced tools and best practices to speed development cycles.
Improved business agility is the primary benefit that enables organizations to make more informed, real-time business decisions. Additionally, application enhancements like a centralized navigation page, and adaptation of toolkits (e.g. SendGrid for Email, iTextSharp for PDF report generation) supporting a Cloud environment, provide greater reachability to various users.
Visualized reports that enhance user decision-making capabilities: