Application platform
Windows Server 2016 comes with multiple options for deploying and hosting applications. It provides the following:
- Windows Server 2016
- Nano Server
- Windows and Docker Containers
- Hyper-V Containers
- Nested virtual machines
Windows Server as a hosting platform
Windows Server 2016 can be used for hosting applications and consuming server functionalities. It provides the services necessary to make applications secure, scalable, and highly available. It also provides services like virtualization, directory services, certificate services, web server, databases that help in building enterprise scale applications and services.
Nano servers
Windows Server provides a new option to host applications and services called Nano servers. This is a new lightweight, scaled-down Windows Server containing only the kernel and drivers necessary to run as an operating system. They are also known as headless servers. They do not have any graphical user interface and the only way to interact and manage them is through remote PowerShell. Out-of-the-box, they do not contain any service or feature. The services need to be added to Nano servers explicitly before use. So far, they are the most secure servers from Microsoft. They are very lightweight and their resource requirements and consumption is less than 80% of a normal Windows server. The number of services running, the number of ports open, the number of active processes running and the amount of memory and storage required, are also less than 80% compared to normal Windows servers.
Even though Nano Server out of box just has the kernel and drivers, its capabilities can be enhanced by adding features and deploying any Windows application on it.
Windows Containers and Docker
Containers are one of the most revolutionary features added to Windows Server 2016 after Nano Server. With the popularity and adoption of Docker Containers on Linux, Microsoft has introduced container services in Windows Server 2016 and Windows 10.
Containers are operating system virtualization. This means that multiple containers can be deployed on the same operating system and each one of them will share the host operating system kernel. It is the next level of virtualization after server virtualization (virtual machines). Containers generate the notion of complete operating system isolation and independence, even though it uses the same host operating system underneath it. This is possible through the use of namespace isolation and image layering. Containers are created from images. Images are immutable and cannot be modified. Each image has a base operating system and a series of instructions that are executed against it. Each instruction creates a new image on top of the previous image and contains only the modification. Finally, a writable image is stacked on top of these images.
These images are combined into a single image, which can then be used for provisioning containers. A container made up of multiple image layers is shown in Figure 3:
Figure 3: Containers made up of multiple image layers
Namespace isolation helps provide containers with pristine new environments. The containers cannot see the host resources and the host cannot view the container resources. For the application within the container, a complete new installation of the operating system is available. The containers share the host's memory, CPU, and storage.
Containers offer operating system virtualization, which means they can host only those operating systems supported by the host operating system. There cannot be a Windows Container running on a Linux host, and a Linux container cannot run on a Windows host operating system.
Hyper-V containers
Another type of container technology Windows Server 2016 provides is Hyper-V Containers. These containers are similar to Windows Containers. They are managed through the same Docker client and extend the same Docker APIs. However, these containers contain their own scaled down operating system kernel. They do not share the host operating system but have their own dedicated operating system, and their own dedicated memory and CPU assigned in exactly the same way virtual machines are assigned resources.
Hyper-V Containers bring in a higher level of isolation of containers from the host. While Windows Containers run in full trust on the host operating system, Hyper-V Containers do not have full trust from the host's perspective. It is this isolation that differentiates Hyper-V Containers from Windows Containers.
Hyper-V Containers are ideal for hosting applications that might harm the host server affecting every other container and service on it. Scenarios where users can bring in and execute their own code are examples of such applications. Hyper-V Containers provide adequate isolation and security to ensure that applications cannot access the host resources and change them.
Nested virtual machines
Another breakthrough innovation of Windows Server 2016 is that virtual machines can host virtual machines. Now, we can deploy multiple virtual machines containing all tiers of an application within a single virtual machine. This is made possible through software-defined networks and storage.
Enabling microservices
Nano servers and Containers help provide advanced lightweight deployment options through which we can now deconstruct the entire application into multiple smaller, independent services, each with their own scalability and high availability configuration, and deploy them independent of each other. Microservices help in making the entire DevOps lifecycle agile. With microservices, changes to services do not demand that every other microservice undergo entire test validation. Only the changed service needs to be tested rigorously, along with its integration with other services. Compare this to a monolithic application. Even a single small change will result in having to test the entire application. Microservices help in that it requires smaller teams for its development, testing of a service can happen independently of other services, and deployment can be done for each service in isolation.
Continuous integration, continuous deployment, and continuous delivery for each Micro service can be executed in isolation rather than compiling, testing, and deploying the whole application every time there is a change.
Reduced maintenance
Because of their intrinsic nature, Windows Nano servers and Containers are lightweight and quick to provision. They help in quick provision and configuration of environments and reduce overall time needed for continuous integration and deployment. Also, these resources can be provisioned on Azure on-demand within a few minutes. Because of their small footprint in terms of size, storage, memory, and features, they need less maintenance. These servers are patched less often, have fewer hot-fixes, they are secure by default, and have less chance of failing, which makes them ideal for development operations. The operations team needs to spend fewer hours maintaining these servers compared to normal servers. This reduces overall cost for the organization and help DevOps ensure a high-quality delivery.
Configuration management tools
Windows Server 2016 comes with Windows Management Framework 5.0 installed by default. Desired State Configuration (DSC) is the new configuration management platform available out-of-the-box in Windows Server 2016. It has a rich, mature set of features that enables configuration management for both operating system and applications. With DSC, the desired state and configuration of environments are authored as part of Infrastructure as Code and executed on every server on a scheduled basis. They help check the current state of servers with the documented desired state and bring them back to the desired state. DSC is available as part of PowerShell and it helps with authoring DSC configuration documents.
Windows Server 2016 provides a PowerShell unit testing framework known as PESTER. Historically, unit testing for infrastructure environments was always missing as a feature. PESTER enables the testing of infrastructure provisioned either manually or through Infrastructure as Code using DSC configuration or ARM templates. These help with the operational validation of the entire environment, bringing in a high level of cadence and confidence in continuous integration and deployment processes.
Deployment and packaging
Package management helps in deployment of utilities and tools through automation. It is a new concept in the Windows world. Package management has been ubiquitous in the Linux world for a long time. Packing management helps search, save, install, deploy, upgrade, and remove software packages from multiple sources and repositories on demand. There are public repositories such as Chocolatey, NuGet, and PSGallery available storing readily deployable packages. Tools such as NuGet can connect these repositories, download packages and help in overall package management. They also help with the versioning of packages. Applications that rely on a specific package version can download it on an as-needed basis. Package management helps with the building of environments and application deployment. Package deployment is much easier and faster with this out-of-the-box Windows feature.