作者:京东物流 王运成

一、概述

纯配时效服务作为物流下单环节中计算时效的重要组成部分,直接决定了下单的成功与否。其性能与稳定性至关重要,因为它们直接影响整个物流下单系统的运行效率及客户满意度。一个高效且稳定的纯配时效服务能够确保预计送达时间准确无误地展示给用户,从而提升客户体验和信任度。反之,若纯配时效服务出现故障或延迟,可能会导致订单处理延误,甚至影响客户的业务运营。因此,在设计和维护纯配时效服务时,必须确保其具备高可靠性和快速响应能力,以应对各种突发情况,确保物流链条的顺畅运行。

二、Redis集群模式

为了确保系统的高性能运行,我们摒弃了原先直接从数据库读取数据的模式。取而代之的是,我们将所有数据同步至Redis中,从而使得应用层能够直接从Redis中获取所需数据。这一改进不仅显著提升了数据读取速度,还有效减轻了数据库的负担,使整个系统更加稳定和高效。通过这种方式,我们能够更好地应对高并发访问,确保用户在使用过程中获得流畅的体验。此外,Redis的内存存储特性进一步提升了数据读取速度,增强了系统的响应能力。

纯配核心数据读取示意图

在这里插入图片描述



三、双Redis集群设计

为了满足容灾需求,应用层采用了有孚和中云信的双机房模式。此种模式确保在一个机房发生故障时,另一个机房能够迅速接管业务,从而保障服务的连续性和稳定性。同样地,为了确保数据的一致性和高可用性,Redis亦需设计为双集群模式。通过在有孚和中云信两地部署Redis集群,可以有效分散风险,即使其中一个集群出现故障,另一个集群仍能正常运行,从而保证系统的整体性能和可靠性。此外,双集群模式还有助于减少正常情况下的跨机房问题,对提升性能亦有裨益。另外还需通过数据同步机制,确保两个集群之间的数据一致性,进一步增强系统的容灾能力和数据安全性。

双Redis集群设计示意图

在这里插入图片描述

四、双集群设计应对场景

由整体架构设计来说,应用程序依据Redis的数据分离为读写两个部分:JSF接口应用负责数据读取,而数据同步应用则负责数据写入。读写操作分别由这两部分独立控制。

1.JSF接口应用读取场景设计

1)同机房数据访问控制

Redis数据读取层 -> 同机房选择 (有孚机房访问有孚机房Redis集群、中云信机房访问中云信Redis集群)

2)数据访问故障重试控制

Redis数据读取层 -> 同机房选择 -> 数据故障重试(当数据访问失败,自动进行重试,或换机房访问)

3)DUCC人为控制

Redis数据读取层 -> 同机房选择 -> 数据故障重试 -> DUCC控制(通过DUCC由开发人员强制控制集群选择,应对应急故障处理)

2.数据同步应用写入场景设计

1)多场景数据加载设计

全量数据 (确保数据加载完整性)

增量数据(确保数据加载及时性)

指定数据(应对异常数据丢失,快速同步)

2)数据双写控制

Redis数据写入层 -> redis双写控制(对带写入数据进行双redis集群数据同步)

3)数据写入异常处理控制

Redis数据写入层 -> redis双写控制 -> 异常重试监控(对写入失败数据进行重试、排除偶然网络故障导致的失败,如果Redis集群故障,监控报警通知研发人员介入处理)

4)DUCC人为控制

Redis数据写入层 -> -> redis双写控制 -> 异常重试监控 -> DUCC控制(通过DUCC由开发人员强制控制集群选择,应对应急故障处理)

五、具体场景举例

1.当中云信机房偶发短时网络故障

1)JSF接口应用 -> Redis数据读取层 -> 同机房选择 -> 数据故障重试 进行数据重试读取(同机房重试或跨机房重试)数据及时读取

2)数据同步应用 -> Redis数据写入层 -> redis双写控制 -> 异常重试监控 进行数据写入重试,数据正常写入 (Redis双集群 数据一致性不受影响)

2.当中云信机房长时网络或服务故障
1)JSF接口应用 -> Redis数据读取层 -> 同机房选择 -> 数据故障重试 进行数据重试读取(同机房重试或跨机房重试)-> DUCC控制层(强制指定为单读 有孚Redis集群)

2)数据同步应用 -> Redis数据写入层 -> redis双写控制 -> 异常重试监控 (反复重试失败报警通知 研发介入)-> DUCC控制层 (强制指定为单写 有孚Redis集群)

3)中云信Redis集群故障恢复

4)数据同步应用 -> DUCC控制(恢复双集群写入) -> 触发 全量数据 同步 -> 执行完成

5)JSF接口应用 -> DUCC控制(恢复双集群读取)

附录

数据同步简介

纯配时效基础数据的设计采用了软删除机制,这是一种更为灵活和安全的数据管理方式。具体来说,当数据被标记为删除时,实际上只是进行了逻辑上的删除,而不是直接从数据库中物理删除。这种设计的好处在于,如果在删除操作后发现误删或需要恢复数据,可以及时找回,避免了数据的永久丢失。逻辑删除后的数据将在15天后进行物理删除,也就是所谓的结转。这15天的缓冲期为数据恢复提供了充足的时间窗口,同时也确保了系统的数据清理工作能够有序进行。通过这种方式,系统能够在保证数据安全性和完整性的同时,有效地管理数据生命周期。

数据同步设计示意图

在这里插入图片描述


京东云开发者
3.4k 声望5.4k 粉丝

京东云开发者(Developer of JD Technology)是京东云旗下为AI、云计算、IoT等相关领域开发者提供技术分享交流的平台。