OceanBase是阿里开发的分布式关系型数据库(SQL)。它的目标是支持数百万亿字节的数据和数十万TPS以及数百万次QPS访问。无论是数据量还是访问量,即使是非常昂贵的小型机甚至大型机,也买不起一个单独的关系数据库系统。
案例:OceanBase分布式关系型数据库度过了一个成功的双十一:已经支持了支付宝的核心交易、支付、会员、账户,并刷新了纪录:每秒17.5万笔交易,每秒12万笔交易,全天累计支付10.5亿笔。
1、高可扩展性
传统的分布式关系型数据库,如Oracle或MySQL,功能完善,但数据库本身无法扩展。随着数据量的增加和业务内容的丰富,需要对数据库和表进行反汇编,然后将相应的SQL访问和路由到指定的数据库。数据库运维人员需要花费大量的时间对数据库进行扩展,包括读写分离、垂直拆分、水平拆分等等。
分布式关系型数据库使用分布式技术和无共享架构。来自业务的访问将自动分配给多个数据库主机。在相关技术的支持下,OceanBase还可以使用廉价的PC服务器作为其数据库主机。通过这两个变化,运维人员可以高高兴兴地通过增加服务器的数量来提高系统的容量和性能。
2、成本低
传统商业企业采用的“IOE”系统实际上代表了一种高成本、高维护、非高并发的商业数据库系统。尤其是随着数据越来越多,硬件升级和维护的成本会越来越惊人。阿里巴巴采用了数据分段的策略,将一些海量数据应用从集中式的Oracle切换到分布式集群,从纵向扩展到横向,解决了数据库的可扩展性问题,用PC服务器替代了小型机。
由此带来的一个重要变化就是成本的大幅降低。与分布式关系型数据库 company的传统产品相比,OceanBase的升级和维护不需要昂贵的共享存储、高可靠的服务器和数据库软件的许可费,可以将商用数据库的成本降低到一半以下。
3、高可靠性
分布式关系型数据库系统通常由数据库软件、运行数据库软件的数据库服务器硬件和用于存储数据库数据的数据库存储硬件(即共享存储)组成。数据库的稳定性和可靠性也取决于这三个部分。使用PC服务器可以带来高可扩展性,降低成本,但其硬件的可靠性相应降低。
如何保证系统的可靠性?
分布式关系型数据库的一个基本假设是硬件(服务器、存储、网络等。)不靠谱。因此,OceanBase必须确保少量硬件(服务器、存储、网络等。)任何时候发生的异常都不会影响业务。
为此,OceanBase分布式关系型数据库推出了Paxos协议。每一个事务,在主库执行之后,都必须同步到一半以上的库(包括主库本身),比如三个库中的两个或者五个库中的三个,事务才算成功。这样在少数库(比如3个中的1个库或者5个中的2个库)出现异常后,业务不会受到影响。
Paxos是一种分布式事务一致性协议,主要用于保证分布式系统中数据的可靠性。当多数已经成功的机器,只要坏了的机器是少数,少数就是三分之一,多数就是二分之一。三台机器有两台是成功的,你可以告诉用户这个数据不会丢失。此时,这台机器可能会损坏,但如果任何一台机器损坏,至少会有另一台机器恢复。这是系统内的自动灾难恢复。如果哪个机器坏了,或者有一个机器掉队了,比如其中三个成功后,把另外两个拖过来,数据就补上了,肯定能保证另外两个没问题,最后三个也没问题,所以一个机器坏了也不会有问题。
在软件层面,OceanBase区别于传统分布式关系型数据库的一个关键特点是软件版本的灰度升级。
主备模式的传统数据库是“单活”的,只有主数据库可以进行写事务,虽然在维护和升级时可以先操作备份数据库。操作完成后,备份数据库成为主数据库,接受用户访问,业务一步到位就会受到影响。如果新版本有问题:
传统数据库:升级后,所有读写流量只能引入一次。
OceanBase是“多活”设计,即多个库(3、5等。)都可以有部分读写流量。升级时,先切断待升级库的读写流量,对比升级后的数据,正常后再逐步引入读写流量。一切正常并运行一段时间后,升级其他库:
基于硬件不可靠,可以容忍少数服务器故障的假设,OceanBase使用相对便宜的PC服务器,而不是高可靠性的服务器,不再使用昂贵的共享存储,因此不仅提供了比使用高可靠性服务器和共享存储低得多的成本,而且容忍少数服务器甚至少数集群的故障也意味着比传统数据库更高的可靠性。
通过灰度升级,OceanBase避免了传统数据库的升级,大大降低了分布式关系型数据库维护升级的风险。
4、数据的准确性
许多互联网服务可以允许一定的数据错误,但电子商务(如交易、金融领域等。)不同于一般的互联网公司,对数据的一致性要求非常高。比如要保证钱的流入流出匹配,不能丢失任何支付数据(阿里巴巴用OceanBase做支付宝系统)。
分布式关系型数据库的设计不同于经典的关系数据库,读事务基本上是分布式并发执行的,而写事务目前是集中式串行的,也就是可序列化的,任何写事务在提交前对其他读写事务都是不可见的,所以OceanBase是强一致的。这样,在设计方案中就可以保证没有数据丢失。