多活容灾致力于帮助客户构建多活容灾架构。架构上通常将业务系统自上而下分为接入层、应用层和数据层三层。配合产品提供的管控和数据面组件,实现多活架构的创建和管控。
MSHA产品架构图
控制台
控制台是用户侧控制台入口,提供MSFE、HSF、Dubbo、MQ、RDS和DRDS等各类技术架构下的容灾配置及容灾切换。
业务LDC定义与多活实例创建。
接入层、应用层和数据层的各类技术架构容灾配置。
多活架构下的全栈监控。
多活架构下的容灾场景管理与切流。
接入层
接入层是机房的流量入口,常见实现是流量网关。MSHA当前提供一个基于Tengine的流量网关实现,简称MSFE,需要在租户侧ECS上搭建集群,其他流量网关产品正在计划中支持。接入层功能可以概括为以下几点:
机房级流量路由。多活流量必须经过接入层,以便在故障发生时,通过接入层切换入口流量。
比例分流:接入层支持按比例将流量分流到机房。特殊场景下,可以将机房流量切零,从而实现故障情况下的流量切换。
精准路由:接入层支持根据HTTP请求Header/Cookie/Query String Parameters中携带的路由标识,以及配置好的路由规则名单,将流量路由到对应的机房。
由于DNS域名解析的随机性,接入层的路由纠错可以保证准确性与实效性。
应用级流量路由:支持按照不同的域名与URI组合,将流量分流到对应的后端应用。
应用层
应用层是对应用服务的抽象概括,包括微服务、消息、定时任务。
微服务,常见的包括EDAS-HSF服务、Dubbo服务、SpringCloud服务,MSHA提供以下核心能力。
跨云服务同步:MshaSync服务端组件支持对多云的注册中心进行服务信息同步。支持的注册中心有Nacos、ZK。针对Eureka,建议客户迁移到Nacos。
同机房优先路由:支持Consumer优先调用同机房内的Provider,从而减少跨机房调用,同时还能将故障的爆炸半径控制在一个机房内。
故障隔离:当局部Provider出现异常时,支持将异常的Provider进行故障隔离,保证所有机房内的Consumer均不会调用到异常的Provider,实现微服务流量的故障逃逸。
单元化服务寻址:针对异地多活单元化架构,支持按照单元化规则寻址调用Provider。
消息,包括云产品和开源RocketMQ,MSHA提供以下核心能力。
消息同步:支持消息以Topic粒度的跨地域双向同步。
故障隔离:切零单元格内的SUB端不再进行消息的消费,从而实现消费流量的快速逃逸。
消息按需消费:在消息同步的情况下每个单元有两份消息,在异地应用双活架构、异地双活单元化架构下按一定规则消费消息。
定时任务,包括云消息SchedulerX和开源XXL-Job等,MSHA提供以下核心能力。
故障隔离。切零单元格内的定时任务客户端不再运行定时任务,从而实现定时任务的快速逃逸。
数据层
数据层是数据库服务的抽象概括,针对关系型数据库,包括RDS、DRDS(PolarDB-X1.0)、PolarDB-X2.0、PolarDB O、自建MySQL、自建PostgreSQL等,MSHA提供以下核心能力。
数据单向/双向同步:借助DTS等产品能力进行数据同步,特别是对于单向同步链路,支持数据源主备切换过程中的同步链路翻转。
读写分离/读写不分离:读写分离,写主云读本地。读写不分离,读写均在主云。
主备切换:单云故障,支持数据库跨云主备切换,MshaSDK能够将应用原本连接A云的数据源,切换为连接到B云的数据源。切换过程中还具备禁写保护能力,避免产生数据脏写等数据质量问题。
数据双活:异地双活单元化架构下,支持表级别的数据类型定义和禁写控制,避免双写场景下的数据质量问题。