程序原本(一百一十):系统的基本组织方法与原理——领域间的组织(以数据为中心:数据结点——用数据映像替代数据全集)

阅读数:26 2019 年 10 月 5 日 14:04

程序原本(一百一十):系统的基本组织方法与原理——领域间的组织(以数据为中心:数据结点——用数据映像替代数据全集)

对于上述的第三个方面,作为登录以及类似这样的服务,是否有可能设计为不是单点?数据镜像机制提供了一种可能,这也是我们要谈到的第三种以数据为中心的服务。其根本出发点在于通过后台的镜像与同步机制,将数据作为不变对象以保障逻辑对“数据的位置”的不知觉性。

图 52 比较了三种登录模型。

图 52 三种登录模型:单数据库方案(左)、增加应用服务器的方案(中)、增加数据镜像的方案(右)

程序原本(一百一十):系统的基本组织方法与原理——领域间的组织(以数据为中心:数据结点——用数据映像替代数据全集)

第一种是传统的单数据库方案。第二种是登录服务逻辑过大导致应用服务器资源紧张,同时数据库压力不大时,通过部署应用服务来提升系统整体处理能力的方案。第三种则是在第二种的基础上用以应付数据库压力的典型措施,即传统的数据库镜像方案。

几乎所有的大型数据库系统 / 产品,以及流行的开源数据库解决方案都提供了数据库后台镜像的能力,通常也提供增量镜像服务。这些系统以及这一典型解决方案事实上工作得很好,但是它也同时带来了大量的存储开销,并且不恰当地为“构建以单一数据库中心为基础”的系统提供了支持。

源于“单一数据库”的数据在总量上的变化,使得我们从传统的“集中式”向“复制式”发展变得越来越不可取。而另一种途径,即从“集中式”向“分割式”过渡的方案开始渐行渐显,也就是所谓的分表分库,如图 53 所示。

图 53 从“集中式”向“分割式”过渡:分表分库的方案

程序原本(一百一十):系统的基本组织方法与原理——领域间的组织(以数据为中心:数据结点——用数据映像替代数据全集)

其中,最下层“(总)用户数据库”是一种出于安全性考虑的可选策略。分表分库决定了登录服务与各个子数据库之间存在某种强关系,例如:

  • 采用同一的分布策略;
  • 使用规则化的方法将分布策略写入到应用端(登录服务)的数据存储逻辑;
  • 通过较大的存储过程来将应用端的请求转化为多个表之间的关联查询。

这种强关系带来了更大的系统架构负担,也就是说,我们必须在(包含上述三种方案在内的)多种方案中权衡。但无论如何权衡,都涉及在应用或数据库的逻辑层上的设计,以及由此带来的开发规模不可控。

反思这些变化背后的某些关联,“单一数据库”越来越明显地成为大系统灾难之源。而这是源于早期数据库应用(例如基于数据的三层解决方案)所带来的惯性思维。在我们面临的现实系统中,数据的性质在四个方面几乎在同时发生变化:

(1)数据的碎片化和即时性;

(2)数据向非结构化发展的趋势明显;

(3)数据项次的量级,即数据笔数随着即时性以及系统处理能力的增强而快速增长;

(4)数据与关联数据的不对等及其总量的规模化,例如一条微博可能附带一个视频文件。

这些数据性质的变化迫使我们在“数据库”之外寻求解决方案。其中,相对重要的原因是,数据库维护中对于“数据结构化”的要求以及实施基于数据库分布方案的代价,两者总的来说与重建一个数据存储系统基本相同。以上述的第四种情况为例,如果我们以前面提到的数据库方案来存储微博,那么附带视频文件的管理就要求对数据库存储与文件存储作统一设计;而当我们采用“镜像数据库”或“镜像文件存储”的方案来解决系统压力时,前端的内容管理与存取接口,乃至于系统整体就几乎要重新设计一番了。

当我们的思考不再局限于“数据库”时,“将数据作为一个系统结点”的思维方式开始走向前台,如图 54 所示。

图 54 “数据结点”作为独立系统层次中的可部署对象

程序原本(一百一十):系统的基本组织方法与原理——领域间的组织(以数据为中心:数据结点——用数据映像替代数据全集)

在这样的系统模型中,登录服务与其他种种服务并列在应用层,它们与“数据结点”一样作为可部署对象参与系统规划14。在这一模型中,系统的分布与并发策略建立在结点之间的 PD-IO 关系之上,而增加“1,…,n”这样的数据镜像,就只是出于对数据结点各自的安全性考量,而非是应付 IO 压力的临时策略了。

14 这样的思维框架是将所有的可部署对象作为结点,而并非唯只是数据结点。

评论

发布