分布式系统设计模式

MapReduce设计模式使我们进入了大数据时代,但是MapReduce很大程度上仍然局限在单一编程语言, 如Apache Hadoop主要使用Java开发,同时也主要是为了Java开发。

容器技术,使得软件能够和运行环境一同进行交互,在软件部署上,提供了一种原子性的部署方式, 即要么成功,要么失败,这极大提高和简便了在云上的部署软件的过程。

但是容器技术能做到的远不止如此,就和OOP使得软件编程进入面向对象时代一样,容器技术能够使我们进入 面向对象的软件系统时代,多种基于容器的设计模式会持续指导分布式系统工程。

单容器管理模式

容器能够提供更多丰富的接口,具备清晰的容器生命周期,使得系统简单、更易维护

单节点,多容器模式

K8S中的Pod就是单节点,多容器模式

Sidecar 模式

一个常见的单节点多容器模式的例子就是,Web Server使用一个容器, Log Saving Sidecar使用一个容器。 一个提供数据的读取,另一个提供数据内容。

相比单容器,这么做的好处是:

  1. 容器是资源调度的最小单位,所以可以更精细分配不同的资源。
  2. 容器是“打包”单元,能够做功能分离
  3. 方便重用
  4. 不会一个功能死掉,导致整个服务挂掉
  5. 容器是部署的最小单位,可更健壮的滚动更新(可能的缺点:复杂大型程序系统可能需要话更多经历来更新)

这5条优点适用与本文中提到接下来的所有模式

Ambassador 模式

通过设置代理Ambassador,为主容器提供一致性的网络访问

Adapter 模式

和Ambassador正好相反,通过设置Adapter,为外部提供一致性的访问

多节点模式

领导者选举模式

工作队列模式

分布式的生产者消费者问题

Scatter/gather模式

分治原理。 采用一个root节点,将复杂问题分成小问题,交给不同的叶节点计算,然后再将计算的内容合成为完整解。