微软移植Commerce服务至.NET 6平台,降低成本开销同时提升稳定度

微软从2019年开始,为了要把内部处理收入的系统Microsoft Commerce移上Azure,因此逐步将程序代码库移植到.NET 6版本,而这样的升级改进整体服务品质指标,不只节省成本,也使得来自.NET Runtime的异常减少。

Microsoft Commerce是一组服务的集合,这些服务处理各种微软的收入,包括来自庞大的产品和服务、维护授权资讯,甚至替每个运营区域计算税收等。Microsoft Commerce涵盖700多个服务,服务有大有小并在可用性、可扩展性和法遵都有不同要求,其中最大规模的服务,每秒需要处理超过110万次请求,并在数十万个核心上运行。

微软在2019年的时候开始了这项搬迁计划,考虑到要将Commerce搬上Azure,并且充分使用容器和Kubernetes,就需要转向使用Linux,同时需要搬迁至.NET Core。这项搬迁工作其中最具代表性的工作,便是全球查询服务GLS( Global Lookup Service),因为GLS历经了最长的搬迁旅程。

GLS是一个分区服务,根据临近程度映射微软用户到资料位置,微软解释,这是一个重要的基础设施服务,支持着Xbox和微软商店等消费商务场景。

GLS是一种分布式大规模RESTful服务,部署于全球4个地区,全球每秒请求超过10万次,该服务最初是用.NET Framework 4.6.2编写并在Windows虚拟机上运行,作为Commerce搬迁到Azure的一部分工作,GLS程序代码库从.NET Framework 4.6.2升级至.NET Core 3.1、5,然后是.NET 6,现在已可容器化在AKS(Azure Kubernetes Service)上运行。

微软提到,Commerce各服务因差异,所以搬迁的时间都不一样,但他们早期搬迁服务,花费的时间比晚期搬迁的服务要长得多,因为通过搬迁过程中的学习,使得搬迁过程越来越容易,部分从.NET Framework搬迁到.NET Core的服务,开发团队可能会在搬迁过程执行额外的更新,使得测试和验证的工作增加,但从5.0到6.0的迁移就更为直接,许多只需要更改几行程序代码就可以获得框架改进,时间通常不到一天。

微软在衡量搬迁成功与否主要关注成本,从.NET Framework搬迁到.NET Core 3.1,部分服务可节省成本达80%,vCore减少35%以上,另外,微软也提到,他们有一项重要的服务,搬迁到.NET Core 3.1后,服务延迟降低约78%,同时明显提升稳定性。GLS的搬迁呈现了相似的成本下降,与最先的.NET Framework与Windows虚拟机配置相比,搬迁后vCore减少30%,延迟降低20%。

.NET 5搬迁到.NET 6,GLS的改进主要体现于.NET指标上,像是即便保持相同RPS时,但是线程池中的线程数量下降,显示线程管理性能变好,另外,升级也改进了连接管理,使得并行连接数下降,而且来自.NET Runtime的执行异常也随之下降。