第一阶段:控制逻辑和业务逻辑耦合
此方式耦合严重,不得不在业务逻辑中加入网络控制逻辑代码
如下:
控制逻辑和业务逻辑完全耦合在了一起,使得业务代码凌乱不堪,代码难以理解和维护
第二阶段:公共库
把控制逻辑全部集中在一起组成一个公共的工具包,这样就可以把网络控制逻辑和业务逻辑分开,保证业务逻辑的清晰和明确,这些公共库如Spring Cloud的Netflix组件。
公共库的好处:
- 解耦
业务代码和网络控制逻辑代码解耦 - 消除重复
不用每个微服务都编写网络控制代码
公共库的缺点:
- 侵入性
以Spring Cloud/Dubbo为代表的传统微服务框架,是以类库的形式存在,通过重用类库来实现功能和避免代码重复。但在以运行时操作系统进程的角度来看,这些类库还是渗透进了打包部署之后的业务应用程序,和业务应用程序运行在同一进程 - 跨语言
框架和类库是语言强相关的,当修改公共库时需要修改对应不同语言的版本,开发和维护成本太大
第三阶段:代理
公共库和业务代码不是部署在一起了,而是单独部署一个代理服务,由代理服务去包含网络控制逻辑,这样就完全和应用解耦,如Nginx、Apache等HTTP反向代理。
但是这些Proxy的功能非常简陋,比如服务发现甚至是通过配置文件来实现。功能不够,但是思路和想法很有参考意义:客户端和服务器端应该隔离,部分功能下沉到中间层来实现请求转发。Proxy模式的探索为日后Service Mesh的出现奠定了基础。
第四阶段:边车模式(sidecar)
什么是边车?
维基百科定义:一个单轮的工具附着在自行车上共同组成了一个三轮的交通工具
在业务旁边部署一个Sidecar,由这个Sidecar来处理所有的网络请求,处理完成之后再把请求转发给应用本身
第五阶段:Service Mesh
一个pod由应用程序和Sidecar组成
一个系统由很多微服务组成,而每个微服务都伴随这一个Sidecar,这些Sidecar组合起来一个网络就是service mesh
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。