首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 “老纪的技术唠嗑局”,会持续更新和 OceanBase 相关的各种技术内容。欢迎感兴趣的朋友们关注
本文内容来源于《OceanBase社区版在泛互场景的应用案例研究》电子书,获取完整版:https://open.oceanbase.com/learning
作者:梅庆,浙江云趣科技架构师,18年数据库运维和架构师从业经验,目前专注于数据库(包括国产分布式数据库)的三方运维服务。
在数字经济驱动下,数据已成为国家战略性生产要素,并重构产业生产力模型。以互联网、人工智能、大数据为核心的数字技术,推动电商、社交、金融科技、智能制造等泛互联网行业(以下简称“泛互行业”)高速发展。然而,数据规模的指数级增长,使得企业在存储、计算、安全及数据治理领域面临系统性挑战。为了应对这些挑战,泛互行业的数据库技术重心迈向分布式数据库,并发展出多种技术架构。
泛互行业各个场景特点不完全一样,业务对数据库的要求也不尽相同,不同场景下诞生了不同的解决方案。
(一)水平拆分应对计算和存储瓶颈
在互联网行业兴起的时候,数据规模的增长使得传统集中式数据库的性能和存储容量都出现瓶颈,垂直扩容硬件能力的方式成本高收益低。头部互联网企业率先转型使用开源数据库(如 MySQL和PostgreSQL)。单个数据库的计算和存储能力有限,就在单个数据库基础上再架构一层分布式数据库中间件,中间件应用了水平拆分技术(俗称分库分表),实现最早的分布式关系数据库。这种方案比较容易理解和推广,早期被大量使用。
以Google为代表的国外公司先遭遇类似的业务挑战,先后推出了Spanner和F1产品。国内公司受其技术启发,结合业务场景需求诞生了两类解决方案。这两类方案不依赖传统数据库,早期也称为NewSQL,后来称为原生分布式数据库。
一是计算和存储分离,存储层使用Key-Value结构,计算层解析SQL取数据时映射到存储层的 KV 对象。计算层无状态可以方便扩容和缩容,存储层利用数据多副本和复制技术也实现了高可用和在线伸缩能力。业务数据大表在存储层面被切分为更小的单位,分散在各个节点上。
二是计算和存储不分离,业务数据大表使用分区表技术切分为更小的分区。同样每个分区也有多副本,有高可用和数据复制技术实现在线伸缩能力。
(二)LSM-Tree 结构数据分层压缩降低存储成本
传统关系型数据库(如Oracle和MySQL)读写模型是B-Tree模型,数据读写设计比较平衡。这类数据库不开启数据压缩,否则会有明显的性能下降。所以在泛互行业场景下,这类数据库存储成本会很高。NewSQL 数据库的读写模型多是 LSM-Tree 模型,将所有随机写的需求转变为顺序写,特别适合跟固态存储SSD结合使用。LSM-Tree 的数据会分层存储在磁盘上,不同层有不同的压缩算法,从而兼顾性能和存储成本。这是目前泛互行业降本增效方案中的主流方案。
(三)数据多副本结合分布式选举协议实现高可用
随着泛互行业在分布式数据库的使用规模越来越大,分布式数据库的高可用挑战也越来越大。局部的故障不可避免,要求是故障能快速自动恢复并且不丢失任何数据。传统的数据库主备异步同步、半同步技术并不能严格保障这点。分布式数据库主要采用以Paxos和Raft为代表的分布式选举协议去实现多副本的故障切换和数据复制的可靠性。这种高可用能力同城可以做到故障恢复指标RTO在秒级别,RPO则为0(零丢失)。
Raft协议是简化版的Paxos,二者的区别在于高并发下的性能和稳定性。二者对网络带库和稳定性要求也不一样。Paxos 模型更加复杂使得在高并发大吞吐场景下综合表现会更好一些。
当泛互行业对数据库高可用的范围从同机房扩容到同城三机房或者两地三中心场景下,数据副本数可能从3副本增长到5副本,总体存储成本会增长。为了应对存储和网络成本的增长压力,在副本的类型上又发展出日志副本、仲裁副本这类技术。这样可以只用2个或4个数据副本加一个仲裁副本就可以实现原有的高可用功能。
(四)行列混合存储同时满足 OLTP 和 OLAP务场景
泛互行业数据规模膨胀,早期是分别用支持行存和列存的不同数据库产品去满足OLTP和OLAP场景需求。这个引入大量数据同步链路以及更多的数据副本冗余,整体成本也非常高。原生分布式数据库利用数据多副本特性,支持在单个副本里行存和列存混合存储、或者不同副本呈现行存或列存混合部署,减少了外部数据同步方案,也降低了数据的平均副本数。此外,SQL引擎也会根据业务SQL特点、数据量特点针对性选择行存或列存,使得业务整体性能平均水平得到提升。这种设计也避免了数据孤岛。
以上总结的是泛互行业的分布式数据库为应对大数据量高并发挑战的架构方案特点,不同数据库在水平拆分、副本类型、数量和同步、数据存储模型和压缩、分布式事务等方面实现的技术不尽相同,都能不同程度的满足业务需求,差别可能是数据迁移体验、数据库运维体验、峰值下的性能和稳定性等方面,还需要在实际工作中探索。