【51CTO.com快译】如今,在各种类型的应用项目中,业务规则日趋复杂,数据体量也日益增多。这些都给应用后端的数据库带来了不小的压力。而随着应用程序持续被越来越多的用户所使用,您会逐渐发现,数据库层已经成为了整个系统的关键节点和性能瓶颈。因此,实现数据层的高可用性,就成为了我们在项目设计与运维过程中,经常要考虑和解决的问题。
下面,我将以单个站点和多个站点的,主-备和多主模式为例,和您讨论数据库的各种部署类型,它们各自的特点和在功效上的利弊,以便您能够设计出具有高可用性和业务弹性的数据库架构。
首先让我们来看在单个站点上的数据库部署类型:
单节点
单个站点上的单节点部署
最基本的部署方式当属单个站点上的单节点架构。在业务连续性方面,这显然是最不具备优势的部署模式。由于无法提供高可用性,其唯一的DR(灾难恢复)机制只能通过现有的备份文件,去恢复数据库。可见,这种类型的部署,通常出现在不太重要的环境中。例如,在CI/CD管道的技术中,自动化测试已经成为了该过程的一部分,那么在开发或使用过程中,我们就可以将诸如:CockroachDB、Oracle、以及SQL Server等几乎所有数据库,都按照这种方式进行部署。
单节点部署模式的好处是:
- 由于只有一个节点需要获得数据库的许可证,因此它具有一定的成本效益。但是,如果在真实的生产中采用此模式,那么由于业务中断所带来的损失,以及引发的补救成本,则可能是一个天文数字。
单节点部署模式的缺点是:
- 缺乏HA(高可用性)。如果唯一的节点出现错误或问题,则无法实现故障的转移。因此,您必须手动修复现有的失败节点,然后再从备份中进行数据恢复。
- 任何可能导致停机的维护,都必须事先考虑到如何转移数据流的传输;而任何对于系统的修补或升级,也都会以某种形式给客户或服务造成影响。
多节点
我们再来看单个站点上的多节点架构。显然,在技术实现上,它会对DR和HA有所改进。在此类部署中,我们一般可以选用主-被模式、或多主模式,并配置出2个或更多的节点。而且,这些节点通常可以分布在不同的故障域中,例如:某个机架、某组网络交换机或磁盘。
主-被模式
主-被
这种模式通常是由一个主节点和n个被节点组成。这意味着,如果主节点出现了问题,应用程序可以立即指向被节点,并将被节点提升为主节点。该过程往往是自动完成的。不过,由于应用程序在重新指向新的节点时需要切换时间,因此服务有可能会出现中断。可见,该模式虽然优于单节点的架构,但是仍非生产环境的完美部署方案。可以被配置主-被模式的数据库包括:Oracle、SQL Server、MySQL、以及Postgres。
主-被模式的优点是:
- 在您签署了主数据库支持协议后,某些数据库提供商会允许您免费地将其运行在被节点上,因此该模式仍然具有一定的成本效益。
- 相比单节点架构,该模式提供了更好的HA能力。
主-被模式的缺点是:
- 既然增加了被节点,那么它必然需要跑在相应的硬件、或虚拟资源上,那么您将不得不为此支付额外的费用。而且,它们只会在发生灾难或故障时,才会被用到。
- 由于在发生故障时,所有服务器都需要重新同步,才能统一为主-被配置,因此其运维的成本较高。
多主模式
单个站点上的多活模式
在这个模式中,集群中的所有节点,都可以同时进行读写操作。由于在多个活动的集群中,所有节点都是平等的,因此它们没有了所谓主节点和被节点的概念。据此,您不但拥有可控的HA和DR功能,而且还具有可以轻松扩展的固有能力。目前,可以被部署为此类模式的数据库包括:CockroachDB、Cassandra以及Couchbase。
多主模式的优点是:
- 无论是读取还是写入操作,都具有可扩展性。
- 其高可用性体现在系统执行升级和修补等维护任务时,不会产生任何停机。
- 由于所有节点一直都处于活跃且被使用的状态,因此它们在资源利用率方面具有较高的成本效益。虽然由此会产生更高的预购许可证的相关成本,但是该方案在市场上最具有成本效益。
- 可以达到RPO(恢复数据点目标)为 0,而RTO(恢复时间目标)<10秒。
多主模式的缺点是:
- 由于会导致网络流量的翻倍增加,因此该解决方案往往会影响到系统的整体性能。不过,这对于单个站点而言影响甚微,毕竟其网络速度非常快,带宽也很大。
- 诸如Cassandra之类的技术往往需要定期的维护工作。也就是说,在完成了恢复操作之后,应复查并确保所有节点上的数据,被已完成复制、且保持一致。
总体而言,在单个站点上进行数据库部署的总体缺点在于,它无法应对整个站点或区域的中断情况。对此,我们往往需要用到下面将要讨论到的多个站点部署的模式。
多个站点上的多活模式
多站点模式主要体现在不同的节点分布在不同的站点或区域中。如果我们需要通过在线状态监测的方式,及时发现掉线的站点或区域,那么该部署模式则非常适合。也就是说,与单个站点的部署相比,多个站点部署的最大优势在于,您可以在某个或某几个区域性数据中心、或站点出现中断时,仍然可以提供原有的数据服务。
如前所述,在单个站点中,多主与主-被模式有着许多相似的优缺点。但是,对于多个站点而言,我们应当更多地考虑以下两个方面:
- 网络延迟 - 由于各个站点通常是通过在地理上分散性,来提高服务的鲁棒性,因此,由此带来的网络延迟,往往会影响到应用程序的响应时间。不过,诸如CockroachDB之类的数据库会允许您使用其地理分区(Geo-Partitioning)的功能,来管控部分延迟的现象。您可以通过阅读链接--https://www.cockroachlabs.com/docs/v19.1/demo-geo-partitioning,来了解更多相关内容。当然,您也必须为保持区域性数据中心的鲁棒性,而承担相应的货币成本。
- DR — 您必须为集群内的所有节点实施备份,而不仅仅只是为了单个节点的主-被方案。
当然,您可以根据应用的实际需求,选用其他更为可靠的解决方案。
小结
正如我们在上述每一种部署方案的优缺点中所介绍的那样,无论您选择的哪一种解决方案,都需要考虑和满足应用业务的连续性(如HA和DR)、总体拥有成本(完整的TCO,不仅包括前期的构建支出,还包含了运维与中断所产生的成本)、以及性能上的综合需求。
原文Active-Passive vs Multi-Active Database Topologies,作者:Daniel Holt
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】