As you may see from the first part of this topic, a lot of stuff is going on around containers, containerization, and everything that relates to it. Fortunately, it wasn’t the only topic of the conference and continuing the story, and I’m going to talk about the other areas worth attention.
Yes, I know what you think – heard about/use it already, so what’s new? Fortunately, the key in Cesar’s presentation was not reinventing the wheel 😊 the key is containers (what! … again?). As I have already mentioned, Microsoft focuses a lot of efforts around Cloud and Service Fabric along with Azure Functions in particular. “It works on my local machine! ...Why not in production?”. If this expression sounds familiar to you, I highly recommend watching this presentation. Docker helps to automate the deployment of applications as portable, self-sufficient containers that can run on any cloud (or on-premises). From the practical standpoint, the most attractive to the developers was a demonstration of sample .NET Core reference application, powered by Microsoft and based on a simplified microservices architecture and Docker containers. This reference application demonstrated by Cesar, proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application (which is eShop, that should sound familiar to the most of the developers).
What’s interesting about this demo app – it offers different microservices types, meaning different Architecture patterns approaches, depending on the purpose, as shown on the schema above. According to this Architecture - EventBus works on top of RabbitMQ and can potentially be replaced with another Bus technology that can come into your mind, like Service Fabric, nServiceBus, MassTransit, etc. I would suggest keeping an eye on this project, as the guys might fork it in the future to target some specific microservice cluster/orchestrators, using additional cloud infrastructure (Azure Container Service and mentioned many times already DC/OS, Kubernetes, Docker Swarm), which is very interesting from the practical standpoint.
The project itself can be found on GitHub. That’s not all, Cesar also shared an eBook (Architecting & Developing series) that uncovers the details of Microservices Architecture for Containerized .NET Applications. It can be downloaded from here for free (no registration required).
You can find the link to this presentation below (“Microservices Architecture with ASP.NET Core”).
Developing on Windows Server
This is the last word about containers, I promise 😊
It was a good presentation by Taylor Brown (PM, Windows Server) and Steve Lasker (PM, Visual Studio/Containers). The goal for the guys obviously was to make developers love using Windows Server. Long story short – every (true) developer likes creation process. Coping with outdated stuff does not deliver that much pleasure, especially adding new features or maintaining it. But the reality is simple – many applications can’t be just simply thrown away (for many reasons). Fortunately, there is a way out, or at least, the situation can be made easier by adding new tools and code to existing apps. How so? Containerize existing app!
- Containerize it for portability/efficiency and reliability
- Transform monoliths to microservices (adding new code and transforming existing one)
- Accelerate the process (by using agile cloud native app development)
The use case is simple – with Azure Service Fabric and Windows Containers you can push new features immediately, roll them back if necessary and implement the new ones with greater confidence.
What is good, once Visual Studio 2017 released it supported Docker (debugging and testing of the app in Docker containers, break points debugging, Docker assets scaffolding etc.)
I encourage you to use mentioned patterns to cope with existing applications or greenfield developments and watch recorded presentation where Steve demonstrates how all that stuff works (the link, as usual, can be found at the end of this topic).
Another interesting feature worth mentioning (especially regarding managing existing applications), we can now create Docker images for existing artifacts. So, roughly speaking I can say in PowerShell - hey, go to that machine, scavenge IIS app for me (and create an image from it), and it will be done with one line in PS console:
ConvertTo-Dockerfile -RemotePath \\192.168.0.1\c$ -OtputPath c:\myDockerFile -Artifact IIS
How cool is that! 😊 This PowerShell module can be found in the PS Gallery.
Regarding containers support, Azure Service Fabric now supports Windows Server Containers and Hyper-V isolation, Image deployment and activation, volume driver, networking and DNS discovery and resources governance. Kubernetes is now having Alpha support for Windows containers now (good demonstration from RedHat to see, where OpenShift runs Windows containers). It supports one container per Pod (linked containers collection that shares an IP address). The easiest way to start with Kubernetes is to use ACS. Please follow the link to documentation.
Nano Server Image. For those who don’t know what this is – it’s container-optimized Windows Server 2016 image with uncompressed size around 1Gb. What’s interesting about it, it lacks Windows components that are irrelevant in containers or for modern development. Optional components are layers now, so, can be installed on top of the image.
Comprehensive documentation on Windows Containers.
And lastly, don’t hesitate to use MS Feedback Hub and user voice portals to get back to Microsoft teams with comments or feature requests.
I cannot avoid mentioning Microsoft Graph (formerly known as Graph API) as right now it penetrates every MS product, provides native ways of managing your application through REST APIs. You can use the Microsoft Graph API to interact with the data of millions of users in the Microsoft cloud. Use Microsoft Graph to build apps for organizations and consumers that connect to a wealth of resources, relationships, and intelligence, all through a single endpoint: https://graph.microsoft.com
What can you do with it? Potentially – many things, starting from MS Office management (calendars, alerting, meeting requests), OneDrive, and ending with Skype and Azure AD management (users/groups/passwords, subscriptions), which are the most precious features as per my opinion.
One of my questions to Microsoft engineers was about extremely fast changes to some APIs and how I could keep track of them. Now you can use a changelog on MS website to be sure you won’t miss anything important. Keep an eye on it to be always up to date. Try a sample request in the Graph Explorer
Microsoft Bot Framework is another technology that has a lot of buzz around it. Bots, AI and Machine Learning, are the new tendency in the software development and step forward towards self-contained AI, so everybody interested in it (the room on the conference were overcrowded as well). You can Build and connect intelligent bots to interact with your users naturally wherever they are — from your website or app to Cortana, Skype, Teams, Office 365 mail, Slack, Facebook Messenger Skype for Business and more!
The most interesting features from my perspective are Adaptive Cards and Payment Request APIs along with voice/language recognition capabilities.
I have attended a very interesting presentation by Mat Velloso and Ryan Volum (both from DX group – Developer Experience) that reveals development patterns and best practices in this regard. I highly recommend to watch it yourself, as there are lots of cool stuff going on 😊 Obviously, MS is adopting this technology itself, grow the expertise in this field and collecting best practices and the guys share some really cool hands-on experience of implementing Bots for several customers and Bots Framework Architecture. Please find the link at the end of this topic.
Bots framework documentation.
Azure Cosmos DB
Talking about this conference, I couldn’t avoid mentioning Cosmos DB, which is the new Microsoft’s globally distributed database service designed to enable you to build planet-scale applications. On this session, Rimma Nehme (Cosmos DB Team Architect) explained how to start leveraging Cosmos DB for applications and described some of its differentiating features (multi-model (Key-Value, Document & Graph Database), APIs (Document DB, MongoDB, Tables, Gremlin Graph)). Also, it was demonstrated how easy it is to port over existing code and data from popular open source NoSQL Databases. Azure Cosmos DB was built from the ground up with global distribution and horizontal scale at its core. It offers turnkey global distribution across any number of Azure regions by transparently scaling and replicating your data wherever your users are.
Important highlights about this DB:
- Cosmos DB natively partitions your data for high availability and scalability. Cosmos DB offers 99.99% guarantees for availability, throughput, low latency, and consistency
- Cosmos DB has SSD backed storage with low-latency order-of-millisecond response times
- Cosmos DB's support for consistency levels like eventual, consistent prefix, session, and bounded-staleness allows for full flexibility and low cost-to performance-ratio. No database service offers as much flexibility as Cosmos DB in levels consistency
- Cosmos DB has a flexible data-friendly pricing model that meters storage and throughput independently
- Cosmos DB's reserved throughput model allows you to think regarding number of reads/writes instead of CPU/memory/IOPS of the underlying hardware
- Cosmos DB's design lets you scale to massive request volumes in the order of trillions of requests per day
- Throughput: 100s to 100s of million requests/sec
- Multi-homing APIs (Apps don’t need to be redeployed during regional failover)
- Automatic multi-region replication (dynamically adjusted)
- Storage: Gigabytes to Petabytes
- Guarantee millisecond latency worldwide
See the most popular HL Architectures and use cases on the official website along with the recorded video on Channel 9 (the link is below).
There is more!
There are even more conferences I was unable to attend myself as the rooms were overcrowded or they were running in parallels, and I was able to see only part of it, but the topics are deserving talking about them:
- The future of C# All about recently shipped C# 7.0 and Visual Studio 2017
- Signal R in .NET Core – in my opinion, the guys have produced one of the most interesting and entertaining sessions on this Build. It was all about new SignalR capabilities on .NET Core platform
- Machine Learning for Developers – how to build even more intelligent apps and services (all of Microsoft’s offerings such as Azure Machine Learning, SQL Server R Services, Data Science Virtual Machine, Cognitive Services and Cognitive Toolkit, and Azure Data Lake Analytics)
Microsoft Partner Solutions (or, “Know your toolset”)
Along with Microsoft, the lounge zone at Conference Centre was occupied by the partners. I had an opportunity to talk to all of them and get the recent news about their products. The most interesting ones are next:
Openshift represents container platform (or more precisely, container orchestration based on Kubernetes). It supports multiple languages, frameworks, and databases and allows hybrid and multi-cloud deployment
Represents a scalable feature management platform that wraps new functionality in code, separating deployment from feature release. It helps companies perform canary launches while incorporating kill-switches to turn off poorly performing features
- Octopus Deploy - Octopus works with your build server to enable reliable, secure, automated releases of ASP.NET applications and Windows Services into test, staging and production environments, whether they are in the cloud or on-premises. In my opinion, the most interesting capability of this platform is simplified deployment process to VMs (that is missing and so desirable in VSTS)
- JetBrains – lots of different offerings. I like ReSharper and always use it in development which simplifies routine work a lot. Apart from it, the guys were presenting Rider IDE (Visual Studio for Mac competitor) which is an early preview now. In my opinion, right now it has a lot more capabilities than VS for Mac (I have both on my laptop)
- Redgate – SQL Server tools for developers and DB DevOps. Surprisingly, some of their tools (like SQL Prompt) are now the part of VS 2017, which definitely the good news.
As you may see, a lot of stuff is dedicated to containers, and this wide choice of options gives an extraordinary flexibility. As Corey correctly pointed out, it is up to your choice which approaches to use. If you have a preconceived notion or favorite platform – you can deploy and start playing around! You have all the necessary instruments in your hands!
Mentioned Videos on Channel 9
Azure Compute – new features and roadmap (Corey Sanders)
Microservices Architecture with ASP.NET Core (Cesar De la Torre)
How to build serverless business applications with Azure Functions and Logic Apps for PowerApps (Jeff Hollan, Eduardo Laureano)
Developing on Windows Server: Innovation for today and tomorrow - containers, Docker, .NET Core, Service Fabric
How to build global-scale applications with Microsoft Azure SQL Database
Bot capabilities, patterns and principles (Mat Velloso and Ryan Volum)
Azure Cosmos DB – Microsoft’s globally-distributed, multi-model database service
I hope describing all this stuff worth efforts and you can learn something new from these topics. Happy reading!