Service Mesh:微服务架构的救世主还是多余的花招?
Service Mesh的前世今生
在前面,我们提出了一个问题:随着模块和节点的增多,微服务之间难免会遇到各种网络问题。为了解决这些问题,目前有一个解决方案,即使用Spring Cloud中的各个组件。然而,这种解决方案不仅需要更多的学习成本,而且对代码有一些要求,比如必须使用Java开发。这就导致了系统的单一性。因此,今天我们将讨论一下服务网格Service Mesh。
Service Mesh的演进
第一阶段:控制逻辑和业务逻辑耦合
在这个阶段,逻辑控制和业务逻辑的实现是紧密结合在一起的,缺乏明确的分离和解耦。
这种耦合会导致一些问题。首先,逻辑控制的变更会直接影响业务逻辑的实现,增加了代码的复杂性和维护的难度。其次,不同的业务逻辑可能需要不同的逻辑控制方式,但由于耦合在一起,无法灵活地应对变化。此外,难以实现对逻辑控制的统一管理和监控,影响了系统的可维护性和可扩展性。

第二阶段:公共库
在Service Mesh的演进过程中,第二阶段是引入公共库的阶段,旨在解耦逻辑控制和业务逻辑,消除重复代码,并降低开发和维护成本。然而,尽管公共库的引入在一定程度上实现了解耦,但它仍然存在一些问题和侵入性。比如Spring Cloud各个组件
首先,公共库的使用需要对特定的语言进行绑定,这限制了开发团队的选择和灵活性。如果系统中有多种语言的组件,就需要为每种语言编写对应的公共库,增加了开发和维护的复杂度。
其次,尽管公共库可以消除一些重复的代码,但仍然需要开发人员手动调用和集成公共库的功能。这种侵入性可能导致开发人员需要了解和掌握公共库的使用方式,增加了学习成本和开发时间。
此外,公共库的引入并没有完全解决控制逻辑和业务逻辑之间的耦合问题。虽然它提供了一种解耦的方式,但仍然需要开发人员在业务逻辑中显式调用公共库的功能,这仍然存在一定的依赖关系。

第三阶段:代理
代理作为一个中间层,位于应用程序和网络之间,负责处理网络通信逻辑。当应用程序需要发送HTTP请求时,它只需要将请求发送给代理,然后代理负责处理与服务器的通信。这样,应用程序的代码不再需要关注网络通信细节,可以更专注于业务逻辑的实现。尽管这个阶段的代理功能可能仍然比较简陋,但它的思路是正确的。

第四阶段:边车模式(Sidecar)
在第四阶段,Service Mesh的优化演进进入了边车模式(Sidecar)的阶段。边车模式是一种架构模式,它将代理作为一个独立的进程部署到应用程序旁边,形成一个边车,负责处理与网络通信相关的任务。
边车模式的优势在于进一步解耦了逻辑控制和业务逻辑,使得应用程序只需要关注自身的业务逻辑,而将网络通信逻辑交给边车来处理。边车通过与应用程序进行交互,拦截和处理所有的网络请求和响应,从而提供了更高级别的控制和管理能力。
边车模式的实现通常使用了轻量级容器技术,如Docker等,使得边车可以独立地部署和扩展。每个应用程序都有一个独立的边车,它们可以通过一个共享的Service Mesh控制平面进行协调和管理。

第五阶段:Service Mesh 的出现
在这个阶段,Service Mesh成为了一个独立的基础设施层,为应用程序提供了完整的服务通信管理解决方案。它通过在整个服务间通信路径上插入代理,实现了对通信的全面控制和管理。Service Mesh的出现使得服务间通信的管理变得更加简单和可靠,开发人员可以专注于业务逻辑的开发,而不必关注底层的网络通信细节。同时,Service Mesh还提供了强大的安全性、监控和追踪能力,可以帮助运维人员更好地监控和管理服务的运行状态。总之,Service Mesh的出现为服务通信带来了一场革命,极大地提升了应用程序的可靠性和可维护性。

