Design patterns for container-based distributed systems阅读笔记
分布式系统设计模式
MapReduce设计模式使我们进入了大数据时代,但是MapReduce很大程度上仍然局限在单一编程语言, 如Apache Hadoop主要使用Java开发,同时也主要是为了Java开发。
容器技术,使得软件能够和运行环境一同进行交互,在软件部署上,提供了一种原子性的部署方式, 即要么成功,要么失败,这极大提高和简便了在云上的部署软件的过程。
但是容器技术能做到的远不止如此,就和OOP使得软件编程进入面向对象时代一样,容器技术能够使我们进入 面向对象的软件系统时代,多种基于容器的设计模式会持续指导分布式系统工程。
单容器管理模式
容器能够提供更多丰富的接口,具备清晰的容器生命周期,使得系统简单、更易维护
单节点,多容器模式
K8S中的Pod就是单节点,多容器模式
Sidecar 模式
一个常见的单节点多容器模式的例子就是,Web Server使用一个容器, Log Saving Sidecar使用一个容器。 一个提供数据的读取,另一个提供数据内容。
相比单容器,这么做的好处是:
- 容器是资源调度的最小单位,所以可以更精细分配不同的资源。
- 容器是“打包”单元,能够做功能分离
- 方便重用
- 不会一个功能死掉,导致整个服务挂掉
- 容器是部署的最小单位,可更健壮的滚动更新(可能的缺点:复杂大型程序系统可能需要话更多经历来更新)
这5条优点适用与本文中提到接下来的所有模式
Ambassador 模式
通过设置代理Ambassador,为主容器提供一致性的网络访问
Adapter 模式
和Ambassador正好相反,通过设置Adapter,为外部提供一致性的访问
多节点模式
领导者选举模式
工作队列模式
分布式的生产者消费者问题
Scatter/gather模式
分治原理。 采用一个root节点,将复杂问题分成小问题,交给不同的叶节点计算,然后再将计算的内容合成为完整解。