After months of late nights and more pizza then you want to remember, it’s time to deploy your brand-new web application to production.
The good news is… you’ve got choices – lots of choices! However, making the right decision requires that you have a good understanding of each.
In this post, we’ll fly over some of the more popular hosting options shown below in Figure 1. Note that as we move from left to right, we focus more of our effort on the application platform, letting Microsoft manage the underlying infrastructure concerns.
Your Data Center
You could simply publish your new application right into your data center. Chances are this is exactly what you’ve been doing all along. You probably thinking, it’s tried, proven, tested and low risk. It could be deployed to physical hardware or even a virtualized solution. While there are advantages to doing so, this option can get expensive fast, both in the short- and long-term..
To start, you’ll have to make your best scientific guess as to the hardware capabilities your app is going to need. What will normal and peak demand look like? How much will the app grow over the next year? Estimate too little, and you have could experience trouble keeping up with surges in traffic; estimate, too large, and you could be paying for excess capacity that you are not using.
If the app is large enough, there’s a good chance that you’ll need to purchase hardware, which in most organizations can be time-consuming, and costly – on a good day. Appropriations, budget approvals and the purchasing process all take up time. Once purchased, you and your DevOps team are responsible for provisioning the hardware, installing the OS and required software and configuring the networking, security and virtualization, among other tasks.
Moving forward, you have complete responsibility including patching, updates and potential hardware problems. Tasks such as application scaling, load balancing, health monitoring and healing will be all on your plate.
Clearly, this model keeps you and your DevOps Team in the data center business.
As an alternative, you could begin explore the hosting service models that are available in a public cloud, such as Microsoft’s Azure.
Infrastructure as a Service
This model allows you to utilize a virtual machine (VM), hosted in the Azure cloud.
The good news is that you can provision a VM in a matter of minutes, literally, selecting from a wide variety of sizes, capabilities and features. VM cost can range as little $15 – 20 a month up into the thousands, based on the capabilities (memory, cores, disks and feature-set) that you require. Best of all, you can easily increase or decrease the capabilities of your VMs in a matter of minutes. You can import a custom image upon which to build your VM, or leverage the extensive repository of built-in Windows and Linux images.
Moreover, if you require multiple VMs, the Azure Virtual Machine Scale Set service can provision a set of identical VMs, enabling you to manage them as a single unit.
All this can be done via scripting or directly from the user-friendly Azure portal.
The shortcoming here is that you are still responsible for the patching and updates of the VM. Basically, you are renting the hardware.
Platform as a Service
This model enables to you to leverage a prebuilt, pre-configured, fully-managed platform upon which you can deploy and scale your enterprise applications and services.
While your application runs across dedicated VMs, the size and capabilities you select, the management concerns of these machines are abstracted from you and handled by Microsoft. Your focus becomes the Application Platform, instead of the Infrastructure Platform. As with Azure VMs, you can change the number and capacity of the underlying VMs at any time.
The Platform as a Service offering provides many key features that you can just use: Load balancing, auto-scaling, continuous deployment, auto-patching, health checking and a wide variety of diagnostic information and alerts. Most importantly, the platform exposes a rich built-in set of features and services – plumbing that you don’t have to buy or build. Typical application services, like a cache, messaging queue, storage, a relational or No-Sql DB, identity, traffic management and many more are available as managed services, built into the platform.
Azure App Services
The simplest Platform as a Service offering is entitled Azure App Services. As depicted above in Figure 1, App Services are simple, fast and agile.
As shown in Figure 2, below, the Azure App Services platform encompasses a variety of web-based application types, including HTML-based apps (like MVC and Web Forms), REST-based services (like the Web API), workflow and integration-based apps (Logic apps) and even the new “serverless” web applications called Azure Functions, which are a great solution for running background processes and tasks.
Perhaps the most striking feature of App Services is the ease and simplicity of creating and hosting applications. Plain vanilla MVC, Web Forms or API applications can be deployed to App Services “as-is.”
For that reason, App Services a popular customer offering with more than 350,000 deployed applications. A variety of hosting plans available. Built-in features like auto-scaling, deployment slots, Continuous Integration/Deployment make it an appealing starting point for moving workload to the cloud.
Azure Cloud Services
Cloud Services is Microsoft’s legacy Platform as a Service offering. It debuted in 2010. While still supported today, it is considered a legacy technology for many reasons.
As shown in Figure 3, Cloud Services are exposed as a single container which can encompass multiple front-end web-based applications and asynchronous background services.
As compared to App Services, Cloud Services provide more fine-grained control of the underlying infrastructure. For example, they enable you to configure server start-up tasks and allow remote desktop support into the underlying virtual machines. However, the platform has become outdated and less flexible than its counterparts. As each Cloud Services requires a separate virtual machine, this solution can become expensive fast.
For Greenfield (new) development, Cloud Services would not be a wise choice. Those legacy applications that currently utilize Cloud Services would be strong candidates for replatforming to the newer PaaS platforms.
Azure Service Fabric
Service Fabric is the newest Platform as a Service offering from Microsoft. Interestingly, Service Fabric itself has been existence for more than 6 years, used to power much of Azure under-the-hood. Microsoft has now genericized the bits and made them available to customers – for free.
Service Fabric targets larger enterprise applications that are constructed upon microservice-based architectures and have the potential of needing to hyper-scale to hundreds or even thousands of instances.
To be precise, Service Fabric is a full-featured orchestration platform upon which you can host services and web-based applications. It provides a comprehensive set of built-in features to manage and scale applications as shown in Figure 4 below.
In the purple-shaded area above, note how Service Fabric provides support for high availability, rolling upgrades, health monitoring, resource balancing, to name a few.
While the platform can host executables, ASP.NET Core and Web API applications, it provides two opinionated, but feature-rich development framework: Reliable Services and Reliable Actos. Both provide deep integration with the underlying Service Fabric platform.
The most recent announcement is that Service Fabric now support docker containers. For example, you can easily containerize legacy applications and deploy them to Service Fabric in containers.
As the minimum of virtual machines required for a Service Fabric cluster is 5, it is a great target for targeting larger enterprise applications or a large number of line-of-business solutions.
You can continue to host you web-based applications in your data center, but time should be invested by you and your team to investigate cloud-hosting offerings and the savings and efficiency they can bring for you and your business.
Premier Service for Developers has wide assortment of informational and training opportunities to help customers understand, select and leverage. Please reach out the to the Premier Developer Team for guidance, consulting or training across the Microsoft technology stack.
Rob Vettor is a Senior Developer Consultant with Microsoft, helping Microsoft Enterprise customers construct high-quality software. Rob focuses on Azure PaaS, including the Service Fabric and Azure App Services platforms. A former user group leader, 3-time C# MVP and co-author of the book Entity Framework 6 Recipes, Rob is a frequent presenter at technical conferences. Reach out at firstname.lastname@example.org.