Service Mesh的主要功能
Service Mesh的主要功能包括:
- 服务发现和负载均衡:Service Mesh可以自动发现和管理所有服务实例,并通过负载均衡策略将流量分配到不同的实例上,以提高可用性和性能。
- 智能路由和流量控制:Service Mesh可以基于各种条件和规则对流量进行智能路由和控制,例如根据请求头、路径、用户等进行流量划分和限制,从而实现A/B测试、灰度发布等功能。
- 链路追踪和监控:Service Mesh可以对整个服务调用链进行跟踪和监控,记录每个请求的详细信息,包括请求时间、耗时、错误等,以帮助开发人员快速定位和解决问题。
- 安全认证和授权:Service Mesh可以提供强大的安全机制,包括身份认证、访问控制、数据加密等,以保护服务之间的通信安全,并防止未经授权的访问。
- 故障恢复和容错:Service Mesh可以自动监测和检测服务实例的健康状态,并在出现故障时自动进行故障恢复和容错处理,以提高服务的可靠性和稳定性。
- 可观察性和调试能力:Service Mesh可以提供丰富的监控指标和日志,帮助开发人员深入了解系统的运行情况,并通过可视化界面和工具进行调试和排查问题。

ServiceMesh和Kubernetes关系

Kubernetes是一个开源的容器编排和调度平台,它的主要目标是解决容器化应用的管理和调度问题。Kubernetes提供了各种功能,例如自动化部署、弹性扩缩容、服务发现和负载均衡等,以帮助开发人员更好地管理和运行容器化应用。Kubernetes通过使用调度器来管理应用的生命周期,确保应用始终处于预期的状态。
Service Mesh则是专注于解决微服务架构中的服务间网络通信问题的一种架构模式。它通过在应用程序旁边引入代理(通常称为边车)来管理服务之间的通信。代理负责处理请求的转发、负载均衡、智能路由、安全认证等功能。Service Mesh为微服务架构提供了更强大的功能和管理能力,使得开发人员可以更好地管理和监控服务之间的通信,同时也提供了更高的可观察性、安全性和可靠性。
在实践中,Kubernetes和Service Mesh可以结合使用,相互增强。Kubernetes提供了强大的容器编排和调度功能,使得微服务应用可以在容器环境中高效运行。而Service Mesh作为对Kubernetes网络功能的扩展和延伸,可以进一步提供服务间的流量管理、安全认证、故障恢复等功能,以满足微服务架构中更复杂的需求。
Service Mesh 产品

