移动中间号系统异地双活架构设计与实现

2023-11-15 09:08:14张玉康
广东通信技术 2023年10期
关键词:话单异地架构

[张玉康]

1 引言

为了保护用户隐私和商业机密,国家交通运输部在2017 年1 月发布了《网络预约出租汽车运营服务规范》,其中规定了加密乘客电话号码等安全措施。为满足这个要求中间号应运而生。中间号产品通过提供临时联系中间号,可以帮助隐藏服务双方真实号码,保护用户隐私和商业机密,提供更加安全和可靠的通信服务。随着时间的推移,中间号产品不断发展壮大,已经覆盖了即时配送、电商、快递、出行等多个行业,每日呼叫量达到了千万级别。业务的飞速发展给系统数据库的高可用性和稳定性带来了挑战。因此,如何设计高可靠且简单的后台服务器架构,是系统稳定发展的必要条件,具有非常重要的研究意义和实践价值。

2 相关工作

传统的数据库备份只能在同一机房内进行数据复制,所有数据都运行在同一机房内,因此可用性得不到确切的保障,同时无法满足异地服务的快速访问,降低了用户体验。一旦一个机房发生故障,所有数据将无法使用,整个中间号业务都会受到影响,可用性极差。高可用性(HA)是系统设计的重要指标之一,指标是指降低系统不能提供服务的时间,即不间断地提供服务。高可用的数据库设计是提升可用性的重要手段。

异地多活架构有3 种模式,分别是存储通用型异地多活、业务通用型异地多活和业务定制型异地多活。其中,业务通用型异地多活和存储通用型异地多活适用于大型公司的业务,设计和开发成本较大。业务定制化异地多活适用于中小型公司,设计和开发成本较小,所以本文采用业务定制化异地多活的模式。

本文介绍了一种基于Canal 实现数据库双活的架构[1~8],该架构以MySQL 数据库为源数据,模拟了MySQL 自带的同步复制功能。它通过读取MySQL 的BINLOG 日志,将BINLOG 发送到目的IP,然后使用adapter 程序在目的机器上解析并将数据备份入库。相比原生的数据库同步架构,该架构具有更高的实时性,并且可以接入监控平台查看数据同步进度的情况。基于Canal 实现数据库双活的架构可以提高数据库备份和恢复的效率和性能,保证系统的高可用性和可靠性。同时,该架构还具有很好的扩展性和定制性,可以根据不同的业务需求进行灵活的配置和调整。

3 异地双活的设计原则

异地双活架构本质上是CAP 理论的CP 方案[9~12],是为了解决分布式一致性问题而设计的。CAP 理论关注的粒度是数据而不是系统,并且需要根据不同业务的数据特点来设计异地多活。双活的目的是为了在发生灾难时,能够快速切换到备份系统,保证业务的正常运行。然而,双活并不是一种万能的解决方案,它也有自己的局限性和挑战。本节将从3 个方面分析双活的设计原则,以及它们对业务的影响。

(1)只保证核心业务[13]。由于不同业务的数据特点不同,无法做到所有数据同步。例如,一些业务的数据量很大,复制成本很高;一些业务的数据变化很频繁,复制延迟很高;一些业务的数据依赖很强,复制逻辑很复杂。因此,需要根据业务的重要性和敏感性,选择合适的双活策略。对于核心业务,可以采用双向复制或主备复制,保证数据的高可用和高一致性;对于非核心业务,可以采用单向复制或异步复制,降低数据的可用性和一致性要求。

(2)只能做到最终一致性[14]。复制过程肯定会有时间延迟,因此需要抛弃一致性幻想。在设计双活架构时,我们需要抛弃一致性幻想,只能做到最终一致性。这意味着,在不同节点上的数据可能会在一定时间内出现不一致的情况,但最终会趋于一致[13]。在实际应用中,可以通过设置合理的时间窗口和冲突解决策略来降低数据不一致的概率。例如,可以采用乐观锁或悲观锁等方式来控制并发访问,以减少数据冲突的可能性。此外,还可以采用一些分布式一致性协议,如PAXOS、Raft 等,来保证数据的一致性。

(3)只能保证绝大部分用户[13]。不要为了0.01%的用户,而影响了99.9%的用户。在设计双活架构时,我们需要权衡不同用户的需求和系统的可用性。不能为了小部分用户而影响到绝大部分用户的使用体验。因此,需要在设计时考虑用户的分布情况和系统的可扩展性,以确保系统能够支持更多的用户和业务需求。例如,可以采用负载均衡和自动扩容等方式来提高系统的可扩展性和容错性。同时,还需要针对不同用户和业务需求,采取不同的容错和恢复策略,以保证系统的高可用性和数据的安全性。

