分布式系统模型

回头看了看分布式系统的几篇文章,觉得又有写新的收获,这里记录一下。

init: 2021-09-14
ChangeLog: 2021-09-30根据《分布式系统原理与范型》来对该模型进行一个补充完善。该书虽然有些老了,但视野却很广。

纵观

分布式系统讲的是系统分工与合作的事情,不仅可以用在Web系统中,也可以用在监控系统。
如下图所示:

分工
书中给出了几种分层的、基于对象的、基于数据的、基于事件的,从现在看,微服务架构中都融入了这些样式。MVC的分层结构,基于对象也就是基于服务的,它要根据具体业务来划分,数据跟着服务走。
合作
分工与合作是矛盾统一的,没有分工也就没有合作,没有合作也就没有分工。服务之间通信方式大多是基于消息的,少部分是基于事件的,数据流并不是服务器之间通信的主要方式。在合作方面,大约有2种流派,一种是去中心化的,节点之间是平等的,如gossip多播协议,如分布式协定,这些都是去中心化的,另一种是有中心化的,如选举算法,需要有一个协作者(中心)来协调参与者。目前微服务的架构中,其实是中心化的方式。这两种方式本质上是在一致性容错性做不同的取舍(这个在制度方面也有类似的情况)。

主题

分布式系统的2大特点是:

  • 提高吞吐量
  • 提高稳定性

分层结构

分布式系统可以抽象为以下3大分层结构,包括

  • 网关:用于流量的调度
  • 服务:提供服务
  • 存储:存取数据

这种方式是挺后端的方式,这里需要加上客户端,客户端本身就是分布的,由于是web,客户端一般是浏览器。这里稍微完善一下,但依旧以后端为主。

  • 客户端
  • api网关
  • 服务
  • 存储

技术集合

原来是用目标与分层结构做的2维表格,现在觉得有些技术并不容易区分,就以集合方式来描述了

结构技术
客户端缓存
api网关负载均衡
服务异步、幂等、服务调度、故障隔离
存储缓存、备份与复制

这里对几个概念说明:

异步:发布订阅 、消息队列(路由)、异步事件的失败时的业务补偿
服务调度:这里主要服务的注册,它是一种协作者,客户端访问时,可以从它这里获取所访问的服务真实地址。
故障隔离:指的是防止故障在服务之间传播,采用隔舱、熔断、限流等措施;
备份与复制:原来喊数据分割,其实就是数据备份,延伸出包括读写分离、CQRS、分库分表;

PS:以上基本上是按SpringCloud的方式在展开,这已经很工程的粒度了,将像很多同步、一致性、容错的算法都已经封装之后的了。

# 微服务 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×