diff --git a/ServiceMesh/MicroService-history.md b/ServiceMesh/MicroService-history.md index f064ad71..3e208ed5 100644 --- a/ServiceMesh/MicroService-history.md +++ b/ServiceMesh/MicroService-history.md @@ -62,23 +62,38 @@ TCP出现之后,机器之间的网络通信不再是一个难题,以 GFS/Big -## 第一代服务网格 +## 代理模式的探索 + +最开始,先驱者尝试过使用代理的方案,常见的 Nginx、Haproxy、Apache 等代理。但这种方式和微服务关系不大,功能也简陋,例如 Nginx,配置上游、负载均衡还得手动更新。但是它们提供了一个思路:在服务器端和客户端之间插入了一个东西完成功能,避免两者直接通讯。 + +:::tip 代理模式提供的思路 -最开始,先驱者尝试过使用代理的方案,常见的 Nginx、Haproxy、Apache 等代理。这种方式和微服务关系不大,功能也简陋,例如 Nginx,配置上游、负载均衡还得手动更新。但是它们提供了一个思路:在服务器端和客户端之间插入了一个东西完成功能,避免两者直接通讯。 +使用 Nginx 等反向代理,避免服务间直连,所有的流量都必须经过代理,代理来实现通信的必须特性。 -因此以 Linkerd、Envoy、NginxMesh 为代表的代理模式(Sidecar)应运而生。Sidecar 扮演的角色和代理很像,但功能齐全,完全对照微服务框架的功能开发。 +::: -第一代服务网格将分布式服务的通信抽象为单独一层,在这一层中实现负载均衡、服务发现、认证授权、监控追踪、流量控制等分布式系统所需要的功能。为一个和服务对等的代理服务(Sidecar)和服务部署在一起,接管服务的流量。 +受限 Proxy 的功能不足,在参考 Proxy 模式的基础上,市场上开始陆陆续续出现 Sidecar 模式的产品,例如 Airbnb 的 Nerve & Synapse,Netflix 的 Prana。这些产品的思路是,在 Proxy 中对齐原侵入式框架在客户端实现的各类功能,实现上也大量重用了原客户端代码、类库。
-第一代的服务网格通过代理的方式间接完成服务之间的通信治理,通信逻辑和业务逻辑完美分离解耦,传统侵入式的三个问题迎刃而解。 + +但是,此类 Sidecar 产品存在局限性,它们往往被设计为与特定的基础设施组件配合使用,例如 Airbnb 的 Nerve & Synapse 假设服务在 Zookeeper 中注册,而对于 Prana,应该使用 Netflix 自己的 Eureka 服务注册表,这就只能局限在原有的架构体系中,无法通用。 + +## 第一代服务网格 + +2016年1月,William Morgan 和 Oliver Gould 在 Github 上发布了 Linkerd 0.0.7 版本。早期的 Linkerd 借鉴了 Twtter 开源的 Finagle 项目,并重用了大量的 Finagle 代码。逻辑上,Linkerd 将分布式服务的通信抽象为单独一层,在这一层中实现负载均衡、服务发现、认证授权、监控追踪、流量控制等分布式系统所需要的功能。实现上,作为和服务对等的代理服务(Sidecar)和服务部署在一起,接管服务的流量。 + +此时,Linkerd 不绑定任何基础架构或某类体系,实现了通用型,成为业界第一个服务网格项目。同期的服务网格代表产品还有 lyft 公司的 Envoy。 + +
+ +
## 第二代服务网格 -第一代服务网格由一系列独立运行的单机代理服务构成,但并没有思考如何管理这些代理服务。为了提供统一的上层运维入口,服务网格继续演化出了集中式的控制面板,所有的单机代理组件通过和控制面板交互进行网络拓扑策略的更新和单机数据的汇报。这就是以 Istio 为代表的第二代服务网格。 +第一代服务网格由一系列独立运行的单机代理服务(Sidecar)构成,但并没有思考如何系统化的管理这些代理服务。为了提供统一的上层运维入口,服务网格继续演化出了集中式的控制面板,所有的单机代理组件通过和控制面板交互进行网络拓扑策略的更新和单机数据的汇报。这就是以 Istio 为代表的第二代服务网格。
diff --git a/ServiceMesh/ServiceMesh-and-Kubernetes.md b/ServiceMesh/ServiceMesh-and-Kubernetes.md index 0c10583b..76f2ac44 100644 --- a/ServiceMesh/ServiceMesh-and-Kubernetes.md +++ b/ServiceMesh/ServiceMesh-and-Kubernetes.md @@ -4,7 +4,6 @@ 容器意味着创建(包括初始化)和销毁高度自动化,且具备极强弹性。此时,基础设施的功能(服务发现、负载均衡、熔断限流、路由等)与业务代码的集成需要在低成本前提下保证相同的生命周期。物理机时代,基础设施功能添加到业务代码的方式只能选择 SDK,而容器时代,基础设施的功能添加到业务代码的最佳方式变成了 Sidecar。 - Kubernetes 的本质是应用的生命周期管理,具体来说就是部署和管理(扩缩容、自动恢复、发布)。Kubernetes 为微服务提供了可扩展、高弹性的部署和管理平台。Service Mesh 的基础是透明代理,通过 sidecar proxy 拦截到微服务间流量后再通过控制平面配置管理微服务的行为。Service Mesh 将流量管理从 Kubernetes 中解耦,Service Mesh 内部的流量无需 kube-proxy 组件的支持,通过为更接近微服务应用层的抽象,管理服务间的流量、安全性和可观察性。
diff --git a/assets/linkerd-envoy.png b/assets/linkerd-envoy.png new file mode 100644 index 00000000..42ec0dae Binary files /dev/null and b/assets/linkerd-envoy.png differ diff --git a/intro.md b/intro.md index a4a459e7..99686cc9 100644 --- a/intro.md +++ b/intro.md @@ -16,9 +16,9 @@ ... ::: -文中列出了被重塑的产业,具体有:最大的书店 Amazon、最多人订阅的 Video service Netflix、最大的音乐公司 iTunes、Spotify and Pandora 等、成长最快的娱乐领域 videogame、最好的电影制片厂 Pixar、最大的行销平台 Google、Groupon、Facebook 等、成长最快的电信公司 Skype 、成长最快招聘公司 LinkedIn。 +文中列出了被重塑的产业,包括:最大的书店 Amazon、最多人订阅的 Video service Netflix、最大的音乐公司 iTunes 等等。 -文章发表于 2011 年,2023 年再来回顾,互联网冲击已经无所不在,感触更加深刻。互联网俨然已成为国民经济的高速公路,部分软件成为像水、电、媒一样的基础设施。如果这些基础设施崩溃或者故障,请思考对社会的影响。 +文章发表于 2011 年,2023 年再来回顾互联网的冲击,感触更加深刻。互联网已成为国民经济的高速公路,部分软件变成像水、电、媒一样的基础设施。如果这些基础设施崩溃或者故障,思考对社会的影响。 ## 移动互联网在加剧变化 @@ -52,14 +52,17 @@ - 因为云计算以及相关技术的普及,软件上云成为趋势 - 技术的形态持续在演进 -云计算的技术逐渐发展成为它本来该有的模样,以及与这样的云所匹配的软件架构,还有以及与这样的架构所匹配的开发流程与方法论。 +援引 InfoQ 主编徐川老师对云计算的总结 +:::tip 云计算技术总结 +云计算的技术逐渐发展成为它本来该有的模样,以及与这样的云所匹配的软件架构,还有以及与这样的架构所匹配的开发流程与方法论。 +::: ## 沉淀底层的原理和方法论 视角到转回微观个体,作为技术人员,我们如何应对宏观的世界变化? -所幸,不管技术发展如何日新月异,其根本性变化并没有那么快。尝试理清它们脉络,总能找到若干贯穿其中的一些颠扑不破的底层原理、方法论,比如分布式系统演进方向是 CAP 定理的权衡选择,局限于时间与空间的法则。举个例子,Kubernetes 的网络方案,Cilium、Calico、Flannel、weave 表面五花八门,但它们的基本技术和底层原理总结下来基本没什么变化,只是把这些不同的计算机基本原理、方法重新组合起来,换种形式去解决因为业务变化带来的新问题。 +所幸,不管技术发展如何日新月异,其根本性变化并没有那么快。尝试理清它们脉络,总能找到若干贯穿其中的一些历久弥新的底层原理、方法论,比如分布式系统演进方向是 CAP 定理的权衡选择,局限于时间与空间的法则。举个例子,Kubernetes 的网络方案,Cilium、Calico、Flannel、weave 表面五花八门,但它们的基本技术和底层原理总结下来基本没什么变化,只是把这些不同的计算机基本原理、方法重新组合起来,换种形式去解决因为业务变化带来的新问题。 所以,本书的宗旨是希望能说清楚这些问题的本质,解释清楚整个服务架构的发展历程,走过了哪些弯路,以至于今天使用了哪些技术的缘由,讨论它们背后遵循的不变的原则、知晓这些技术做的取舍、探索它们的设计选择。