综上所述,异地双活是一种权衡和妥协的方案[15,16],它既要保证业务的高可用性,又要考虑技术的可行性和成本效益。通过遵循以上3 个设计原则,可以在灾难发生时,尽可能地减少业务损失和用户影响。

4 异地双活架构的设计与实现

异地双活的架构为系统提供了可靠的数据服务,下面从双活架构的设计和实现等几方面进行阐述。

4.1 双活架构的设计步骤

双活架构的设计步骤主要包括以下4 个步骤:业务分级、数据分类、数据同步技巧的设计和异常数据的处理[13]。通过以上步骤,可以找到需要同步的中间号业务数据,并极大地降低了同步的复杂度。

4.1.1 业务分级

在设计异地双活架构时,首先需要对业务进行分级。将业务按照某个维度进行优先级排序,优先保证TOP3 异地多活[13]。TOP3 通常是指对企业生产经营具有至关重要作用的业务,如订单、库存、支付等。通过业务分级,可以帮助我们确定哪些业务需要进行双活备份,哪些业务可以采用其他手段进行备份。同时,还可以优先保证核心业务的数据进行双活,以确保系统的持续可用性。

中间号系统主要包括通话模块、短信模块、媒体模块和话单模块。这些模块共同构成了一个完整的中间号系统,实现了电话通信、短信传递和多媒体处理等功能。其中,话单模块作为通话模块、短信模块和媒体模块的最终收集点,对于整个系统的运行至关重要。从访问量和收入来源两个方面来看,话单模块无疑是最为关键的部分。这是因为话单负责记录和整理用户在通话、短信和多媒体模块中产生的各种数据,如通话时长、短信数量、多媒体传输量等。这些数据在一定程度上反映了用户的活跃度和使用习惯,从而为运营商提供了制定合理收费策略和优化服务的重要依据。从核心场景的角度来分析,通话和短信模块同样具有非常重要的地位。作为电话通信和文本通信的基本功能,通话和短信模块直接关系到用户对中间号系统的满意度和忠诚度。因此,保证通话和短信模块的稳定性、高效性和安全性是优化中间号系统的关键。

综上所述,在中间号系统中,通话模块、短信模块和话单模块的数据具有较高的重要性。为了提高系统的运行效率和用户体验,我们需要重点关注这两个模块的数据同步和安全,以实现更加高效和稳定的中间号服务。

4.1.2 数据分类

在确定了需要进行双活备份的业务之后,我们需要对业务的关键数据进行分类[13]。数据分类是根据数据的特点和需求,将数据分成不同的类别,以便于进行同步和备份。可以将数据按照数据修改量、一致性、唯一性、可丢失性、可恢复性等指标进行分类。通过数据分类,可以更好地了解不同数据的特点和需求,为后续的数据同步技术的设计提供参考依据。

根据上述概述,我们的目标数据包括通话、短信和话单数据,其中,话单数据是由短信数据和通话数据生成的,具有可恢复性,可以不考虑异地备份话单数据。数据特点如表1 所示。

表1 数据类型分类

4.1.3 数据同步技巧的设计

数据同步技巧是双活架构中的关键技术之一。在设计数据同步策略时,需要针对不同类型的数据采用相应的同步方法。对于结构化数据,可以采用数据库复制技术,通过主从同步或双主同步的方式实现数据同步。在实施数据同步过程中,需要关注单路复制故障的问题,以确保数据同步的效率和准确性[13]。

根据前述数据特点,我们提出了一种多通道同步设计方案。在这个方案中,北方数据中心设有一个主备集群,南方数据中心也设有一个主备集群。每个集群都包含一个MySQL 主服务器和一个备份服务器。两个IDC(互联网数据中心)之间的主服务器通过Canal 进行双向复制,两个IDC(互联网数据中心)之间的备份服务器也通过Canal 进行双向复制。同时,每个IDC(互联网数据中心)内部的主备服务器之间进行单向复制。由于每个IDC(互联网数据中心)内部之间的MYSQL 数据库是使用自带的复制功能,所以进行双通道复制的时候,会产生数据在一个集群内交叉复制的情况,为了降低复杂度,中间号系统采用单通道+双Canal 的形式进行高可用保障。具体架构如图1 所示。

图1 中间号系统双活架构图

通过双Canal 的同步设计方案,我们可以确保数据在双活架构中的高可用性和一致性。当某个数据中心的主服务器发生故障时,备份服务器可以迅速接管服务,Canal马上读取备份机器的BINLOG 进行同步,从而保证业务的连续性。双向复制技术还可以有效降低数据传输延迟,提高数据同步效率。通过采用数据库复制技术和双Canal的同步设计方案,我们可以有效地实现结构化数据的高效同步,确保业务的高可用性和一致性。在实际应用过程中,我们密切关注单路复制故障等问题,以确保数据同步的稳定性和准确性。

