Calling all .NET developers!
The .NET revolution
Millions of .NET developers are today building all types of .NET applications for organizations around the world. The majority of these applications will today likely run on-premise and on a Windows platform but I am confident that it will change dramatically over the next few years.
I think many people will agree, that .NET is currently in the middle of a revolution, but I also think that many in the .NET community will argue that it is a fairly 'silent' revolution. One of my goals with this blog it actually to make some 'noise' around this because .NET and YOU - the .NET community - deserve it.
The 'new' .NET is a revolution - period!
The 'new' .NET platform is open-source, not dependent on Windows and it is a perfect platform to run in a(ny) Hyperscale Cloud, in fully managed PaaS (like an Azure App Service) or containerized in Cloud-Native approach (like AKS - Azure Kubernetes Service).
.NET & Hyperscale Cloud - a perfect match
The 'new' .NET platform offers a significant better price/performance, in Azure up to 80% cheaper than existing Azure PaaS plans, making .NET a very attractive alternative to on-premise, for both new and existing .NET apps.
The newly announced '.NET Upgrade Assistant' will automate many of the most time-consuming tasks in a migration from 'old' .NET to 'new' .NET and at the same time provide clear recommendations of where you need to do manual work. A fully automated migration is typically unrealistic, but we believe the .NET Upgrade Assistant will encourage many more organizations to modernize their most critical .NET apps and benefit from the 'new' .NET platform. The tool is - like .NET Core - open-source and we need help from YOU - the .NET Community - to enhance it.
The .NET Upgrade Assistant will be enhanced - with your help
However, no platform is relevant without a strong community and you will find few communities bigger, more passionate, experienced, skilled and with more MVP's than the .NET community. I hope - and trust - you agree :)
.NET, the .NET community & Cloud -
THE perfect match!
.NET is not 'just' .NET - and it is not 'just' Windows
First, let me try to get the terminology right as it may be confusing, if you are not a "hard-core dotnet'ter".
.NET Framework, .NET Core and .NET Standard
.NET Framework - or the 'old' .NET - is a development platform for building Windows applications. First released in 2002, it is shipped with the Windows client and server OS. The last version was 4.8 released in April 2019. It is a component of Windows and will be supported as long as Windows is supported.
.NET Core - or the 'new' .NET - is a modern, open-source development platform for building applications for any operating system or device with the best performance. It was first released in 2016 and is the future of .NET.
Current release is .NET 5 and it is supported until 3 months after the release of .NET 6, expected November 2021. Note that .NET 6 is a Long Term Support (LTS) release and it will be supported for three years after the initial release.
You will find the latest .NET 6 Preview 2 here (March 11, 2021)
Hint: Track the .NET Blog.
.NET Standard is a formal specification of the APIs that are common across .NET implementations. This allows the same code and libraries to run on different implementations.
See more details at What is the .NET Platform?
Keep it simple: .NET is just .NET - again
For simplicity, .NET Core will going forward be referred to as .NET - starting with .NET 5.
.NET 5 and later are all .NET Core
Earlier versions (pre-.NET 5) will include the full name and below you will find a full list of all supported versions (as of March 2021)
- NET Framework 3.5, 4.5, 4.6, 4.7 and 4.8
- .NET Core 2.1 and 3.1
See more support details for .NET Framework here and for .NET Core here.
I am already using .NET, but why should I use .NET Core?
Organizations typically want to move to .NET Core for two main reasons
- Short-term: Host apps on Linux and benefit from better price/performance.
- Long-term: To modernize critical apps to benefit from the latest technology and over time potentially move to a containerized Cloud-Native platform
I will in the next sections look deeper on option 1: The short-term cost optimization.
Azure App Service Plans - comparison S, Pv2 and Pv3
To illustrate the potential savings, I will compare the prices for three generations of Azure App Service Plans: Standard, Premium v2 and Premium v3. You can see the specific details in the picture.
I will as an example look at three different instances: S3, P2v2 and P1v3, all with ~8 GB RAM.
Note that even though S3 has mores cores, Pv2 and Pv3 are running on much newer and faster hardware and this will for most scenarios more than compensate for number of cores.
As you can see below, Pv3 is 15% cheaper in PAYG ("Pay as You Go") price, compared to both S and Pv2 despite being on the latest and fastest hardware - for Windows plans; e.g. where you can run your 'old' .NET (=.NET Framework) apps.
If your app is migrated to .NET Core, you will be able to use a Linux plan and you will then save 47% (Pv3), 42% (Pv2) or 5% (Std).
As Pv3 also offers to reserve app service capacity (one or three years), you can save up to 80% by moving from Pv2 (or Std) Windows plans to a Pv3 Linux plan with a three year reservation!
Pv3 Linux up to 80% cheaper (with RI3Y)
The prices below are per hour in Western Europe (as of March 2021)
You can see more details for Azure App Service pricing here for Windows and for Linux.
When to use .NET Core?
For new .NET applications, it is a "no-brainer": Always use .NET Core.
New Apps: Always use .NET Core.
For existing .NET Framework apps, it is more complicated as illustrated in the picture below. Note that this is for inspiration only, not a comprehensive introduction. It will always require a detailed architectural discussion for any potential 'old' .NET app as the "Devil always is in the Details".
.NET apps with expected short lifetime
If your .NET (Framework) app has a relatively short expected lifetime or is run on relatively inexpensive infrastructure, the migration cost may be too high to make it worth the effort. However, for organizations already using Azure, it will make sense to consider a move to Azure Pv3 to optimize cost if the app is on-premise or on a older Azure App Service plan as the transition is typically relatively simple.
.NET apps with expected medium to long lifetime
If it is a critical app with a longer expected lifetime or an application that could benefit from a larger and faster infrastructure, you should evaluate a potential partial or full migration to .NET Core.
If you consider migrating a .NET Framework app, the newly announced '.NET Upgrade Assistant' will be a natural next step as it will also give you an indication of the potential effort in a migration - see more in the next section.
Note that you don't have to migrate all of your application at the same time. If you have a well-architected multi-tier application, like front-end, back-end, middle-tier etc., it is possible to migrate these 'tiers' individually. A typical example is if you are using Windows components for the UI part and where the migration may be more complex/time-consuming, while the backend or middle-tier might be easier to migrate.
If you want a more detailed introduction to this complex topic, please look here. This free e-book is also a good starting point: Porting existing ASP.NET apps to .NET Core.
The .NET Upgrade Assistant
As mentioned earlier, the newly announced '.NET Upgrade Assistant' will automate many of the most time-consuming migration tasks and at the same time provide clear recommendations of where you need to do manual work.
Like .NET itself, the upgrade assistant is also open-source and you will find it in GitHub. Below is an extract of the README.MD (March 2021)
The tool is developed in collaboration with EPiServer as part of their journey to move their enterprise-scale applications to .NET 5 and we want to continue this collaboration with external organizations.
If you have a critical .NET Framework app that you consider migrating to .NET Core and where you think it has patterns that potentially could/should be added to the .NET Upgrade Assistant, please feel free to reach out to me.
We are open for feedback :)
You can read more about the .NET Upgrade Assistant here ...
Introducing the .NET Upgrade Assistant Preview | .NET Blog (microsoft.com)
Upgrade Assistant | .NET (microsoft.com)
Want to hear more - or have feedback/suggestions?
As always, I am very interested on your feedback. Please feel free to add a comment to this blog, reach out to me ([email protected]).
Other Cloud related blogs
Enterprise-scale Landing zones
- PlatformOps in a Microsoft Enterprise-scale landing zone: https://www.dhirubhai.net/pulse/platformops-microsoft-enterprise-scale-landing-zone-anders-bonde/
Cloud Strategy:
- Cloud Strategy - The SIX Decisions: https://www.dhirubhai.net/pulse/cloud-strategy-1-six-decisions-anders-bonde/
Digital Transformation Delivered
- ”How much is a datacenter in Azure” - https://sway.com/3pYn0OkqAgrxchvi
- “Digital Transformation Delivered – The HOW part” – https://www.dhirubhai.net/pulse/digital-transformation-delivered-how-part-anders-bonde/
- “Azure Onboarding AKA ‘The House’” – https://www.dhirubhai.net/pulse/azure-onboarding-aka-house-anders-bonde
Cloud Economics series
- FinOps - https://www.dhirubhai.net/pulse/cloud-economics-v20-part-1-anders-bonde/
- The FinOps Handbook - https://aka.ms/finopshandbook
- On-Premise vs Public Cloud - https://www.dhirubhai.net/pulse/cloud-economics-v20-part-3-on-premise-vs-public-anders-bonde