Oracle 是集中式数据库的典型代表,其RAC技术独步天下,至今无人能较好地模仿,因此在分布式数据库上发力较晚,也不大有名气。2010年之后,因为互联网企业的巨大成功,分布式数据库技术逐步兴起,再加上传统存储在性能上瓶颈较大,NVME SSD等存储技术的出现,SHARE NOTHING架构的分布式数据库的势头一时无两。Oracle在这个大潮中也有点坐不住了,于是在12c中推出了sharding database技术。
我刚开始以为Oracle的分布式数据库技术是用来在OLTP数据库中提高OLAP能力的,因为Oracle虽然很早就推出了OLAP数据库,不过受到RAC在横向扩展方面的限制,一直不温不火。在2015年的CAB的ASK ANDY环节中,我从ANDY的回答中得到了一个令我意外的回答,Oracle的sharding数据库技术是为OLTP场景,特别是物联网场景提供的,而并不是用来解决OLAP的问题的。当时的Oracle Sharding确实十分鸡肋,架构上也不完善,sharding节点的高可用还要依赖于手工部署的ADG,外加没有找到适合的场景,因此很快就被我忘却了。
后来我为用户设计Oracle数据库一体机的时候,为了让NVME SSD发挥出更大的作用,我尝试了在一个四节点RAC上用跨实例并行查询去扫描大表,意外的发现只要存储性能OK,CPU资源充足,Oracle的跨实例并行查询不比那些分布式数据库差,甚至在一些复杂查询方面,因为Oracle优秀的优化器,反而会有很大的优势。于是使用Oracle分布式数据库的意愿又弱了不少。
这些年Oracle的sharding数据库在不温不火的发展着,每次新版本发布的时候,都会带上一嘴,不过并不会作为热点去推荐。直到Oracle 23C,这个情况突然变了。23c刚刚预发布的时候,就有朋友和我说Oracle 23c支持RAFT复制组了,你知道不知道。我去网上一看,还真是那么回事。Oracle sharding数据库支持Raft的意义是非凡的,这说明Oracle终于往真正的分布式数据库走了一大步,而不仅仅限于Sharding这种入门级分布式场景了。难道是Oracle居然开始发力于分布式数据库,准备用分布式和RAC两种架构来左右互搏了?
不过经过我的仔细分析后发现,Oracle的策略恐怕还不是如此的。首先从名字上,Oracle 23c推出了一个十分奇怪的名称,全球分布式数据库。我刚开始看到Global的时候,还错解为全局,经过O记的人确认后,发现是全球分布式数据库。
何谓全球分布式数据库?Oracle 23c 的全球分布式数据库是一种能够在多个地理位置存存储和处理数据的数据库系统,它支持跨分片、跨集群、跨云的数据管理和查询。全球分布式数据库的主要应用场景是跨地域,甚至跨国家的全局分布式数据库场景。
这种全球分布式数据库并不是为了解决在某个可用域或者机房内处理能力横向扩展的多节点协同处理,而是更加注重跨数据中心的全局分布式数据库应用场景。这也很好理解,Oracle认为数据库横向扩展并不是全球分布式数据库关注的场景,这个场景RAC已经能够给出很好的答案了。全球分布式数据库可以在不同地域或云环境中部署多个数据库实例,并保证数据的一致性和可用性的场景,例如,互联网金融、电商、游戏等行业,大规模社交网络、物联网、人工智能等领域是Oracle 全球分布式数据库的十分有用的应用场景。
我怀疑是Oracle推出全球分布式数据库的最重要的原因, 那就是在数据技术时代,用来并满足各种安全、合规的场景需求。比如目前各国都对跨国企业提出了数据本地化存储的需求。这让跨国企业的信息系统建设十分头痛。印度、中国、欧洲等都要求用户数据只能存储在本国,不能随意在境外存储。那么Oracle 23c的全球分布式数据库就可以大显身手了,在中国,印度,欧洲,美国分别设置一个分区就可以了。本国用户数据都只存储在本国,需要全局访问时,依然可以很方便地查询与拉取。并且利用TrueCache技术,他国的数据可以在本地的内存数据库实例中缓存,从而获得极高的访问效率。而且TrueCache实例本身又不带有持久化存储,这一特性又满足了国别监管本国数据不能在境外持久存储的政策。
我在和某个国产数据库厂商的朋友讨论到Oracle全球分布式数据库的时候,他感叹到,这才是真正的把用户需求吃透了才能做得出的产品。