金石系统 | 多中心高可用的交易系统

2024-03-09 17:50

本文主要是介绍金石系统 | 多中心高可用的交易系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击「京东金融技术说」可快速关注


「摘要」互联网应用多以SOA、微服务架构,多实例多机房部署方案为主;此架

构基本能够满足大部分应用场景,也是现在大部分公司及组织机构最主要的系统架构及部署方案。但是,身处崇尚创新、追求卓越的团队氛围下,对于京东支付用户体验的的无限渴望;以多中心高可用为核心架构思想的交易系统应运而生,后面我们称之为金石系统

金石系统的主导思想是尽量不强信赖于任何系统,包括数据库、缓存等存储介质;同时对于机房的可用性也做了全面的容灾策略,实现了交易系统的多中心架构。另外,主线流程非常简洁,本着能异步就异步的基本思想,尽量降低系统运行风险,提升系统的自愈能力,作为未来5年的核心底层服务,为整个京东支付保驾护航。

金石系统支持着网银支付机构的全部交易;囊括快捷、网关、白条、小金库、钱包余额、线下充值、预付费卡、支付营销等支付工具;支撑着收单、代收、会员、预授权、退款等交易产品;推动着账务、清结算、交易记录、企业站等业务系统的正常扭转;是支付链路中非常重要的一环;承上启下,记载了支付过程中产生的支付数据,作为支付的主要凭证;支撑着每年的618及双11大促;对商城、金融、全球购、外单等不同商业主体提供高可用的底层支付服务。

---支付核心研发部出品

项目背景


随着业务体量的越来越大,每分钟上万、每天上千万的支付请求,瞬时峰值几十万的支付请求;现有的系统已经没有办法支撑未来几年的日常需求及大促压力;再加上老旧的架构体系,极其不稳定的中间件(MSP),非常昂贵的数据库(Oracle),与集团脱节的RPC技术(DUBBO),强依赖数据库,单中心的系统架构等问题,使得系统的全面架构升级迫在眉睫。

因此,重新搭建一套高可用多中心架构的交易系统迫在眉睫。

  • 2016年11月14日:金石系统项目正式启动。初步搭建一个解决方案突击小组,经过半个月先后10几次的头脑风暴,最终初步拟定出一套完整的多中心技术架构的实现思想。

  • 2016年11月25日:开发小组正式成立。搭建了一个5.5人(4全职+3兼职)开发团队开始突击攻坚。

  • 2017年1月18日:全面上线。经过小伙伴们2个月的并肩作战,金石系统于2017年1月18日全面上线,线上不断测试优化,找各个相关系统进行最后的线上联调测试。

  • 2017年2月15日:正式开始线上切量,继续观察业务的运行情况,不断完善,不断优化。

  • 2017年3月31日:京东集团内部流量于全量切完。

短短的4个月从无到有,再到全量切完集团内单,整个流程进行的非常顺利,没有出现任何重大事故,在此非常感谢小伙伴们的辛苦付出,你们是最棒的。

基本架构思想

1、取消存储介质的强依赖

数据库是数据落地的主要存储介质,也是业务正常流转非常重要的一环;往往出现问题就是非常致命的,甚至短时间内都无法解决。因此,取消数据库的强依赖是高可用系统非常重要的一步,尽量保证数据库出问题时,业务依然可以正常运行。

线上业务对系统高性能的诉求越来越大,缓存被很多扛量系统所采纳,一旦缓存挂掉,全部打到数据库上,往往是灾难性的。因此,核心业务去掉单一缓存的强依赖,增添一套备用缓存是相当有必要的。

取消存储介质强依赖的主要方案如下:

(1)      接入JIMDB/R2M双备份缓存,将查询尽量打到缓存上;

(2)      接入JMQ,当数据库入库失败时,进行数据重试回写;

(3)      接入MQSender,对JMQ服务进行容灾,尽量保证异步消息的高可用性。

 

2、UUID本地化

很多业务场景都需要唯一的业务单号,通用的方式是采用数据库序列进行生成,此方式强依赖数据库,数据库故障将是致命的(本人亲身经历过,非常深刻)。

UUID服务架构升级过好几版;从集中性强依赖数据库方式;到集中式不强依赖数据库方式;最终变身为不强依赖任何服务,完全本地化jar包方式生成;完全经受住京东618、双11大促的考验,在部门内部广泛推广,得到大家一致的好评。

主要实现原理如下:

(1)      实例首次启动时,连接注册中心获取实例号,并保存到实例所在机器本地,以后不再获取;

