摘要:招商银行在系统转型过程中,勇于创新,集中力量攻克技术难点,不断提高科技能力,推动业务快速迭代,高水平持续交付优质产品和服务。本文介绍他们通过研发读写分离技术架构解决异构云平台数据复制难题。该成果大幅降低成本,提升系统安全性和运行效能。
作者:
田永江、林耘毅、周伟、杨维强、张多子
徐 鑫、王 龙、方国栋
单位:招商银行总行信息技术部
01
背景
摩尔定律告诉我们,在价格不变的前提下,硬件性能随时间呈现出线性增长的趋势。然而近些年来芯片制造工艺已经越来越接近极限,摩尔定律的有效性不断受到质疑。
即使未来摩尔定律仍然能够维持有效,但其线性增长的性能已远远无法满足数据指数级增长的需求,无论是传统的金融行业还是新兴的互联网行业,大数据的爆发都对底层的计算资源提出更高的需求。
如何在现有的技术制约下满足爆炸式的数据需求呢?我们认为架构优化才是解决这一矛盾的根本手段。
02
招商银行架构优化方法简介
招商银行在数据架构优化方面进行了诸多尝试,也取得了显著的成果。所谓架构优化,是指在应用服务整体架构设计上,避免出现单点故障,以灵活可控的策略应对资源瓶颈和水平扩展的要求。下面就简单介绍几种有效而常用的架构优化方法。
(一)数据放通
数据放通架构的设计要梳理关键路径上所有的数据库操作,区分出核心操作和非核心操作;非核心操作不强依赖数据库,记录到本地消息队列、缓存或者日志文件中即成功,后台以异步方式延迟写入数据库;核心操作需要设计不强依赖数据库的备选路径,当数据库异常时可以快速切换到备选路径继续工作。
(二)无状态冗余
无状态冗余是指在应急的时候,通过预先创建数据库或表快速接管“无状态”的应用,达到快速恢复业务的目的。关键路径中含有无状态数据,应急时可以快速切换至冗余库或者快速补入所需数据进行关键业务恢复。
(三)分库
分库分表指的是在系统设计的过程中,根据数据和应用的特点,把原本存储于一个库的数据分块存储到多个库上或把原本存储于一个表的数据分块存储到多个表上,即“化整为零”。通过实施分库分表设计,可以提高系统横向扩展能力、提高数据库性能、提高可用性等目标。
垂直切分,按照业务功能模块、关系密切程度划分出来,部署到不同的库上,每个库的表结构不同。
水平切分,按照数据分布规则进行划分,部署到不同的库上,每个库具备相同的表结构。
(四)读写分离
读写分离指的是在系统设计的过程中,通过数据同步技术将数据库复制成多份数据副本,其中一份数据可读写,其他副本只读;并根据数据和应用的特点,将请求分为实时读写以及非实时读两部分,即“一写多读”。通过实施读写分离设计,可以达到多种设计目的,包括提高读取性能、提高系统扩展能力、提高可用性、提高数据就近访问能力、提高数据安全性等。
本文所要详细讨论的,是上述架构优化方法中的读写分离方法。
03
业务场景
架构优化策略不是越通用越好,也不是越昂贵越好,而是要结合具体的业务特点,采用最合适的方法。对于读写分离架构适用的场景,可以明确的定义如下:
(一)读多写少,通常写操作占比不超过20%,写操作占比越少,此架构方法越适用;
(二)读交易失败会导致生产P4及以上事件的;
(三)读库采用最终一致性,应用可接受异步复制数据。
若能满足上述业务场景,读写分离架构将会以最小的代价实现最大的收益。
04
读写分离架构
读写分离架构可以非常容易的提升系统水平扩展能力,使系统平滑的扩容。
系统通常有两种扩容方式:垂直扩容(Scale Up)与水平扩容(Scale Out)。垂直扩容即增加硬件的CPU、内存、磁盘等资源的数量与质量,或者直接更换型号更高、性能更好、同时价格也更昂贵的硬件;水平扩容即保持现有的硬件系统不变,通过增加新的服务器的方式,多台服务器构成一个集群,达到提升性能的目的。
下图展示了两种扩容方式的比较
如图所示,Scale Up的扩容方式不仅成本较高,而且存在上限,所以在扩容时我们首选Scale Out的水平扩容方式,即通过较多的服务器组成服务集群,多节点协作,共同完成对外的数据库服务。在水平扩容方案中,读写分离技术是成本最低、效率最高的,同时也是最安全可靠的一种轻量级扩容方案,其实现原理是:所有的数据库增、删、改操作都集中在一台服务器上完成,确保数据的一致性,同时数据以异步或者接近同步的方式传输到集群内的其他服务器,所有的读操作均在其他服务器上完成。
读写分离架构的核心是跨平台的数据复制技术。招商银行读写分离项目基于我行数据中心自行研发的数据库复制软件,其核心功能是数据复制,即从主数据库上捕获数据变化,并快速的将数据变化写到一个或多个从库中,同时在数据复制的吞吐量和延时上要满足业务系统的需要。在核心功能之外,复制软件还要求能支持以下非功能性需求来满足实际运营的需要:
实现对复制数据的实时比对,确保数据复制的准确性;
实现复制软件集中监控和管理的功能,监控和展示复制的拓扑结构、状态、速度、延迟和对比进度等;
实现复制软件的自动化部署以及数据初始化功能,做到一键复制搭建;
复制软件需要有很好的健壮性和可用性,异常退出能够自动重启,并且可以通过操作系统高可用集群来实现切换;
完成关键操作的微服务化,包括安装、监控、起动和停止等,实现自动化运维。
(一)读写分离方案具有以下的优势:
1、成本优势
读写分离方案的实际意义在于,通过将多台中小型服务器组成集群,实现大型服务器的功能与性能,但成本比大型服务器低得多。与此同时,水平扩容方式能够在采购新服务器的同时保留原有的服务器,避免了替换服务器带来的资源浪费。
2、性能优势
对于读写比较高的应用系统,采用读写分离往往能带来线性的性能提升,例如读写比在8:2左右的系统,集群中的主库只需要保留20%的运算能力处理写操作,而将剩下的80%的负载全部分摊到辅库上,从而通过5台服务器的集群系统达到原来单台服务器5倍的运算能力。
3、附加成本小
相比于分布式数据库水平扩展方案,读写分离带来的额外开销极小:无需特殊的硬件设备,只需要普通的网络即可实现;在应用层面实现读写分离转发,无需集中的自动路由功能;集群内各节点相对独立,不存在仲裁、脑裂等常见的集群故障;没有采用复杂的架构,因此运维过程比较方便。
4、架构简单
在IT基础架构越来越复杂的今天,简单的架构往往能够带来高效与实用的效果。读写分离是所有水平扩展方案中架构最简洁清晰的,运维人员无需额外的技能就可以对系统完全掌握,在出现故障时也可以用最快的速度进行处理。
5、数据安全性与高可用性
读写分离方案可以支持同时复制多个从库,因此同一个数据库实际存储了多份数据,可以实现高可用切换、实时备份、异地容灾等多种数据安全性与高可用机制,无需额外配置复杂的高可用架构。
6、集群跨平台功能
读写分离方案在逻辑层面实现数据复制,因此能够实现跨硬件、跨操作系统、跨数据库版本的集群架构,比如主数据库是运行在IBM Power服务器上的DB2 10.5,辅库可以是运行在X86服务器上DB2 9.7,对集群中的操作系统也没有一致性的要求,这一特性极大地拓展了数据库集群的概念,在X86服务器与云计算不断普及的背景下,提供了传统小机与X86服务器的结合机制。
7、便捷的扩展性
如果需要增加或删除节点,读写分离方案不需要对当前的集群架构做任何调整,可以随时增节点,也可以随时删除多余的节点,整个集群能够实现动态的扩展与收缩,对于负载量变化较大的系统,比如双十一抢购等业务场景,可以很好地解决临时性扩容问题。
(二)负载均衡与高可用是核心的收益:
负载均衡是读写分离架构的主要目的。如前所述,摩尔定律限制了硬件的无限垂直扩展能力,且垂直扩展的成本也远高于水平扩展。读写分离以一种最直接且成本最低的方式,实现了水平扩展,既直接对增量数据进行快速同步复制,在可接受的延迟范围内,将数据变化分发到所有节点。相比于分布式数据库(如Oracle RAC),这一扩展方式所付出的代价几乎可以忽略不计,且几乎没有副作用。
高可用方面的收益可以说是读写分离架构的副产品,由于数据的多份拷贝,天然具备了高可用性,并且这一高可用性是基于多副本的高可用,能够应对硬件故障、软件故障、站点级故障等问题。
05
保障策略
当前主流数据复制产品的另一大弊端就是缺少数据校验比对的功能,只负责机械化的数据复制,完全无法处理复制过程中的数据丢失,甚至完全无法感知数据的丢失。这一问题在很多行业都出现过,甚至给客户造成了巨大的经济损失。我行数据复制产品,具有全面的数据比对功能,可以做到实时发现、增量发现、全量发现复制过程中产生的错误。
(一)实时比对
实时比对是数据正确性校验的第一道关卡。通过对数据库底层机理的研究,并结合当前国际上先进的数据流技术,将数据按照时间进行序列化,以流处理的方式进行实时的数据比对,犹如在湍急的河流当中安装了流量监测装置,任何微小的流量变化波动都能够被及时的发现。对于比对出来的可疑数据,在通过唯一索引技术进行反向追踪与版本对比,能够100%定位到问题的根因,然后及时进行自动化修复。实时比对技术的先进性不仅体现在问题发现的及时性,还体现在问题的自动化修复上,全过程无需人工介入,甚至能够做到用户无感知。相较于其他产品的全人工化的问题定位和修复,我行实时比对功能在功能和性能上已经遥遥领先。
实时比对应该能够检查如下错误:
INSERT/UPDATE复制错误导致目标记录与原纪录不一致;
INSERT/UPDATE复制遗漏导致目标记录没有插入或更新;
在比对时间点之前目标数据库记录被人为修改;
DELETE漏复制导致目标记录没有被删除。
对于实时比对检查出来的数据复制错误,要及时发送到数据库统一告警平台,并提供自动和人工两种修复机制。
(二)增量比对
增量比对功能是在一定的延迟时间内(通常在小时级)进行的二次比对,以实现更加可靠的数据一致性。该功能使用了独立于实时比对的数据来源,从另外一个维度进行数据校验,双管齐下的方式确保数据的准确与可靠。增量比对具有一定的延迟性,如果有数据不一致的情况发生(数据复制功能是完全不会产生数据丢失与数据错误的,这种情况多数都是由于外部原因产生的,比如数据库本身的故障或人为的修改了数据等),该功能将会在一定的延迟时间内给出警告。虽然增量比对的实时性不高,但这一点恰是设计人员的匠心独具,正是因为有了这一段延迟时间,才能够跟实时比对形成互为补充的全效机制,无论是实时的数据流抖动,还是延迟的数据被篡改,均能滴水不漏的被发现并修复。
(三)全量比对
完成实时比对与增量比对的情况下,已经基本能够覆盖所有的数据不一致场景。但由于数据的可靠性是如此的重要,以至于软件的设计人员在此基础之上又增加了第三层保障:数据全量比对功能。该功能以哈希算法为主要技术手段,通过定期对数据进行全面的比较,进一步确保数据的一致性,任何微小的变动均能够被发现。
(四)状态检查机制
读写分离架构是一套松耦合的集群系统,它对集群的仲裁功能要求不高,可以通过简单的数据库状态检查机制实现。在数据复制过程中,我们可以处理各种数据库异常及场景异常,并对各种异常场景的状态进行红旗-白旗的标记处理,使应用系统能够通过简单的状态位进行有效地仲裁。
06
平台化
传统复制软件针对每一套系统需要单独安装软件、配置环境、数据初始化、监控运维等,不仅对运维人员的技能要求极为严格,而且人力成本极高。以我行为例,一共有上千套数据库支撑着全行的业务,其中大部分都有数据复制的要求,传统复制软件的实施和运维成本成为企业每年IT支出的很大负担。针对这一问题,招商银行DRaaS(Database Repliation as a Service)云平台在设计时采用了最先进的云计算理念与技术,将其与复制软件的管理进行了有机的结合,实现了集中管理、一键搭建、可视化监控、自动运维的数据复制PaaS云平台。
一键部署:基于基础架构云平台,结合数据复制的管理功能,形成了一键搭建的初始化功能,使运维人员告别了装机、建库、建表、导数、配置、启动等一系列的复杂操作,不仅降低了运维成本,而且还能使数据复制环境标准化,防止由于个人疏忽导致的配置错误。
集中的可视化监控:统一的集中管理监控平台,能够以可视化的方式展现数据复制的状态、延迟情况、数据比对结果等,避免了传统的分散式单一监控。
自动运维:数据复制软件能够自动处理绝大多数异常情况,具有自动修复、自动补数、自动追平等功能,无需人工干预。即使需要人工操作,也可以在可视化平台上进行一键操作。
服务API:云平台提供的所有功能均可以通过调用平台提供的Web服务API来完成,因此应用开发人员可以在自己的应用里通过调用DRaaS云平台提供的API来使用和管理复制服务,由此带来的自动化和灵活性极大地降低了使用门槛,使DRaaS云平台可以在更多地应用场景中发挥作用。
07
效果
在读写分离架构与复制平台的支撑下,我行多套业务系统取得了巨大的成效,主要包括:
(一)效率:采用读写分离架构的应用,效率明显提高,并且能够适应不断增长的业务量,硬件可以以接近线性的方式进行扩展。同时在平台化的支持下,读写分离的部署效率也大为提高,由“天级”降为“分钟级”。
(二)成本:采用读写分离架构后,可消除对高端硬件的依赖性,因为每个从库不强依赖于硬件设施的高可用,而是通过从库的规模效应来消除系统单点故障,直接硬件投资成本大幅降低。
(三)高可用性:读写分离天然的多副本存储方式带来了很强的可用性,从库跨多个可用区独立部署,任何一个从库故障都不影响交易,RTO接近于0。
(四)高扩展性:读写分离不但解决了眼前的问题,还解决了未来的问题,在业务增长提升一个数量级的情况下,读写分离架构也能很好地应对。
08
总结
业务的井喷式增长急需与之相适应的应用架构。经过我行多年的研发、测试、推广,读写分离架构已经广泛使用于多个应用系统,不仅有效降低了成本,也使的我行有足够信心面对更大的挑战。未来,我行也将在架构优化与工具平台化方向上进行更多的尝试,以先进的架构与平台服务广大客户。
(来自:信息科技审计分会)
领取专属 10元无门槛券
私享最新 技术干货