冯·诺依曼体系中有最核心的两个要素:计算和存储,它们构成了冯·诺依曼架构的基石,可能还要加上第三个要素——计算和存储之间的通信。在单机部署情况下,通信就是计算和 Memory Bus、IOBUS。但在集群部署的情况下,计算和存储的通信就是网络,这是经典计算机架构。
传统的数据库系统都是基于上述经典的传统架构来设计的,但这里出现了一个问题,传统数据库系统因系统架构方式, 必须是紧耦合的设计方式 ,才能最大效能地发挥系统的优势。传统扩容过程非常漫长,而业务高峰过后缩容也很痛苦,往往会造成极大的资源浪费,也很难应对业务层需要的快速变化能力,这是传统架构非常大的弊端之一。
随着云原生的到来,无须使用紧耦合的方式来部署和使用资源,客户不需要自己配置管理硬件资源,而是由云提供统一的资源管理,客户只需要按需申请使用资源,这就是资源池化。在资源池化之后,可以按需按量使用、弹性调度资源。也可以将资源进行解耦。
时下,业界在计算存储分离方面,是将 CPU 和 Memory 绑在一起,和 SSD 持久化存储分开。随着 NVM 非易失技术的成熟,下一步甚至会将 CPU 和内存再进行隔离,内存再进行池化,形成三层池化,进一步隔离、弹性,更好地帮助客户实现按需按量使用资源。
全球知名咨询公司Gartner指出,云将主导数据库市场的未来,到2022年,75%的数据库将被部署或迁移至云平台,只有25%的数据库会在本地运行。云化无疑代表了未来,企业如何在云原生架构下使用数据库,就成为必须要思考的问题的。
随着企业业务全面向数字化、在线化、智能化演进,企业面临着呈指数级递增的海量存储需求和挑战,业务有更多的热点和突发流量带来的挑战,企业需要降本增效,进行更智能的数据决策,传统的商业数据库已经难以满足和响应快速增长的业务诉求。
在架构创新上,将云原生与分布式结合起来,全新的云原生分布式架构的数据库具备了高扩展性、易用性、迭代快速、成本降低等特点,可以很好的帮助企业解决上述问题。未来数据库也将全面进入云原生加分布式的时代。具体来讲:
1 高扩展性
云原生分布式数据库与底层的云计算基础设施分离,所以能够灵活及时调动资源进行扩容缩容,以从容应对流量激增带来的压力,以及流量低谷期因资源过剩造成的浪费。生态兼容的特点,也让云原生数据库具备很强的可迁移性。
2 易用性
云原生分布式数据库非常易于使用,它的计算节点在云端部署,可以随时随地从多前端访问。因其集群部署在云上,通过自动化的容灾与高可用能力,单点失败对服务的影响非常小。当需要升级或更换服务时,还可以对节点进行不中断服务的轮转升级。
3 快速迭代
云原生分布式数据库中的各项服务之间相互独立,个别服务的更新不会对其他部分产生影响。此外,云原生的研发测试和运维工具高度自动化,也就可以实现更加敏捷的更新与迭代。
4 节约成本
建立数据中心是一项独立而完备的工程,需要大量的硬件投资以及管理和维护数据中心的专业运维人员。此外,持续运维会造成很大的财务压力。云原生分布式数据库以较低的前期成本,获得一个可扩展的数据库,实现更优化的资源分配。
云原生的概念最早由Pivotal公司在2014年提出,并在2015 年组织成立了云原生计算基金会。
关于云原生,至今并没有明确的定义。云原生是云计算时代新的团队文化、新的技术架构和新的工程方式。
云原生指的是一个灵活的工程团队,遵循敏捷的研发原则,使用高度自动化的研发工具,开发专门基于并部署在云基础设施上的应用,以满足快速变化的客户需求。这些应用采用自动化的、可扩展的和高可用的架构。工程团队通过高效的云计算平台的运维来提供应用服务,并且根据线上反馈对服务进行不断的改进。
对应数据库领域,云原生的数据库服务应该包括基于云基础设施构建的数据库管理系统、高度灵活的数据库DevOps(Software Development and IT Operations)团队,以及与之配套的云原生生态工具。
从用户视角来看,云原生的数据库服务应该具备“计算存储分离”、“极致弹性”、“高可用”、“高安全”、“高性能”等核心能力;数据库服务具备智能化的自省能力,具体包括自感知、自诊断、自优化和自恢复等;借助云原生生态工具,能够实现数据的高安全、可监控和可流动;有一支遵循DevOps 规约的数据库技术团队实现数据库服务的快速迭代与功能演进。
传统数据库架构依赖于高端硬件,每套数据库系统服务器少、架构相对简单,且无法支持新业务的扩展需求。
云原生数据库采用分布式数据库架构,可实现大规模扩展,由于每套数据库系统横跨多台服务器和虚拟机,因此带来了全新的系统管理挑战。
其中,最核心的挑战就是如何实现弹性及高可用,即实现按需按量使用,让资源高效利用。
更重要的是,虽然传统的大数据处理牺牲部分ACID换来的分布式水平拓展满足了很多场景中的需求,但是应用对ACID的需求一直存在,即使是在分布式并行计算的场景中,应用对ACID的需求也变得越来越强。
因此,云数据库在分布式事务的协调、分布式查询的优化和强ACID特性的保证等方面,具有非常大的挑战。
除此之外,云原生数据库面临的其他挑战有:
云原生数据库在架构设计上最显著的特点,即将原本一体运行的数据库拆解为计算服务层、存储服务层和共享存储层。
其中,计算服务层负责解析SQL请求,并转化为物理执行计划。存储服务层负责数据缓存管理与事务处理,保证数据的更新和读取符合事务的ACID语义,在实现中不一定是物理分离的,可能一部分集成在计算服务层,一部分集成在共享存储层。共享存储层负责数据的持久化存储,利用分布式一致性协议保证数据的一致性与可靠性。
在云原生时代,云基础设施通过虚拟化的技术实现资源池化。基于分层架构,云原生数据库可以有效地将计算和存储资源解耦,从而分别扩展。因此在资源池化之后,云原生数据库可以按需按量使用、弹性调度资源。
在资源解耦进展上,目前业界是将CPU和内存绑在一起,和SSD持久化存储分开。但随着非易失存储技术和RDMA技术的成熟,下一步甚至会将CPU和内存进行隔离,内存再进行池化,形成三层池化,更好地帮助客户实现按需按量使用资源。
传统的中间件分库分表的方案和企业级的透明分布式数据库都会面临一个挑战:在分布式架构下,数据只能按照一个逻辑进行分片(Sharding)和分区(Partition),业务逻辑和分库逻辑不是完美一致的,一定会产生跨库事务和跨分片处理,每当ACID要求较高时,分布式架构会带来较高的系统性能挑战。例如在高隔离级别下,如果分布式事务占比超过整个事务的5%,那么系统吞吐量会有明显的损耗。
完美的分库策略是不存在的,这是分布式业务需要解决的核心挑战,同时需要保证在这个架构数据的高一致性。
云原生的架构,在本质上,下层是分布式共享存储,上层是分布式共享计算池,中间层用于计算存储解耦,这样可以非常好地提供弹性高可用能力,做到分布式技术集中式部署,从而对应用透明。
分布式系统的多个节点通过消息传递进行通信和协调,其不可避免地会出现节点故障、通信异常和网络分区等问题。采用一致性协议可以保证在可能发生上述异常的分布式系统中的多个节点就某个值达成一致。
在分布式领域中,CAP理论认为任何基于网络的数据共享系统最多只能满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)三个特性中的两个。
其中,一致性指更新操作完成后,各个节点可以同时看到数据的最新版本,各节点的数据完全一致;可用性指在集群的部分节点发生故障时,系统可以在正常响应时间内对外提供服务;分区容忍性指在遇到节点故障或网络分区时,系统能够保证服务的一致性和可用性。
由于是分布式系统,网络分区一定会发生,天然地需要满足分区容忍性,因此需要在一致性和可用性之间做出权衡。
在实际应用中,云原生数据库通常采用异步多副本复制的方式,例如Paxos、Raft等一致性协议,保证系统的可用性和最终一致性,以牺牲强一致性的代价换取系统可用性的提升。
在线上使用时,云原生数据库会提供不同的高可用策略。
高可用策略是根据用户自身业务的特点,采用服务优先级和数据复制方式之间的不同组合,组合出适合自身业务特点的高可用策略。
服务优先级有以下两种策略,可以方便用户在可用性和一致性之间做出权衡。
多租户指一套系统能够支撑多个租户。一个租户通常是具有相似的访问模式和权限的一组用户,典型的租户是同一个组织或者公司的若干用户。
要实现多租户,首先需要考虑的是数据层面的多租户。数据库层的多租户模型对上层服务和应用的多租户实现有突出影响。
多租户通常有某种形式的资源共享,需要避免某个租户的业务“吃掉”系统资源,影响其他租户业务的响应时间。
一般实现多租户会采用一租户一数据库系统,或者多租户共享同一个数据库系统,通过命名空间等方式隔离,但是这种模式运维和管理比较复杂。在云原生场景下,数据库可以为不同的租户绑定相应的计算和存储节点以实现资源的隔离和面向不同租户的资源调度。
智能化运维技术是云原生数据库的重要特性。云原生数据库一般通过简易的操作界面和自动化流程帮助用户快速完成常见的运维任务,并可以在多数任务下执行自动化操作:
这里我们借用Amazon云科技数据库、数据分析、机器学习副总裁Swami Sivasubramanian (2007年 Dynamo 论文的合著作者之一,且是 Amazon DynamoDB 开发的主要贡献者 )的一段话:
“现在,我们生活在这样一个世界中,就客户如何 IT 应用程序而言,云是新常态,而规模也是新常态,每个应用程序都要基于不确定性构建。云原生数据库本身将在这个持续的旅程中,根据用户需求继续进行创新。我们将继续朝着端到端的现代化数据战略使命迈进。正如我之前提到的,“没有数据库是孤岛”。
客户不再只想在他们的数据库中存储和查询数据。然后,他们想要分析这些数据以创造价值,无论是更好的个性化或推荐引擎,还是可以使用机器学习运行预测分析的预测系统。
将点对点连接起来,并继续使数据库更安全、更可用、更高性能和更易于使用,这将是我们永无止境的旅程。”