(2)      单号加入时间戳,时间精度精确到秒,秒级支持并发量位数可以动态配置;达到单机单号不重复,加上实例号达到集群不重复;

(3)      这样UUID的生成将完全在本地JVM内存中生成,保证最优的性能及稳定性。

3、缩短业务主链路

随着SOA架构、微服务被各大企业集团采纳,一个业务往往不再是一个简单的系统,整个链路上存在着越来越多的分支流程;但是肯定不是所有的环节都是必须的,也不是所有的节点都是必须实时处理的,更不是每个分支都是必须成功的,短时间降级是可以接受的。

因此,合理的把控及缩短业务主链路流程往往能事半功倍,甚至是一个高可用架构的必备思想,只有做到主链路尽可能的短,才能最大限度的保证系统的高可用性,关键时刻可以将性能较低、服务异常的非主链路服务降级,尽量保证业务主链路的正常运行。同时,主链路越短,业务耗时越短,系统性能越高,运行越平稳。

多中心架构

随着互联网化的不断深入,各行各业对于系统的高可用性的要求也是越来越高;任何一个系统在开放的互联网大环境下短暂停止服务,负面影响的代价越来越大,因此系统的高可用性也已经成为企业硬实力的一个体现。系统的高可用需要很多方面来保证,不是一个简简单单的系统就能搞定的,也不是堆硬件就可以实现的。多中心架构是实现高可用系统非常重要的一种方案;系统的多中心主要是DB的多中心,下面咱们对金石系统的多中心进行详细的分析与探讨。

1、多中心架构基本思想

(1)   在三个不同的机房,分别部署一套集群,每个集群都只承载1/3的线上流量;

(2)   三个集群都承载线上流量,没有任何一个机房平时是闲置的,也没有任何一个机房拥有全部交易数据;

(3)   每个集群都有一套同机房1主1从数据库集群,异机房还有一个非常重要的灾备从库,最终每个机房都是1主2从的数据库集群;

(4)   平时灾备库都只是有连接,没有数据库读写权限,只有当机房出现故障时,才将灾备库的读写权限打开,同时将备用机房打开,这样就可以将故障机房的流量打到灾备机房去;最终达到不影响线上业务的终极目标。

2、机房故障切换 – A机房故障

(1)   当A机房故障时,需要DBA对于A机房的数据库集群做主从切换,将主库切到灾备机房(B机房)的A3从库上;

(2)   再将A机房配置为线下状态,此时A机房的流量将自动打到灾备机房B机房,此时B机房将承载整个流量2/3的量;

(3)   本属于B机房的流量还会打到B机房对应的主库上;

(4)   本属于A机房的流量会打到B机房中A机房的灾备A3库上;

(5)   当A机房好了后,依赖数据库的主从同步,将A3库中的数据同步到A机房的两个数据库中;

(6)   再找DBA对于A机房的数据库集群做主从切换,将主库切回到A机房的主库上;

(7)   最后将A集群上线,此时A机房的流量将自动打回到A机房;

(8)   这样一次A机房的故障容灾切换就完成了,在切换的过程中,跨集群的共用缓存将起到至关重要的左右,将保证整个切换过程中尽量达到无损。

3、机房故障切换 – A/B机房同时故障

(1)   当A/B机房同时故障时,需要DBA对于B机房的数据库集群做主从切换,将主库切到灾备机房(C机房)的B3从库上;

(2)   再将A/B机房同时配置为下线状态,此时A/B机房的流量将自动打到灾备机房C机房,此时C机房将承载全部业务流量;

(3)   本属于C机房的流量还会打到C机房对应的主库上;

(4)   本属于B机房的流量会打到C机房中B机房的灾备B3库上;

(5)   本属于A机房的流量会打到C机房对应主库的一套Other表上,同时会发出一条同步数据JMQ消息,来保证当A机房好了后自动将数据同步到A集群数据库中;

(6)   后续操作跟单纯的A机房故障一致,不再赘述。

总结

金石系统圆满的完成了它的首次618大促,高效稳定的支撑着整个618大促。同时,通过了线上的机房故障演练,无损的支撑着整个京东支付各个业务;也是京东金融首例多中心架构应用,此项目的战略意义非常重大,希望日后可以将此项目的架构思想在其他系统上继续完善壮大。最后,发自肺腑滴...希望京东支付越来越好,希望京东金融日趋强大,希望我们的大京东光明无限。

---支付核心研发部出品

京东金融技术说

   ▼▼▼     

原创·实用·技术·专业

不只一技之长

我有N技在手

你看,我写,共成长!

这篇关于金石系统 | 多中心高可用的交易系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791468

相关文章

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听