This was the first year that Prague made the list of cities to host Microsoft Ignite The Tour. So, we couldn’t miss the opportunity to hear the latest news that Microsoft has for us. From the number and variety of attendees at the Prague Congress Centre, it was possible to conclude that the tour has a great international reputation. The overarching theme was learning paths, and participants could choose from a wide range of topics. Playing first fiddle at the conference was a cloud path to discovering Microsoft Azure, which attracted us the most, as is understandable due to our project focus. On our path to discovering Microsoft Azure, we were able to see live the pitfalls and benefits of migrating data and applications from on-premises environments to the cloud, what new possibilities come with the use of containers in the cloud, and how to design an application using modern serverless architecture.
Migrating applications from on-premises environments to Azure
The first topic on our journey was a live demonstration of application migration to Azure. Basically, you can choose from two migration paths—a conservative path where you migrate the virtual machines (VM) running the application or, if the architecture allows, you can use the Azure App Service PaaS (Platform as a Service). Microsoft is well aware that the application migration to Azure will give customers their first impression of the cloud, so it is no surprise that Microsoft provides a pair of very effective migration tools like App Service Migration and Azure Database Migration Service. In the same spirit, Microsoft then promotes the motto Lift and Shift, which can be interpreted as a strategy of gradual jumps. In the first phase, the goal is to as easily and quickly as possible move the application from the on-premises environment to the cloud (Lift). This is done via the aforementioned variant using IaaS (Infrastructure as a Service), that is by migrating the VMs themselves or using the migration tools mentioned above. The next steps, which may already mean application refactoring (Shift), are to modify them so they can be operated on a PaaS like Azure App Service, possibly allowing the application to run in a container on Azure Kubernetes Service. From a developer’s perspective, a big advantage of PaaS is that we do not need a whole department to take care of the infrastructure. We do not have to deal with patching, server upgrades or operational technical downtime—Azure handles all this for us. Other features such as global availability, the ability to define availability zones, and simple scaling are just the cherry on top. Although it might seem like migrating an application to Azure is a simple banality, there is one more major obstacle here, and that is non-technical in nature. (As for the rest… of course, Microsoft is trying to remove as many technical barriers as possible.) We are talking about the mental block when moving an application to an environment outside our control. But even here, there is a happy medium using hybrid architecture, where critical or sensitive parts of applications, such as databases, stay in the on-premises environment and the rest is then run on the cloud. There is a wide range of options for a secure connection between the environments, from the most expensive solution, using an express route through an OpenSec tunnel, to a VPN or a so-called hybrid connection via Azure Relay. There is also a diverse selection when it comes to options for migrating an application to Azure, for which you can take into account application, security and other requirements.
Containers in the cloud
In the world of logistics, so-called containerization was a big revolution. By enforcing standard container dimensions, it was possible to efficiently and simply transport a wider variety of different goods at the same time. Another important feature of the containers was the ability to transport goods using several different kinds of transportation without needing to reload complex goods. The result of all this was a reduction in the amount of manpower, storage and transport capacity needed (a more efficient use of space). This paradigm shift in logistics inspired something similar in the field of IT. Following the example of physical containers, it puts to work the main advantages of application containers, such as mutual isolation, which makes it easy to have multiple types of applications with different dependencies in one container cluster. Another equally advantageous feature of containers is that they can easily be ported almost anywhere whether it be a local development environment, a local container cluster or various cloud platforms. The last analogy to physical containers is the savings resulting from the fact that containers, unlike classic virtualization hardware, use VMs to virtualize the operating system kernel, which significantly reduces the demands on resources and their management.
Although containers are no longer a hot new thing in the world of IT, in connection with the cloud, they get a new dimension. In Microsoft Azure, you mainly benefit from the support of the container orchestrator Azure Kubernetes Service (AKS), which manages, maintains, and scales individual container instances. The biggest advantages of cloud-Kubernetes connections are the almost unlimited possibilities of automatic elastic scaling based on load, the simple management of hundreds to thousands of running containers, the global availability and the redundancy. From a developer’s perspective, it is the ability to focus solely on application development, not on infrastructure and its management. The beauty of the mutual inspiration and cooperation between the IT and logistics industries is illustrated by the fact that the application container orchestrator Azure Kubernetes Service is used by the logistics giant Maersk to optimize the transport of its physical containers of goods.
The pinnacle of cloud services is serverless architecture. It uses server abstraction on such a level that developers can focus solely on the development of application logic and do not have to deal with the selection or configuration of specific OSs and application server types, as is the case with the PaaS Azure App Service. As a result, this approach means that we only pay for the net machine time our applications consume on abstracted computing, which goes hand in hand with per-second billing to account for the utilization of these resources. Instead of paying for something like Azure App Service based on a monthly plan, we only pay when the serverless service is actually used—for instance, on the basis of real-world events. A typical example involves the processing of an order. Serverless architecture by Microsoft means two services: Azure Functions and Azure Logic Apps. The former has available computing power for our code, so it is programmed imperatively using the selected programming language. By its nature, it is also inclined towards a stateless solution. Azure Logic Apps, on the other hand, sequences logical events (workflow) or orchestrates business processes, thus it designs declaratively, for example, using a graphic web designer. The indisputable advantage of Azure Logic Apps is the existence of more than hundreds of ready-made connectors for existing services. A demonstration of how simple it is to design in Azure Logic Apps showed the creation of an email notification upon receipt of an order, including the creation of an invoice (an existing API). To create such a workflow took less than five minutes. Considering that serverless architecture offers even greater elastic scaling without any configuration, it can be considered an optimal solution for applications with quite unevenly distributed loads. We don’t have to worry about whether our application is used once or a hundred thousand times a day, Azure takes care of everything.
As part of our path to discovering Microsoft Azure, we confirmed that cloud technologies and environments offer a wealth of approaches and solutions that can be applied to existing classic applications. One such case is the project of delivering the core application of Prague Airport into cloud technologies with hybrid architecture. During this project, we were constantly amazed by the capabilities of Azure and how easy it was to use them on the application we developed. The world of the cloud is not only about changing the technical details of our applications, but to a great extent, it is also about changing our thinking and approach to solutions.
Author: Petr Filas