Istio:Istio是由Google、IBM联合开源的Service Mesh平台,它提供了丰富的功能,包括流量管理、安全认证、故障注入等。它与Kubernetes紧密集成,可以通过Kubernetes的资源对象进行配置和管理。也是我们本系列的主角。
Envoy:Envoy是一个高性能的代理服务器,可以作为Service Mesh的核心组件。它被广泛应用于多个Service Mesh平台中,包括Istio
Linkerd:Linkerd是另一个流行的Service Mesh平台,它专注于简化和加速服务间通信。它提供了可观察性、故障注入、负载均衡等功能,并与Kubernetes无缝集成。但是没有强大的背景背书,比如:Google、IBM
总结
Service Mesh是一种用于解决微服务架构中服务间通信问题的架构模式。在过去的几年里,Service Mesh经历了演进的过程,从控制逻辑和业务逻辑耦合到引入公共库,再到代理和边车模式,最终发展成为独立的基础设施层。Service Mesh的出现极大地简化了服务通信的管理,提供了服务发现和负载均衡、智能路由和流量控制、链路追踪和监控、安全认证和授权、故障恢复和容错、可观察性和调试能力等功能。Service Mesh和Kubernetes可以结合使用,相互增强,提供更强大和可靠的微服务架构解决方案。当前比较流行的Service Mesh产品包括Istio、Envoy和Linkerd等。
Service Mesh:微服务架构的救世主还是多余的花招?的更多相关文章
- 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
Linkerd 提供了许多功能,如:自动 mTLS.自动代理注入.分布式追踪.故障注入.高可用性.HTTP/2 和 gRPC 代理.负载均衡.多集群通信.重试和超时.遥测和监控.流量拆分(金丝雀.蓝/ ...
- Service Mesh——微服务中的流量管理中间件
Service Mesh--微服务中的流量管理中间件 摘自-https://zhuanlan.zhihu.com/p/28794062 Service mesh 与 Cloud Native Kube ...
- 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh
微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构 本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...
- 在微服务架构中service mesh是什么?
在微服务架构中service mesh是什么 什么是 service mesh ? 微服务架构将软件功能隔离为多个独立的服务,这些服务可独立部署,高度可维护和可测试,并围绕特定业务功能进行组织. 这些 ...
- 大规模微服务架构下的Service Mesh探索之路
小结: 1. 第一.二代Service Mesh meetup-slides/敖小剑-蚂蚁金服-大规模微服务架构下的Service Mesh探索之路.pdf https://github.com/se ...
- 微服务架构基础之Service Mesh
ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...
- 唯品会的Service Mesh三年进化史 2018 年 Service Mesh 元年,被誉为是下一代微服务架构
2018 年 Service Mesh 元年,被誉为是下一代微服务架构 https://www.sohu.com/a/225324586_465914 唯品会的Service Mesh三年进化史 - ...
- 微服务架构之「 下一代微服务 Service Mesh 」
Service Mesh 被大家称为下一代的微服务,是微服务领域的一颗新星,被大家讨论的非常多. 我在大家的讨论中,还看到有人说 “目前的微服务架构我都没学会呢,现在又来一个下一代微服务,真学不动了” ...
- 微服务(Microservices)和服务网格(Service Mesh)的架构概念
注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...
- Spring Cloud 微服务架构学习笔记与示例
本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...
随机推荐
- asp.net core之Startup
Startup介绍 Startup是Asp.net Core的应用启动入口.在.NET5及之前一般会使用startup.cs类进行程序初始化构造.如下: public class Startup { ...
- npm install -g 错误集锦
1.切换源安装:npm config set registry http://registry.cnpmjs.org,参考http://yijiebuyi.com/blog/b12eac891cdc5 ...
- Canvas好难,如何让研发低成本实现Web端流程图设计功能
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 相信大家在职场中经常会用到流程图,在互联网行业,绘制流程 ...
- Nginx反向代理服务流式输出设置
Nginx反向代理服务流式输出设置 1.问题场景 提问:为什么我部署的服务没有流式响应 最近在重构原有的GPT项目时,遇到gpt回答速度很慢的现象.在使用流式输出的接口时,接口响应速度居然还是达到了3 ...
- 使用 Laf 一周内上线美术狮 AI 绘画小程序
"美术狮 AI 绘画"(以下简称"美术狮"),是我们小团队的一次尝试,定位是人人都可以上手的,充满创意的,理解中文和中国文化的图片生成工具. 在完善图像模型和论 ...
- msvc++中的预编译头文件pch.hpp和stdafx.h
预编译头文件 在 Visual Studio 中创建新项目时,会在项目中添加一个名为 pch.h 的"预编译标头文件". (在 Visual Studio 2017 及更高版本中, ...
- mysql关键字匹配度模糊查询
有时候项目中需要进行模糊查询,但是要对查询出来的结果进行匹配度排序,比如搜索关键字是"北",需要把数据库中第一个字是北的排在前面,此时就可以用mysql的INSTR函数. INST ...
- 安装软件提示 "无法完成操作, 因为文件包含病毒或潜在的垃圾软件" 如何处理
在Windows端安装一些小众电脑软件的时候,经常会遇到无法安装的问题,比较常见的情况是会提示 "无法完成操作, 因为文件包含病毒或潜在的垃圾软件", 或者提示"不能执行 ...
- 「codeforces - 1344D」Résumé Review
link. 有点狗,但还算个好题. 设定 \(f_i(x)=a_ix-x^3\),\(\Delta_i(x)=f_i(x)-f_i(x-1)\),可以洞察到 \(\Delta_i(x)\) 在正自然数 ...
- Solution -「洛谷 P4688」「YunoOI 2016」掉进兔子洞
Description (Link)[https://www.luogu.com.cn/problem/P4688]. 每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的 ...