这是皮质盘,作为摄政国公民,每个人一岁时都被植入了一个。你的意识可被下载至任何盘中,放入任何义体中,你甚至可以在几分钟内传输到殖民世界的任何一具义体之中,义体是可以替换的,但一旦皮质盘被毁,你就死定了。
—— 《副本》中有关皮质盘的介绍
到底哪一个云服务最有价值?
我的答案是“云数据库”,这里的“云”,特指在云端托管的数据库服务,具体到阿里云上就是RDS、PolarDB、PolarDB-X、ADB等。
为啥是“云数据库”最有价值?
因为在我接到性能优化诊断任务当中,十之八九最后都是数据库的问题,而相对于云数据库,自建的数据库(自行部署在云服务器上的数据库)主要有如下问题:
- 商业数据库软件的许可成本高昂。
- 开源数据库缺乏服务支持,出现问题无人兜底,可靠性安全性无法保证。
- 无论是商业数据库还是开源数据库对运维人员都有着较高要求,使用和操作不当导致了大量问题。
相对于自建数据库,使用阿里云托管数据库有如下优势:
- 开箱即用、分钟级可用,一键即可迁移现有数据到新数据库。
- 速度更快、内核参数充分优化、性能对比开源提升显著,当性能不足时可原地扩容升级。
- 运行更稳、具备99.99%的SLA承诺、当出现内核BUG时有专门的修复团队可在第一时间快速修复。
- 更加安全、内置无法删除和屏蔽的备份功能,避免删库跑路事件发生、并支持恢复到一周之内任意时间点,提供回收站功能,可快速恢复误删除数据。
在阿里云的云托管数据库当中,应用领域最广泛的无疑非PolarDB莫属了。
PolarDB是阿里云自研的采用分布式共享存储架构的云原生数据库,目前提供MySQL(5.6、5.7、8.0)、PostgreSQL、Oracle兼容版三种引擎,对于MySQL和PostgreSQL数据库的使用者提供100%的兼容性支持,可以直接迁移到PolarDB对应的数据库引擎,对于Oracle数据库的使用者,PolarDB提供90%以上的兼容性支持,并提供迁移助理以降低迁移难度。
无论采用哪种数据库引擎,所有的PolarDB均采用了分布式共享存储架构:
这个分布式共享存储架构是这样的:
- 采用存储和计算分离的设计
- 存储节点和计算节点之间通过高速的RDMA网络互联
- 存储节点采用分布式集群架构,所有的数据存取操作由多个节点共同完成
- 计算节点由一主多从构成,主节点提供读写服务,从节点提供只读服务
因为采用了这样的架构,有了下面这些优势:
- 分钟级扩容、由于采用了存储和计算分离的架构,新计算节点无需复制数据,可实现分钟级扩容。
- 节点故障切换RPO=0、主节点将事务的Redo日志写入共享存储,一旦主节点发生崩溃,从节点可直接访问共享存储中的Redo 从而完成数据的恢复。
- 秒级备份、在存储层即可完成数据的备份,无论数据库有多大,通过快照的方式可在30秒之内完成数据库备份。
- 无阻塞DDL、由于采用了共享存储架构,主库的DDL操作直接应用于只读数据库,避免了非共享存储架构下只读节点还要花大量的时间消化数据库的变更。
PolarDB主要是面向OLTP在线处理类的需求设计的,同时还为有一定OLAP需求的用户提供了自定义地址(节点)功能,可以将一部分只读节点分配一个专门的地址用来处理OLAP类的请求,从而让OLAP任务不会影响到对响应更为敏感的OLTP业务。
为了让PolarDB分钟级扩容的优势得以最大程度的发挥,PolarDB提供“计算包”的购买方式,一方面计算包可以根据实际的资源消耗情况进行抵扣,另一方面购买资源包要比默认的按量计费又能享受一定的折扣优惠。
除了计算包,PolarDB还提供“存储包”,顾名思义就是对存储资源的使用进行按需抵扣,且购买时享受一定的折扣。
一个PolarDB集群可以拓展到16个节点、单节点最大88核710GB、集群最大存储能力可以达到100TB,假如这样的能力还不足以支撑业务的访问压力,这时还可以通过PolarDB-X 将多个PolarDB集群进行“捆绑”使用,让系统的承载能力进一步扩展。
PolarDB-X 分成1.0和2.0两个版本,PolarDB-X 1.0 采用中间件的形式,需要结合现有的PolarDB或RDS使用,为了不让中间件的处理成为瓶颈,PolarDB-X 1.0 最大实例规格可升级至1024核4096GB。
PolarDB-X 2.0 是自带存储的完整分布式数据库,目前单节点规格最大32核128G,最大可以扩展到99个节点。
要这么多节点有什么用?
通过合理的设置“分区键”,可以将一个大表“水平拆分”到多个物理表中,节点越多,可供使用的物理表自然也就越多,整个“逻辑表”的承载能力也就越强。
上图中,分区键被设置为name字段,根据name字段,数据被分片存储在多个物理表中。
无论是PolarDB还是PolarDB-X 面对的是主要是OLTP即联机事务处理的领域,对于专门的OLAP即联机分析处理领域可以考虑使用AnalyticDB 分析型数据库,分析型数据库根据使用的引擎分成MySQL版、PostgreSQL版。其中MySQL版除了计算资源和存储资源绑定的资源预留模式外还提供了存储和计算资源分离的弹性模式,使用弹性模式可以根据业务需求的紧迫程度动态增加或减少计算处理节点,从而可以让用户更好的掌控费用的消费情况,这种模式有些类似于大数据领域的独角兽snowflake,在数据的存储资源上弹性模式分成热存储和冷存储两种模式,其中冷存储的价格和阿里云的OSS对象存储处于同一个量级,可以最大程度上降低组织机构的数据存储成本。
假如组织机构有10PB级的数据存储和关联分析需求,则可以考虑使用阿里云的DLA数据湖分析服务,DLA根据使用的查询分析引擎分成SQL版(兼容Presto)、Spark版,目前各引擎对数据源的支持情况如下表所示:
鉴于海量数据的移动成本耗费巨大,所以通过DLA数据湖分析服务,可以让数据不必移动,即可实现跨数据源的关联分析,让数据和数据之间产生“化学反应”并产生出更大的价值。