第一阶段:控制逻辑和业务逻辑耦合
1.png

此方式耦合严重,不得不在业务逻辑中加入网络控制逻辑代码

如下:
1.png

控制逻辑和业务逻辑完全耦合在了一起,使得业务代码凌乱不堪,代码难以理解和维护

第二阶段:公共库
1.png

把控制逻辑全部集中在一起组成一个公共的工具包,这样就可以把网络控制逻辑和业务逻辑分开,保证业务逻辑的清晰和明确,这些公共库如Spring Cloud的Netflix组件。

公共库的好处:

  • 解耦
    业务代码和网络控制逻辑代码解耦
  • 消除重复
    不用每个微服务都编写网络控制代码

公共库的缺点:

  • 侵入性
    以Spring Cloud/Dubbo为代表的传统微服务框架,是以类库的形式存在,通过重用类库来实现功能和避免代码重复。但在以运行时操作系统进程的角度来看,这些类库还是渗透进了打包部署之后的业务应用程序,和业务应用程序运行在同一进程
  • 跨语言
    框架和类库是语言强相关的,当修改公共库时需要修改对应不同语言的版本,开发和维护成本太大

第三阶段:代理
1.png

公共库和业务代码不是部署在一起了,而是单独部署一个代理服务,由代理服务去包含网络控制逻辑,这样就完全和应用解耦,如Nginx、Apache等HTTP反向代理。

但是这些Proxy的功能非常简陋,比如服务发现甚至是通过配置文件来实现。功能不够,但是思路和想法很有参考意义:客户端和服务器端应该隔离,部分功能下沉到中间层来实现请求转发。Proxy模式的探索为日后Service Mesh的出现奠定了基础。

第四阶段:边车模式(sidecar)

1.png
什么是边车?
维基百科定义:一个单轮的工具附着在自行车上共同组成了一个三轮的交通工具

1.png
在业务旁边部署一个Sidecar,由这个Sidecar来处理所有的网络请求,处理完成之后再把请求转发给应用本身

第五阶段:Service Mesh
1.png
一个pod由应用程序和Sidecar组成

1.png
一个系统由很多微服务组成,而每个微服务都伴随这一个Sidecar,这些Sidecar组合起来一个网络就是service mesh


捕风
353 声望1 粉丝