经过十几年的高速发展,金融企业的系统架构建设无论是在性能还是复杂度方面都发生了巨大的变化。在探索建设金融企业系统架构的道路上,很多金融企业都不约而同选择了单元化架构。使用单元化设计可以按分行业务数据进行拆分,减少耦合度,并按照区域就近部署业务,提升业务的响应速度。比如银行的代收付业务就可以按照分行所处地域进行单元化拆分,按业务需求使用南北两个数据库集群分别承载业务数据。但单元化设计也给一些全行类的统计查询业务带来不便。业务需要开发专门的归并逻辑,分别从南北两个数据库集群获取数据并进一步处理,逻辑复杂,并行运算速度慢。
单元化拆分带来的全局业务挑战
某银行在实施改造前,代收付系统使用Oracle单机数据库实现分库分表。实现方式是使用2个Oracle实例进行单元拆分,业务应用单元分别对接到这2个数据库实例进行数据处理。2个Oracle实例承载的数据有相同的数据结构,业务数据按分行的维度进行拆分。代收付应用按照分行维度根据路由规则将不同分行的请求分别发送到不同的单元处理。
按照分行维度进行单元化拆分后可以带来增大系统处理能力、缩小故障带来的影响范围等好处,但同时给业务设计也带来挑战。代收付业务中有一些业务涉及到全行数据统计与汇聚。改造前代收付系统使用的方案是由南北单元的全局业务分别进行跨区域、跨库查询,对所查询结果进行最终汇总,如图1所示。
该方案对于全局业务并不友好,需要增加额外的逻辑处理跨数据库访问,包括2个数据源状态的维护、异常处理及跨数据源访问的同步与并发控制。此外跨区域访问不同数据库,事务响应的时延会加长,对业务的可用性也带来挑战。同时,由于业务需要维护2套数据源,并实时根据状态调整逻辑且需要对不同异常情况进行处理,增加了业务运维难度。
金篆数据库GoldenDB全局计算节点助力业务单元化
金篆数据库GoldenDB既可以实现超大数据规模及大并发特点的应用数据承载,也可以适配小规模数据的单元化业务。
金篆数据库GoldenDB主要由计算节点、数据节点、全局事务管理节点以及管理节点等组件组成。计算节点负责SQL的解析、优化、分发,并将最终结果返回给应用。一般情况下,计算节点隶属于一个特定的GoldenDB集群(租户)。DB节点负责SQL的进一步执行并实现数据持久化。全局事务管理器实现分布式事务的全局一致性。管理节点对整个系统进行运维监控。在充分研究了代收付业务单元化的需求基础上,金篆数据库GoldenDB团队开发实现了计算节点的另外一种模式。该种模式下的计算节点不隶属于任何一个数据集群,可以进行跨集群访问,并将多个集群的数据结果进行查询、排序、汇聚等操作,减少业务逻辑的复杂度。此外,计算节点可以就近访问本机房的备机,实现同机房内跨集群读,极大提升了跨集群访问的效率。
在新方案中,跨库(集群)查询可以由金篆数据库GoldenDB内部组件实现,业务应用只关注业务处理逻辑即可。金篆数据库GoldenDB团队对计算节点进行了必要的改造,形成了跨库(集群)查询的方案。
如图2所示,方案由全局计算节点(SCN)对接南北库的计算节点(CN)而成,在相应的计算节点上实现就近读、高可靠、高可用等特点。使用新方案后,应用单元内部的跨库查询逻辑可以将之前的“获取不同集群数据”“对不同数据进行归并处理”“在某个集群数据获取出现意外之后的异常处理”逻辑全部去除,直接对SCN发送跨库查询语句即可,大大降低了业务复杂度,提升了业务性能。方案设计充分考虑系统的高可靠和高可用,每个组件都采用双机热备的设计方案,最大限度保证系统的可靠性。
跨集群全局查询简化业务逻辑
金篆数据库GoldenDB对计算节点进行了功能扩展,将后向链路由单纯与数据节点对接扩展成可以同时与计算节点和数据节点对接。改造后的跨库计算节点(SCN)可以与2个及以上GoldenDB的计算节点(CN)对接,横跨多个集群进行查询。
改造后,应用需要进行跨库全局数据查询时,无需再维护多个数据源,只需直接对接到SCN上,向其发送需要进行跨库查询的SQL语句,即可得到结果。该方案大大简化了全局业务的跨库维护逻辑,使其专注业务处理本身。
全局跨库查询除了支持简单结果汇总外还支持聚合函数、排序、分类、分页等常见聚合操作。
机房内就近查询,缩短业务时延
在代收付的金篆数据库GoldenDB分库部署方案中,南北2个数据库集群采用跨区域交叉互备设计。在跨库查询设计中充分利用本机房内的对端数据库集群的备机,实现机房内就近查询,解决了跨区域查询带来时延较长的问题。
方案中SCN对接南北2个集群的计算节点CN。在对端数据库集群的计算节点上开启了读写分离,并使用了就近读的原则。就近读即读取与计算节点最近的备机的数据,避免了跨机房甚至跨区域读带来的网络时延,大大提升了应用的查询效率。
智能数据源选择,提升业务精确度
在遵循就近读的原则基础上,有时也会带来副作用。就近读一般情况下会读取对端数据库在本机房内的备机。主备复制之间有一定的时延,如果数据库处于业务高峰期,主备时延可能会进一步增大。有的业务对数据的实时性有要求,对于超过一定时间的数据,查询的结果会不准确。
为了解决上述问题,金篆数据库GoldenDB允许业务设定对数据时延的容忍度。如果主备数据时延超过应用的容忍度时延,金篆数据库GoldenDB将舍弃就近读的原则,选择读主数据库,最大限度保证业务的准确性。
随着金融科技及其他领域数字化建设越来越趋向于单元化、集群化,单元化基础设施之间的数据访问或全局数据访问成为亟待解决的问题。GoldenDB的跨集群访问解决方案有效解决了数据库集群间全局数据访问等问题,极大地简化了单元化业务的处理逻辑,提升了数据的访问效率。GoldenDB跨集群全局访问方案在投产的一年多时间内系统运行平稳,实际使用效果符合预期,为代收业务平稳过渡到GoldenDB数据库平台上提供了坚实的技术支撑。