去年.NET Conf China 技术大会上,我给大家分享了主题《轻松玩转.NET大规模版本升级》,今天把具体分享的内容整理成一篇博客,供大家研究参考学习。
一、先说一下技术挑战和业务背景
我们公司:特来电新能源股份有限公司:中国最大最强新能源汽车充电网运营商,主要从事新能源汽车充电网的建设、运营以及互联网增值服务。
基于.NET技术栈,团队通过七年的迭代演进,搭建了一个分布式、微服务、高可用的互联网技术平台,全面支撑了特来电充电业务的大规模应用。
目前,我们面临的技术挑战有:
大型分布式、微服务、云原生应用,新能源行业最大的互联网应用
服务于全国的电动汽车车主,系统的稳定性要求非常高:SLA 99.99% ,系统全年可允许宕机时间只有52.56分钟
现有技术平台需要快速支撑整个充电网的快速、上量发展!
通过打造一个互联网技术平台,全面支撑赋能公司的业务发展:
二、.NET技术栈及版本升级选择
1. 先看一下我们互联网技术平台的技术架构全景图
2. 整个互联网技术平台背后的.NET技术栈和开源技术
3. 目前系统的应用规模
4. .NET版本选择及升级策略
.NET Framework4.5.1 这个版本是线上最主要的版本,2015年开始一直沿用到现在
2020年正式全面迁移.NET Core3.1(LTS版本)
业务代码无法全部停下来,迁移升级.NET Core 3.1
迁移策略:逐步试点,逐个上线,非核心业务-新业务-核心业务
线上要长期、同时支持.NET Core 3.1和.NET Framework4.5.1
2022年计划整体升级迁移到.NET 6
为什么目前选择了.NET Core 3.1 ?
.NET Core 3.1:LTS版本,微软支持到2022年
.NET 5:非LTS版本,.NET 5是.NET统一后的第一个大版本,部分功能不完善,目前看是一个过渡版本。
2022年:整体升级迁移到.NET 6(LTS)
.NET 升级策略的设计
开发时:技术平台的代码统一使用.NET Standard,同时支持.NET Framework4.5.1和.NET Core 3.1 业务代码的引用
运行时:.NET Framework4.5.1和.NET Core代码并存,技术平台提供对应两个版本的.NET CLR运行时,支持相互调用
三、.NET线上大规模升级实践分享
1. 整体升级步骤
2. 先梳理NuGet包,确定各板块应用.NET Core升级顺序
3. 底层技术平台先升级.NET Core
3.1 一套代码同时支持.NET Framework和.NET Standard
同时兼容.NET Framework和.NET Standard
同时兼容2个版本,不需要代码同步
示例一个多Target Framework的项目工程设计
示例一下代码支持多版本.NET