OceanBase 分布式云数据库实践
1 前言
OceanBase
是 Alibaba
集团自主开发的一款高性能分布式国产云数据库系统,其可靠性、高性能以及可扩展性已经吸引了众多的开发者和企业关注和使用。在本文中将介绍 OceanBase
的设计架构以及使用的特点。作者是机缘巧合参加了 07.29 北京站的 OceanBase
云数据库的线下公开课,众多大佬在场提出了很多应用中的问题和难题以及疑问,官方都给予了很好的解决方案,作者在其中学习到了很多的知识,针对认识到的突出特性在这里和大家进行分享。
2 OceanBase 的特点
在目前这个万物互联的云时代,关于基础应用的软件产品越来越丰富,OceanBase
云数据经过十年磨一剑,经历了阿里内部的孵化,并在双十一的场景下进行了实战检验,已经形成了完整的产品体系,经过推广市场并进一步的进行迭代升级,目前的生态体系已经日趋完善。
如下图所示,是 OceaBase
的一些软件集成的情况,OceanBase
不仅仅是一个自研云数据库,能实现OLTP
功能,其 OLAP
的性能也是十分的出众(这也是官方所宣传的高基准测试 TPC-C 和 TPC-H)。
- 高可靠性
OceanBase
是基于大规模分布式场景而设计的,具备高度的容错能力,采用了多副本复制机制和 Paxos
选举算法,从而确保了数据节点之间数据传输的可靠性和一致性,即使在硬件故障和网络问题时,依然能保障数据的完整性和可用性。
- 高性能
OceanBase
针对大规模高并发场景进行了优化,具备卓越的读写性能,采用了多级缓存和数据分片技术,降低了读写延迟,另外其还支持分布式事务,保证了数据的一致性和并发性能。
- 高扩展性
随着业务的发展,数据的规模需要不断扩展,OceanBase
提供了高效的水平扩展能力,并且实现弹性扩缩容,性能卓越。
- 兼容性
OceanBase
目前已经兼容了大部分的 mysql
和 oracle
数据库的语法和数据结构,另外在云上也具有对应的数据迁移工具,可以实现数据的双向迁移和同步,做到应用的无缝切换。
- 一些不足
OceanBase
入门简单,但是学习曲线陡峭,后续需要熟悉分布式系统的理念和原理,目前社区生态较弱,目前分布式数据库是百家争鸣的阶段,都是在蓬勃发展的过程中,此外 OceanBase
的数据结构决定了其消耗的内存资源较多,得益于其优秀的数据压缩算法可以使得 硬盘资源消耗平均能降低 50% 左右。
3 数据库架构
数据库的架构,从原来的集中式的架构,到复杂业务场景的基于业务的分布式架构,再到后来使用中间件的分布式架构(例如 Cobar、MyCat、DRDS、ShardingSphere
),现在来到了一个基于数据模型的分布式架构,能够屏蔽一些实现细节,真正的做到分布式(比如 OceanBase、Tidb、PolarDB、ClickHouse
等)。
OceanBase
封装了其复杂的架构,应用只需要像连接 mysql
数据库一样即可。 在下图中,Zone
代表的是机房,不同的 Zone
即代表不同的机房。在每个机房中会有若干个 OBServer
, 这个类似于 mysql
的应用实例, 每个实例中会有自己的分区与表空间,这个和 mysql
数据库是一致的。
不同的是 OceanBase
属于分布式数据库系统,会有主从的概念,深蓝色的节点即是主节点,浅蓝色的节点是从节点,每个 OBServer
存储的分区是不同的,在其它的 OBServer
中会有其副本,这个结构和 kafka
的架构类似。应用发起请求时,OBProxy
接收到请求进行路由,路由到的节点即协调节点,由该节点来处理数据的查询或者增改,如果是查询,则将查询语句分发到其它的节点进行执行,执行完成后再做聚合,如果是增改,则执行分布式事务,使用的分布式事务是 2PC
的模式, 这样的做法有利于分摊读写压力。
OceanBase
使用 多副本+Paxos
协议,保证了数据写入到三台机器中的至少两台,才能算是同步成功,依据此来执行其高可用和强一致性。
4 OceanBase 存储架构
不同于 mysql
的 B+tree
数据存储结构,OceanBase
的存储引擎结构使用的是 LSM-tree
, 其中数据大致被分为基线数据(SSTable
)和增量数据(MemTable
)两部分,基线数据被保存在磁盘中,而增量修改的数据存储在内存中。数据库可以在业务的低峰期进行数据的合并,将数据进行合并压缩后存储到磁盘中,同时也会将一部分的数据加载到内存中,防止大量的查询到来时加剧磁盘IO操作。
5 解决的痛点
再结合 OceanBase
的官方文档深入了解后,并且了解了其它的类似云数据库产品,作者认为该云数据库解决了以下几个难题:
1 通过高存储压缩技术,极大地压缩了数据存储量,节省了磁盘空间,但是会增加一些内存的开销,考虑到其优秀的读写能力和数据分析能力,还是值得的。
2 通过Paxos算法和副本设计,可以保障数据库的高可用和高可靠性,同时也实现了便捷的弹性扩缩容,能够轻松应对其业务高峰。
3 同时支持 OLTP 和 OLAP,能够支付复杂的 SQL 并进行优化和并行计算,极大地支持了开发同学的运维工作。
4 能够兼容 Oracle 和 mysql, 这使得能够很好的实现数据迁移和备份,且实现数据源的切换。
6 数据库的使用
介绍了这么多的原理,那么这个数据库该怎么使用呢,这个十分简单,只需要像使用 mysql 数据库一样来使用即可。首先需要在阿里云申请一个 OceanBase
的 mysql
租户实例,创建好用户账户,开通好白名单。
在数据库实例中,通过代理的公网地址和之前设置的账户密码来连接数据库,连接数据库可以通过官方提供的 OBClient
和 Navicat16
,在 java
代码中,使用 Hutool
提供的数据库连接工具进行演示,其使用方式和常用的 mysql
数据库是一致的。
7 总结
在本文中,介绍了 OceanBase
的一些特点,从架构和存储结构方面来阐释了其高性能的原因,在未来的发展趋势中,万物上云是一个终局,所以尽早的接触云产品,并掌握其使用方法,这就可以在未来赢得先手。本文中的介绍也是自己的一些浅见,在以后的学习实践中会分享更多的内容,欢迎大家关注。
转载自:https://juejin.cn/post/7262745726965858362