纵观数据库60年来的发展历史,从最早的网络数据库、关系型数据库时期,衍生出了 SQL标准、ACID、OLTP 等技术;到数据量急剧增长,需要避免读写冲突,通过 ETL、数据仓库等技术实现了 OLAP;再到今天,面对异构多源的数据结构,从图到时序、时空到向量等,也就诞生了 NoSQL、NewSQL 等数据库,同时也出现了一些新的技术,比如 Multi-Model 和 HTAP 等。
数据库系统最为主流的架构是 Shared Memory:共享处理器内核,共享内存并且具有共享的本地磁盘,这样的单机架构属于非常主流的架构,传统的数据库厂商(如Oracle、IBM、微软等)基本采用的也是这样的架构。
而随着互联网企业的大规模发展,如Oracle、 Amazon 以及阿里巴巴,大家发现原来的单机架构有很多限制,其可扩展性以及吞吐量无法满足业务发展需求,于是就衍生出了 Shared Disk/Storage 架构,即共享存储架构。也就是说数据库底层可能是分布式存储,通过利用 RDMA 这样的快速网络让上层的数据库内核看起来像是在使用本地的磁盘,但实际上是分布式存储。上面可以有多个独立计算节点,一般是多写多读,也可以是一写多读,这就是共享存储架构,其中比较典型的代表有Oracle RAC、Aurora、POLARDB等数据库。共享存储虽然有诸多优点,解决了很多问题,但是 RDMA 网络也存在很多的限制,比如其跨越 Switch 甚至是跨 AZ 和 Region 的时候性能都会有所损失。分布式的共享存储达到一定的节点数量之后,性能会出现一定的损耗,所以不能保证访问远程数据和访问本地数据的性能完全相同,所以共享存储的架构当扩展到十几个节点之后就达到了 scale out 扩展的上限了。
另外一种架构是 Shared Nothing 。比较典型的就是 Google Spanner,其利用原子钟技术能够实现跨数据中心的数据一致性和事务一致性。
需要注意的一点就是:Shared Nothing 和 Shared Storage 可以结合形成混合架构。可以在上层做 Shared Nothing,而对于下层的 Shard 分片采用 Shared Storage 架构。这样混合架构的好处在于能够减轻分出太多 Shard 的痛点问题,减少分布式事务distributed commit的概率,因为 distributed commit 的代价非常昂贵。
总结三种架构设计,如果在 Shared Storage 架构上做到多写多读而不是一写多读,实际上也就实现了 SharedEverything 。将 Shared nothing 和 Sharedstorage 架构进行结合的 hybrid 架构应该是后续数据库系统发展方向的一个重要突破点。
原文作者:;如有侵权,请联系管理员删除。