分布式系统常用的模式
Ambassador
名称:“大使”模式
介绍:作为应用程序和其他服务的“中间人”,负责应用程序和其他服务之间的通信,包括日志、监控或重试处理等任务。
举例:K8S使用Envoy作为一个“大使”来简化服务之间的通信。
优点:
- 降低延迟
- 增强安全性
- 改进分布式系统的整体架构
Circuit Breaker
名称:断路器/熔断器
介绍:分布式系统中存在多个服务,当某个服务不可用的时候,为了避免造成级联故障,该服务的上游可以通过断路器模式来停止请求不可用的服务,等待服务恢复。
举例:Netflix 的 Hystrix
优点:提高分布式系统的可用性
CQRS
名称:Command Query Responsibility Segregation,命令查询责任分离。
介绍:通过分离系统的写(或命令)和读(或查询)操作,提高系统的性能。
举例:
- 数据库的读写分离,在主库上执行写操作,在从库上执行读操作,通过主从同步保持数据的一致性和实时性。
- 写数据库,读缓存,数据库的写操作会导致缓存失效。
Event Sourcing
名称:事件溯源
介绍:不直接更新记录,而是存储代表变化的事件,这种方式为系统提供了完整的历史记录。
举例:
- git 版本记录
- 数据库的事务日志,发送到下游进行重放
- 将系统的事件发送到kafka,供下游处理
Leader Election
名称:领导者选举模式
介绍:在分布式系统中,领导选举模式可以确保只有一个节点负责特定的任务和资源。当领导节点失败/不可用时,剩余的节点选择一个新的领导。
举例:etcd 和 zookeeper 使用 leader election 来管理分布式配置。
好处:通过指定一个 leader,我们可以避免冲突并确保在整个分布式系统中做出一致的决策。
Publisher/Subscriber
名称:发布-订阅模式
介绍:发布-订阅模式类似于报纸投递,发布者发送事件,不关心事件的接收者;订阅者监听它们感兴趣的事件,不关心事件的发送者。
举例:kafka等消息中间件
好处:解耦了事件的发送者和接收者,提高了系统的可扩展性。
Sharding
名称:分片
介绍:将数据划分到一个系统的多个节点上,每个节点包含数据的一个子集,所有节点上的数据共同组成完整的数据。
举例:分库分表、分布式数据库、kafka topic的多个分区、ES索引的多个分片
Replica
名称:副本
介绍:将数据冗余存储
举例:数据库的主库和备库、kafka topic的多副本、ES index 的多副本