4.1.4 异常数据的处理

在双活架构的实现过程中,可能会遇到一些极端异常情况,例如网络故障、硬件故障以及数据冲突等。尽管在前述章节中,我们已经采用了单通道+双Canal 形式的设计方案以提高系统的可靠性,但仍然可能出现两个Canal同时发生故障的情况。然而,这种情况的出现概率极低,因此可以通过人工干预的方式进行补救[13]。

在应对这类异常情况时,我们采取一些措施以降低客户的损失,例如对当月话单进行打折收费或者当日话单收费减免。虽然这些补救措施可能会导致企业短期内承担较大的成本,但从长远来看,这将有利于维护企业的良好口碑,从而在市场竞争中取得更大的收益。这种策略虽然需要企业在短期内承担一定成本,但在长期来看,有助于提高客户满意度和企业声誉,从而实现更大的收益。

4.2 双活架构的关键技术实现

本节将介绍双活架构中两个常见问题的解决方案。首先,通过选择性同步来减少不必要的网络传输和提高同步效率[17]。其次,为了解决循环复制问题,需要在源码上做两处改动,对同步数据进行过滤和标记。这些改动可以有效地提高同步效率和减少数据的死循环同步,保证双活存储架构的高可用性和容错性,使得原本单向同步的Canal变成可以支撑双向同步的中间件。

4.2.1 有选择的数据同步

首先,Canal 的全量同步和增量同步都是默认开启的。这意味着所有数据更改都会被同步到另一个存储节点,包括无关紧要的数据和不必要的操作。这会导致数据同步的效率低下,同时也会增加网络带宽的压力。因此,我们可以通过选择性同步来解决这个问题。具体来说,可以配置需要同步的数据表,以减少不必要的网络传输和提高同步效率。此外,由于数据库表的数量通常非常庞大而且是重要的,因此对于删除操作的DML 语句和修改数据库结构的DDL 语句,是不允许操作的,尤其是DDL 语句执行期间会锁住整个表,影响业务系统。因此,改进Parser 模块里面的LogEventConvert.parseOneRow 方法代码,只同步新增和修改的数据库操作,可以减少不必要的BINLOG日志传输,提高同步效率。

4.2.2 循环复制问题的解决

循环复制是双活存储架构中常见的问题。循环复制指的是多个存储节点之间相互同步,形成一个环状结构,导致数据的死循环同步。这个问题会导致数据的重复复制,占用大量的带宽。为了解决这个问题,我们需要在源码上做两处改动。首先,在客户端adapter 模块进行入库操作时,在所有SQL 语句执行前后对标识表retl_mark分别进行插入和修改。其次,在客户端adapter 模块的RdbSyncService.sync 方法里增加对retl_mark 表BINLOG进行过滤,避免本IDC(互联网数据中心)的数据重复执行多次,从而避免循环复制的问题。

5 实验结果

在非正式环境中,基于Canal 实现的中间号双活架构成功地进行了海量数据的试验,并打通了南北地域的通话数据和短信数据的限制。在数据同步过程中,南北数据的同步时延通常在100~200 ms 之间。尽管存在一定的时延,但话单数据最终能够完整地同步到目标IDC(互联网数据中心)的数据库,实现了数据的最终一致性。然而,网络波动有时会导致时延变长,达到秒级。为了降低这种额外复杂度,建议将两个IDC(互联网数据中心)机房的距离控制在100 km 以内。这样可以更好地控制网络延迟,提高数据同步的稳定性。

6 结束语

本文采用了基于Canal 的数据库镜像复制技术,提出了一种基于数据特点来设计同步的同步方案,同时对Canal 进行了改良,使它可以进行有条件的数据同步,优化了同步数据对网络的拥塞影响,提升了用户对中间号系统的认可度。该架构的实现基于Canal 的二次改造,成本低廉,同步系统相对简单且可靠,为运营商提供了一种同步数据的方案。

猜你喜欢
话单异地架构
基于FPGA的RNN硬件加速架构
功能架构在电子电气架构开发中的应用和实践
汽车工程(2021年12期)2021-03-08 02:34:30
河北大名话单元音韵母、单字调及双音节非轻声词连调的实验语音学初探
采用大数据技术的移动DPI关联算法探索及实现
电信科学(2017年12期)2018-01-08 05:35:46
LSN DCI EVPN VxLAN组网架构研究及实现
电信科学(2017年6期)2017-07-01 15:45:17
推进医保异地结算 稳字当先
中国卫生(2016年5期)2016-11-12 13:25:42
如何开拓异地市场?
你适不适合异地恋
文苑(2015年10期)2015-10-09 11:21:50
一种基于FPGA+ARM架构的μPMU实现
破除异地结算的地方抵制
中国卫生(2014年5期)2014-11-10 02:11:32