迎战双11,苏宁的多数据中心多活如何建成?
基于服务路由的功能,为了实现同一用户的交易在同一数据中心进行,减少跨数据中心网络延迟,需要对用户流量进行精准分发。流量在进入数据中心前,按照一定的路由规则,确定好待分发的目标中心,以减少数据中心之间的二次转发。比如,苏宁在 CDN 层进行用户的初次路由,将用户分发到不同的数据中心。 数据中心内部,对服务层设置多种路由策略,比如设置接入层、RPC、DAL 等的路由方式以及业务服务拆分,使得同一个用户所有请求尽量收敛在同一个数据中心,实现流量精准划拨,避免跨机房调用。 请求的收敛设计确保流量按照 Cell 级别划拨到不同的数据中心,并在同一中心封闭收敛,这也是实现多数据中心部署的基础。 5、数据高可用 为了确保数据高可用以及任何一个机房故障都可被接管,所有数据中心都包含全量数据,当主数据中心的变更将会实时同步到各个从数据中心。 数据中心之间延迟相对数据中心内部延迟较大,数据中心之间的同步一般采用异步复制方式。在机房故障等极端情况,将出现少量数据未同步到其它数据中心,针对此类故障场景,在机房恢复后,需要对未同步的数据进行人工修复。 4技术难点 按照多活的架构设计,并结合苏宁的业务特点和 IT 技术现状,需要优先解决相关的技术难点。 1、高可用实现 高可用实现原则 数据中心高可用分成两部分: (1)单数据中心内高可用 集群内部高可用 无状态服务 (比如应用服务器):采用 N+1 方式部署,任何一台故障,流量都可被其它机器所接管。 有状态服务 (比如数据库):采用 2N(一主一从)或 3N(一主两从)方式部署,任何一台故障,在秒级切换到另外一台机器。 (2)多数据中心间高可用 单系统同城高可用:任何一个系统有计划维修或非计划性故障,都可切换到另外一个数据中心 全链路同城高可用:当机房级别故障或维修时,可切换到另外一个机房接管。 全链路异地高可用:当出现地震等特殊场景,异地机房可进行接管,避免同城两个数据中心同时故障等异常场景。 其中机房级别故障切换时间一般在分钟级别。 高可用实现指标 RPO(Recovery Point Object):表示机房级别故障时,未被同步的数据时长。考虑到 MySQL 在特殊情况下复制延迟较大情况下,RPO 设置为分钟级别,正常情况下 RPO 为秒级 RTO(Recovery Target Object):表示机房故障情况下,关键流程或系统切换恢复时间,一般为分钟级别 WRT(Work Recovery Time):表示故障时,由于 RPO 导致的未同步异常数据修复完成时长,一般为小时级别。 高可用实践 服务切换 (1)数据复制拓扑结构 对于分片数据跨机房复制方式主要分成两种: 单向交叉复制:两个机房同一个分库的两个不同集群之间采用主备模式进行复制,仅主集群提供写操作,如上图所示 Cell4 的 LDC-B 做为主集群复制到 LDC-A 备集群, Cell8 的 LDC-A 主集群复制到 LDC-B 的备集群 双向复制:两个机房同一个分库的两个不同集群之间采用主 - 主模式进行复制,两个机房的集群同时提供写操作服务 复制拓扑结构比较 为了确保数据的一致性和避免出错概率以及数据存储分布不规整,苏宁初期采用单向交叉复制拓扑结构。 (2)数据迁移与规整 为了实现按用户分 Cell 分布到不同数据中心,并且苏宁业务形态的多样性以及一些历史遗留问题,比如单表记录过多(超过 1 亿),不利于多数据中心的扩展,为此需要对数据按照一定的规则重新迁移和规整。 对原有数据做快照,然后对快照数据重新规整到新的分库分表。 对原有集群增量数据准实时抽取 Binlog 数据规整到新的集群。 通过 DAL 灰度划拨流量写入到新的集群,直至所有数据切换到新集群。 (3)服务切换 对于分片数据服务,分片服务按照一定规则对 Cell 分组进行切换,确保应用层的服务和数据可以同时切换,避免数据写入异常。 跨数据链路切换 为了实现部分流量全链路划拨到不同的数据中心,以及在数据中心故障时能够快速接管业务,所有多数据中心流程分发和服务调度全部由基础中间件平台完成,无需业务感知数据中心故障或流量划拨,这样整体切换时间会大大缩短,快速恢复业务。从而实现数据中心之间同城高可用以及异地高可用。 具体步骤如下: 接管机房对应的从库提升为主库。 服务写操作切换到新的接管机房。 服务(SLB/RPC/MQ)切换到新的接管机房。 CDN 流量重定向到新的接管机房。 2、灰度部署与上线 为了确保多机房部署时,拓扑结构和配置的变化,不影响到整个业务系统运行,采用灰度部署方案,分以下几个阶段: 基础组件部署:比如 RPC、MQ、WAF、数据库等的部署 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |