历时三年,苏宁如何建设多数据中心多活的实践项目?
卖萌控的博客
点击这里进入电脑版页面!体验更好
历时三年,苏宁如何建设多数据中心多活的实践项目?
2022-7-9 萌小白


作者 | 陈跃泉、涂成义、马忠成



策划 | 蔡芳芳



随着苏宁线下线上业务以及全产业、全业态规模式快速增长,特别是每年苏宁 818
大促、双 11
等大促节点,销售订单基本都呈现倍数级增长态势,需要进行大量资源扩容,单个数据中心的容量有限,已经无法支撑苏宁业务的快速发展。同时,单数据中心在高可用上存在不足,一旦数据中心发生故障,会导致业务受损,用户访问中断,带来严重的影响。针对以上问题,苏宁规划建设多数据中心解决方案迫在眉睫。



1方案选择



参考业界多数据中心实践,目前主流的多数据中心的解决方案有如下几个:




介绍这几个方案前,我们先来看下相关概念:




1、主备模式






主机房提供服务,备用机房不提供服务,当主机房故障,服务可切换到备用机房接管。



2、同城双活






同一个集群横跨同城两个不同的 AZ,两个 AZ 同时对外提供服务,同时允许跨机房访问不同服务以及数据库。



3、多活模式






多个机房同时提供服务,业务请求尽量收敛在同一个机房,当某个机房故障时,可以切换其它接管机房。



4、方案比较






鉴于苏宁线上 / 线下交易业务和支付业务特性,以及异地数据中心的要求,通过技术评估和决策,最终选择多活模式。



由于选择了难度最大的一种方案模式,多活方案将涵盖苏宁所有核心业务以及基础组件,需要考虑和关注的问题非常多,一旦设计发生偏差,调整的代价将非常大。为了确保方案的合理性,可实施性,首先我们讨论并制定了顶层设计,包括目标、价值和设计原则,并在设计过程中不断的复盘,以保证设计不偏离主航道。



2顶层设计



顶层设计是多活相关的干系中心经过充分讨论,并最终达成一致的最高方针。总体方案以及各个业务系统方案都必须有严格遵守的规范和要求,包括目标、价值和原则。



1、目标





  1. 机房水平扩展:单机房容量有限,业务高增长带来大量的资源需求,多活需要具备机房水平扩展能力,为资源扩容提供保障。





  2. 机房之间同城和异地高可用:单机房存在单点故障风险,多活需要具备机房级别的高可用能力,在一个机房出现故障时,能够将流量快速切到其他正常的机房,对业务的影响降低到最小。





2、价值





  1. 支持业务的快速发展:苏宁每年的业务规模成倍数级增长,所依赖的 IT 资源也快速增长,通过机房的水平扩展,解决单机房容量不足问题,以支持业务的发展。





  2. 同城与异地容灾:当机房出现电源或网络以及地震等机房级别故障,通过机房级别的流量切换实现同城与异地容灾,将对业务的影响降低到可控水平。





  3. 混合云降低持有成本:由于电商业务的特殊性,大促流量与平时流量相差上百倍,大促期间将流量划拨到公有云,在多活能力的基础上,实现私有云与公有云混部,降低私有云长期持有成本。





  4. 灰度发布:实现按机房级别流量逐步灰度发布,降低业务版本故障影响面,提升版本发布质量。





3、原则





  1. 同一用户的交易尽量在一个数据中心内部完成。苏宁对于交易业务按照用户纬度对数据分片,特定的用户路由到特定的数据中心,保证一个用户的交易在一个数据中心完成。





  2. 业务无需感知多数据中心。核心业务在多个数据中心部署,提供服务,业务无需感知自己在哪个机房,即便数据中心发生切换,业务也无需感知。





  3. 尽量节省资源。由于多机房部署导致成本上升,需要通过调整高可用部署方案降低多机房部署成本。





基于顶层设计的要求,开始多活总体方案的架构设计。



3架构设计



1、相关概念




2、服务架构






按照用户分布到不同的数据中心,多个数据中心都提供服务,在一个数据中心出现问题时,可以随时将流量切到另外一个正常的数据中心。




3、服务路由






流量的分布是由服务路由来决定的,而路由的功能由各组件承载并实现,主要分成以下几部分:




4、服务收敛






基于服务路由的功能,为了实现同一用户的交易在同一数据中心进行,减少跨数据中心网络延迟,需要对用户流量进行精准分发。流量在进入数据中心前,按照一定的路由规则,确定好待分发的目标中心,以减少数据中心之间的二次转发。比如,苏宁在
CDN 层进行用户的初次路由,将用户分发到不同的数据中心。



数据中心内部,对服务层设置多种路由策略,比如设置接入层、RPC、DAL 等的路由方式以及业务服务拆分,使得同一个用户所有请求尽量收敛在同一个数据中心,实现流量精准划拨,避免跨机房调用。



请求的收敛设计确保流量按照 Cell 级别划拨到不同的数据中心,并在同一中心封闭收敛,这也是实现多数据中心部署的基础。



5、数据高可用






为了确保数据高可用以及任何一个机房故障都可被接管,所有数据中心都包含全量数据,当主数据中心的变更将会实时同步到各个从数据中心。



