异地多活场景下的数据库方案
方案背景随着云计算的蓬勃发展,越来越多信息系统选择部署在云计算环境下,因此基于云产品为信息系统的服务能力和数据质量提供保障尤为重要。为了防止灾难性的故障如火灾、洪水、地震、区域电力中断或者人为破坏等对信息系统造成不可挽回的破坏,需要构建容灾系统来保障信息系统的可用性和安全性。
2007年,国务院信息化办公室联合银行、电力、民航、铁路、证券等八大重点行业,制定发布了国家标准GB/T20988-2007《信息系统灾难恢复规范》,明确规定了容灾能力的6个等级要求。企业在构建容灾系统时往往会参考国标等级,或者以此作为合规要求。然而,大部分传统容灾方案如同城容灾、同城双活、异地容灾、两地三中心等很难达到国标5-6级要求,同时还存在成本浪费,灾备单元健壮性不足等问题。
异地多活是新一代的容灾解决方案,在保证业务持续高可用的同时还能实现成本优化、地域级水平扩展、持续高可用等能力,本文会着重介绍阿里云主流数据库产品在异地多活场景下的解决方案。
方案架构异地多活从业务视角来看是通过对业务做自顶向下的流量隔离来实现的,按照某一个分流维度对业务流量进行划分,并路由到不同的地域。整个部署架构分多个地域,每个地域称之为一个单元,其中某个单元又承担着整个多活架构的逻辑中心角色,提供一些中心化的服务能力(如sequence_分发,强一致读服务等)。每个单元内的业务架构分为接入层、服务层、数据层:
- 接入层
业务流量通过租户侧DNS解析后按照权重分配到不同单元的接入层,进入接入层后,通过解析请求header/cookie中的分流标,对比自定义的分流规则,判断请求是否归属本单元,若归属本单元则走到本单元的服务层。否则流量需要转发到对端单元,根据不同的内网连通性可以走upstream或304跳转。
- 服务层
服务层部署的是业务应用系统,包括中间件等。如果使用了阿里云的中间件如CSB、RPC框架、MQ等,可以通过相应产品的多活接入能力实现在服务层的流量路由和纠错。针对RPC服务,在多活场景中分为:单元化服务、中心化服务、普通服务三类:
- 单元化服务:每个单元内完全自治的服务,是多活场景下的主要服务类型,会对流量进行单元归属判断,并进行流量纠错。
- 中心化服务:强依赖中心单元的服务,流量都会被转发到中心单元,通过中心单元的服务访问中心单元的数据层。
- 普通服务:不做任何改造的服务,在本单元内进行服务调用,并访问本单元的数据层。
支持多活能力的主要服务类型是单元化服务,但是当业务系统比较复杂时,可能难以实现所有业务模块均按某一个维度划分,或者某些业务服务必须要单点部署以避免分布式部署的一致性问题,此时可由中心化服务和普通服务提供相应能力支持。
- 数据层
数据层解决数据库跨地域的部署与同步问题,并在灾难发生时对流量切换动作提供相应的数据质量保护策略。针对上层业务不同的服务类型提供UNIT和COPY两种数据同步策略:
UNIT类型:每个单元部署独立的数据库系统,单元之间通过DTS进行数据【双向】实时同步,保持每个单元都有全量数据,每个单元均可进行读写操作,读写流量会根据业务定制的分流策略进行单元写保护,这种同步策略用于支持服务层的单元化服务类型,是多活场景的核心同步策略。
COPY类型:每个单元部署独立的数据库系统,单元之间通过DTS进行数据【单向】实时同步,保持每个单元都有全量数据,中心单元可进行读写,非中心单元只提供读服务。这种同步策略用于支持中心化服务和普通服务,中心化服务路由回中心执行,普通服务可在单元内进行读。
- 容灾能力要求高
异地多活可以达到国标6级的容灾能力,适合对容灾方面有较高要求的业务、业务流量比较敏感的业务或业务的某些核心系统。
- 流量要求精细化管理
异地多活支持多种流量管理策略,适合对流量管理有复杂需求的业务如按地域就近接入,按用户信息分配指定数据中心等。
- 业务快速发展
异地多活实现业务按照单元级别(数据中心级别)实施水平扩展,业务定义好一个单元的服务部署配比后,可以以此为镜像快速部署多个分布全国的单元,实现容量快速扩充。
- 业务读多写少
读多写少业务可以从业务行为上天然的规避数据异步复制的各类问题,并且业务接入多活的改造成本也较低,是比较适合实施异地多活的业务场景。
方案价值
- 业务即容灾
传统异地灾备或两地三中心的异地灾备中心常态不提供服务,当发生地域级灾难时难以保证异地灾备中心的可用性,存在切换成功率低的问题,异地多活架构下各个地域数据中心不区分角色,全部常态承载业务流量,时刻保证业务系统健壮,各个数据中心既是业务体系也是容灾系统。
- 业务连续性保障
异地多活架构下各个数据中心常态承接业务流量,故障发生时只需调拨入口流量即可实现容灾切换,实现分钟级的容灾切换。同时随着参与多活建设的数据中心数量增加,参与调拨流量的比例会相应减少,未参与调拨的业务流量可以实现对容灾切换的“0”感知。
- 业务高速发展支撑
业务高速发展,受限于单个地域的有限资源,尤其是数据层存在单点性能瓶颈,除异地多活以外的全部容灾架构都只能在主生产中心执行写操作。地域多活实现业务级的流量闭环,各个数据中心均可读写,具备水平扩展能力以及跨地域的快速扩建能力。
- 流量有效隔离
异地多活本质上是提供了一种自顶向下的流量隔离能力,业务具备在数据中心级别完全隔离的能力,各个数据中心承载的流量大小可灵活调配,在最小隔离数据中心内(例如承载1%流量),业务可灵活进行风险可控的技术演进,例如基础设施升级、新技术验证等。
- 成本有效控制
在考虑单个地域发生地域级灾难的场景下,不论两地三中心还是异地灾备都需要在灾备中心部署可承载100%流量的系统资源,加上生产中心即达到200%的成本冗余。异地多活通过跨城多数据中心部署,有效分摊各个数据中心成本,实现成本小于200%冗余。
成功案例之联通新客服
案例背景联通新客服系统承担着联通全国的客服业务,对持续高可用能力有极高要求,同时也是联通向全站高可用演进的起点,其业务特点以TP业务为主。
案例架构客户基于此方案,整合RDS、PolarDB-X 1.0、DTS、MSHA产品能力,实现了整个新客服系统7个业务中心的多活能力。
- RDS、PolarDB-X 1.0承载业务数据并对接多活管控系统。
- DTS实现数据的跨城实时同步和状态上报。
- MSHA实现多活流量管控和容灾切换动作。
- 联通新客服系统的接入中心、外呼中心、业务支撑等7个业务实现按地域多活分流。
- 实现多次容灾演练,对多个省份进行切流,秒级完成切换,数据0丢失。
- 客户部署了两单元,常态两个单元均承载业务流量,充分利用两单元的资源。