热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

揭秘阿里服务互联网金融的关系数据库OceanBase

数据库系统不仅保存了现代企业的关键业务数据,而且对这些数据提供访问从而支撑着企业业务。因此,数据库系统的稳定可靠对现代企业至关重要。数据库系统通常由数据库软件、运行数据库软件的数据库服务器硬件以及保存数据库数据的数据库存储硬件(即共享存储)

数据库系统不仅保存了现代企业的关键业务数据,而且对这些数据提供访问从而支撑着企业业务。因此,数据库系统的稳定可靠对现代企业至关重要。 数据库系统通常由数据库软件、运行数据库软件的数据库服务器硬件以及保存数据库数据的数据库存储硬件(即共享存储)

数据库系统不仅保存了现代企业的关键业务数据,而且对这些数据提供访问从而支撑着企业业务。因此,数据库系统的稳定可靠对现代企业至关重要。

数据库系统通常由数据库软件、运行数据库软件的数据库服务器硬件以及保存数据库数据的数据库存储硬件(即共享存储)组成,如下图所示:


数据库系统的稳定可靠,也取决于这三个部分。

首先是数据库软件,数据库软件厂商平均2~3年发布一个大版本,新版本发布前会进行反复测试。即使如此,数据库软件的维护升级依然有很大的风险,2013年6月中国工商银行系统不可用即是其数据库DB2的维护升级导致,2014年8月美国国务院签证数据库系统超过1周的不可用也是其数据库Oracle的维护升级导致。

其次是数据库服务器。为了保障数据库系统的稳定可靠,传统数据库系统厂商推荐用户使用稳定性较高的高端服务器,这些服务器价格非常昂贵,难以扩展,并且扩展能力也十分有限。

第三是数据库存储(共享存储)。数据库中的数据是企业最宝贵的财富,为了避免数据丢失,传统数据库厂商推荐用户使用稳定性较高的共享存储,同样地,这类存储设备价格非常昂贵,难以扩展,并且扩展能力也有限。

为了避免水灾、火灾或者其他自然灾害导致的数据库系统不可用甚至数据丢失,传统数据库系统通常还要搭建备库,出于安全考虑,主库与备库需要保持一定的距离,例如50km或以上,俗称主备镜像,如下图所示:


然而,尽管称为主备镜像,数据库的备库并不能保证与主库一致:假如强制要求两者一致,那么主库的每一笔事务都必须到达备库后才能提交和应答客户,这样一旦主库备库之间的网络异常或者备库异常,整个数据库系统将不可用,从而导致业务的中断,与主库备库部分数据不一致相比,业务的中断对于企业来讲更加不能接受,因而主库故障后业务切换到备库时,通常会有少量数据不一致。因此,即使部署了主备镜像,传统数据库系统也不得不使用可靠性尽可能高的服务器和存储,以降低主库故障的几率,减少对业务的影响。之所以要使用可靠的服务器和可靠的存储,本质上是因为传统数据库假设硬件(服务器、存储、网络等)是“可靠的”。

对于数据库,与传统企业相比,互联网企业最大的不同之一是并发访问量非常大。传统商业企业、银行,用户需要通过收银台、银行终端、ATM柜员机、POS机等专用设备开展业务并访问数据库,几百和几千的数据库并发访问比较常见,几万以上的并发访问相当少见。在互联网上,每一个草根网民都可以发起购物交易并访问数据库,几十万的数据库并发访问时常可见,几百万甚至千万的并发访问都可以见到(例如双11下的淘宝、天猫和支付宝)。如此之大的并发访问下,商业数据库软件及其高可靠的数据库服务器和共享存储的成本成为了不可承担之重。

由于上述原因,OceanBase的一个基本假设就是硬件(服务器、存储、网络等)是不可靠的,另一个基本假设是单机(数据库服务器及共享存储)无法满足互联网业务的需求。因此,OceanBase必须是一个多机(分布式)系统,并且必须保证任何时刻出现的少量硬件(服务器、存储、网络等)异常不影响业务。

为此,OceanBase引入了Paxos协议,每一笔事务,主库执行完成后,要同步到半数以上库(包括主库自身),例如3个库中的2个库,或者5个库中的3个库,事务才成功。这样,少数库(例如3个库中的1个库,或者5个库中的2个库)异常后业务并不受影响:


与传统数据库相比,OceanBase的另外一个关键特征是软件版本的灰度升级。主备方式的传统数据库是“单活”的,只有主库可执行写事务,尽管维护升级时可以先操作备库,操作完成后备库变成主库并且接受用户访问是一步到位的,如果新版本有问题,则业务受到影响:


传统数据库:升级前


传统数据库:升级中


传统数据库:升级后只能一次性地引入全部读写流量

OceanBase则是“多活”设计,即多个库(3个,5个等)每个都可以有部分读写流量,升级时先把要升级的库的读写流量切走,升级后先进行数据对比,正常后逐步引入读写流量(白名单,1%,5%,10%......),一切正常并运行一段时间后再升级其他的库:


OceanBase之3机群(3库)部署:升级前


OceanBase之3机群(3库)部署:切走读写流量,准备升级


OceanBase之3机群(3库)部署:升级一个机群(库)


OceanBase之3机群(3库)部署:升级一个机群(库)后切回部分读写流量


OceanBase之3机群(3库)部署:升级一个机群(库)后切回全部读写流量

基于硬件不可靠的假设并且能够容忍少量服务器的故障,OceanBase使用了相对廉价的PC服务器代替高可靠服务器并且不再使用昂贵的共享存储,从而不仅提供了比使用高可靠服务器和共享存储低得多的成本,容忍少数服务器乃至少数机群故障意味着比传统数据库更高的可靠性。通过灰度升级,OceanBase避免了传统数据库的“一锤子买卖”的升级,极大地降低了数据库维护升级的风险。

本文作者:阳振坤,蚂蚁金服高级研究员。

推荐阅读
author-avatar
拍友2502911223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有