数据中心之间延迟相对数据中心内部延迟较大,数据中心之间的同步一般采用异步复制方式。在机房故障等极端情况,将出现少量数据未同步到其它数据中心,针对此类故障场景,在机房恢复后,需要对未同步的数据进行人工修复。



4技术难点



按照多活的架构设计,并结合苏宁的业务特点和 IT 技术现状,需要优先解决相关的技术难点。



1、高可用实现



高可用实现原则






数据中心高可用分成两部分:



(1)单数据中心内高可用




(2)多数据中心间高可用




其中机房级别故障切换时间一般在分钟级别。



高可用实现指标







高可用实践



服务切换






(1)数据复制拓扑结构



对于分片数据跨机房复制方式主要分成两种:







复制拓扑结构比较



为了确保数据的一致性和避免出错概率以及数据存储分布不规整,苏宁初期采用单向交叉复制拓扑结构。



(2)数据迁移与规整






为了实现按用户分 Cell 分布到不同数据中心,并且苏宁业务形态的多样性以及一些历史遗留问题,比如单表记录过多(超过 1 亿),不利于多数据中心的扩展,为此需要对数据按照一定的规则重新迁移和规整。




(3)服务切换



对于分片数据服务,分片服务按照一定规则对 Cell 分组进行切换,确保应用层的服务和数据可以同时切换,避免数据写入异常。



跨数据链路切换






为了实现部分流量全链路划拨到不同的数据中心,以及在数据中心故障时能够快速接管业务,所有多数据中心流程分发和服务调度全部由基础中间件平台完成,无需业务感知数据中心故障或流量划拨,这样整体切换时间会大大缩短,快速恢复业务。从而实现数据中心之间同城高可用以及异地高可用。



具体步骤如下:




2、灰度部署与上线



为了确保多机房部署时,拓扑结构和配置的变化,不影响到整个业务系统运行,采用灰度部署方案,分以下几个阶段:







组件和系统部署完成了,为了确保业务稳定上线,生产的流量逐步划拨,前一个步骤的完成为下一个步骤的准入条件。



具体如下:




3、全链路监控






苏宁的业务种类繁多,为确保核心交易业务的可靠性和扩展性,现阶段优先对这些业务进行多活改造和多数据中心部署。



一次交易请求,落在哪个数据中心处理,请求失败是由哪个业务节点导致等等,这就需要一套完善的监控平台,对全链路,多数据中心的各个环节进行全方位,高精度的监控。



监控平台主要分成以下几个部分:




4、故障演练






为了模拟机房故障,通过混沌工程逐步提高爆炸半径,模拟业务故障,减少对业务的影响,主要故障模拟如下:




通过混沌工程模拟可以相对真实验证整个多活系统的容灾能力,整个模拟对业务的影响都相对可控,大大降低对业务的影响。



5多活拓展



在多活方案设计过程中,需要综合考虑苏宁 IT 基础设施规划,其中异地部署和混合云部署是多活能力的拓展和延伸。



1、异地部署



由于同城机房资源受限,并且同城部署无法解决地震等极端故障,因此需要引入异地部署。异地多数据中心相比同城多数据中心,最大的问题就是网络延迟明显增大,数据中心的宽带相对受限,需要在架构和整体的解决方案上进行考虑,通过技术手段实现异地多数据中心的高可用性,降低延迟。同时需要通过组件对传输数据进行压缩和传输限流,确保传输的数据在有限的宽带可控范围内。



苏宁多活架构从一开始就是按照异地部署架构来设计,大大降低同城和异地部署异构性和运维复杂性。



2、混合云部署



苏宁业务系统大促流量是平时业务流量的十倍甚至上百倍,日常资源都是按照大促的峰值进行准备,资源持有和运维成本较高,资源采购,上线周期较长。因此大促期间,通过将部分流量弹到公有云,利用公有云的弹性能力,为私有云进行削峰,大大降低苏宁私有云长期持有成本,以及运维成本。



混合云相比原有多活需要做如下的能力拓展:




6总结



多数据中心多活项目作为苏宁重大项目,经过 3 年左右的建设,已于 2019
年上线,历经 818 和双 11
等大促考验,实现关键链路从单机房平滑过渡到多机房的突破,支撑了业务的快速发展;并在机房出现真实故障时,快速实现业务恢复,将故障影响降低到可控范围内。



混合云项目经历一年左右的建设,也已初具规模,将为苏宁后续的业务高速发展保驾护航,降低公司大促扩容成本。



作者介绍:



陈跃泉,苏宁科技集团
CTO 办公室技术架构部负责人,架构总监,苏宁多活多数据中心项目首席架构师和混合云项目总体技术负责人,拥有 15+
年零售、电信、金融等超大型或大型项目架构设计经验,对大规模分布式系统 PaaS 和 IaaS 架构设计有深入的理解和思考。



涂成义,苏宁科技集团 CTO 办公室技术架构部高级架构师,曾在华为,中兴等多家 IT 公司任职架构设计,技术负责人。目前专注于云计算相关技术研究,对高并发,高可用架构有较深入的理解和思考,多活多数据中心项目核心成员。



马忠成,苏宁科技集团 CTO 办公室技术架构部高级架构师,多活多数据中心项目核心成员,在加入苏宁之前从事多年的运营商 IPTV、CDN 研发设计和规划工作。


转自:InfoQ
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容