Total Pageviews

Tuesday 20 June 2017

从CAP和ACID说起

因为从业经历比较复杂,zos大机,分布式数据库也多有接触过,从自己的经历视角,说一下我对银行core banking system(核心银行系统)去IOE的看法,技术不精,希望大牛们批评指正。
一、从CAP和ACID说起吧
ACID大家都很清楚,原子性,一致性.隔离性. 持久性,凡是学过数据库的计算机本科生应该张嘴就来,ACID是传统关系型数据库(DB2和oracle)的基础,追求的是强一致性,是准确性,确保事务返回所见即所得,DBMS是以牺牲性能和高可用为代价的。
CAP是分布式领域的基本定理
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
本质上来讲无论google也好,BAT也好,他们数据库都是CAP的数据库,只是根据业务场景的不同选择不同的倾向。NoSQL是CAP理论的具体实现。
二、CBS要求ACID
举例一个场景吧,B的帐上没有钱,A给B汇款5000元,交易完成后 1秒钟 B立即给C汇款2000元。
这是最简单的转账交易,实际上逻辑也很复杂,场景实际是由两个转账交易组成的。
转账交易本身没有大家想的那么简单,交易信息上来的时候 首先要查询很多表查看账户、客户信息是否存在,机构、柜员信息是否合法,是否超出限额,币种是啥,有没有业务限制,是否跨行,余额是否充足等等,然后开始加锁AB的账户,A的减去500,B的加5000然后事务返回结果。只要事务返回了,意味着以上数据一定被写入到持久化的硬盘中了,无论断电也好,什么也好,只要硬盘可读,以上信息依然存在,而且只要事务反馈,B可以立刻给C汇款2000元。
再就性能问题顺便提一句,2012年本人服务于四大行cbs部门,以上的交易以及类似交易在IBM Z主机上可以处理2000笔交易/秒(实际数据),这个交易是指的A给B转账这个大的复杂事务。
X86服务器的性能到底怎么样的,我以前用单台4CPU IBM 3850 linux+myqsl测试过,数据量大概只灌了1000万左右吧,每秒只能在两位数上,如果实际用起来,可能只在个位数上,这个性能的差距本身不在CPU内存的指标上,而是从软件到硬件架构的全面优化,除了硬件IBM已经优化好之外,我们在CBS开发时经常讨论的问题就是一个SQL怎么优化,到底有多少次IO,一个锁怎么加性能更好。
三、CAP数据库应用到CBS上的问题
CAP的数据库能够满足我们平时大部分的应用场景需求,比如微博、网站、互联网交易,他给我们带来更好的用户体验。
每个场景均不一致,比如微博的信息重要性并不重要,强调的是性能和影响,它不比将信息写到硬盘中就可以返回,然后系统后台需要9s-11s左右的时间才会异步地写入到磁盘中。好了,如果这种数据库用到CBS中,那么A给B汇款就可能出现以下问题,A汇款了5000元B收到了,B从内存中读到5000入账汇款给C2000,突然,B账户所在的服务器坏了,数据没写入到硬盘根本没有任何证据留下来,结果就会出现各种不一致,A的账上的钱少了,C多了2000,B应该余下3000但是却什么都没有,帐都不平,调账团队给技术部门要证据找原因,却什么也查不出来,这业务就别做了。
比如采用淘宝的交易场景,我为了快速响应和性能把大事务分离,这样就更牛逼了,如果B是个公用账户只有5000块,在短时间内可以分3次把2000元汇给C,这样就5000元汇出了6000元的效果,这个当时是发现不出来的,只能事后,超卖可以取消,那C有了6000元之后,要是汇走了呢?这钱谁来出?要是科技部老总说,这事儿可能发生,只是发生的概率非常小非常小,遇到我们就和互联网公司一样直接认下来不就得了,行长一听绝对让他下台,几千元可以认,要是几千万几个亿呢?这些风险如果全都识别,全都预防,估计都得提高到提高存款准备金的高度,行长直接吐血。
四、到底能不能替代呢?
我觉得去IOE本身没啥问题,大量的银行业信息系统的数据其实没那么重要,比如网银、信贷、客户信息什么的,但是就CBS(指做核心账务处理的存款、取款、贷款、支付)而言却是极难替代,本身作为CBS系统的更换而言,在任何一个行里都是1号工程,都是党委会决定的项目,你可以得知道,党委会里不可能有这么懂技术的,并且并且投入了大几十个亿,业务存在风险,切换存在风险,谁能下决心更换?
银监会和工信部针对银行业已经发了安全自主可控技术的推进指南,针对大型主机这一项是唯一没有明确要求的。比如PC server要求增量采购100%国产,操作系统、中间件15%国产。监管也是做了大量调研,仅仅敢提出让大家研究研究大型主机如何替代的方案,没有提要求,监管不强制,各行里怎么会有动力呢?
再说一点,各银行只是IT技术的使用单位,要的是商业逻辑,和BAT不一样,让它从0开始搞数据库真的没有必要,没有必要研发底层技术。看过一个采访,阿里的MYSQL优化一共花了25000人天。银行也会算账,25000人天差不多四五个亿啊,去搞一个没有明确目标,对业务没有帮助的项目,根本划不来,不如直接买成熟商业产品.

No comments:

Post a Comment