什么是 Service Mesh?
只看单机代理组件(数据面板)和控制面板的Service Mesh全局部署视图如下:Service Mesh 作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势。
一言以蔽之:Service Mesh 是微服务时代的 TCP/IP 协议。
提到Service Mesh,就不得不提微服务。根据维基百科的定义:
微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通信。
目前业界跟微服务相关的开发平台和框架更是不胜枚举:Spring Cloud, Service Fabric,Linkerd,Envoy,Istio等。这些纷繁的产品和Sevice Mesh有什么样的关联?哪些属于Service Mesh的范畴?
Phil Calçado的文章《Pattern: Service Mesh》,详细的介绍了从开发者视角来看,服务开发模式和Service Mesh技术的演化过程,非常经典的学习Service Mesh的资料。
知乎有大佬有给出原文的一个中译版本,如下。
时代0:开发人员想象中,不同服务间通信的方式,抽象表示如下:
时代1:原始通信时代
然而现实远比想象的复杂,在实际情况中,通信需要底层能够传输字节码和电子信号的物理层来完成,在TCP协议出现之前,服务需要自己处理网络通信所面临的丢包、乱序、重试等一系列流控问题,因此服务实现中,除了业务逻辑外,还夹杂着对网络传输问题的处理逻辑。
时代2:TCP时代
为了避免每个服务都需要自己实现一套相似的网络传输处理逻辑,TCP协议出现了,它解决了网络传输中通用的流量控制问题,将技术栈下移,从服务的实现中抽离出来,成为操作系统网络层的一部分。
时代3:第一代微服务
在TCP出现之后,机器之间的网络通信不再是一个难题,以GFS/BigTable/MapReduce为代表的分布式系统得以蓬勃发展。这时,分布式系统特有的通信语义又出现了,如熔断策略、负载均衡、服务发现、认证和授权、quota限制、trace和监控等等,于是服务根据业务需求来实现一部分所需的通信语义。
时代4:第二代微服务
为了避免每个服务都需要自己实现一套分布式系统通信的语义功能,随着技术的发展,一些面向微服务架构的开发框架出现了,如Twitter的Finagle、Facebook的Proxygen以及Spring Cloud等等,这些框架实现了分布式系统通信需要的各种通用语义功能:如负载均衡和服务发现等,因此一定程度上屏蔽了这些通信细节,使得开发人员使用较少的框架代码就能开发出健壮的分布式系统。
时代5:第一代Service Mesh
第二代微服务模式看似完美,但开发人员很快又发现,它也存在一些本质问题:
- 其一,虽然框架本身屏蔽了分布式系统通信的一些通用功能实现细节,但开发者却要花更多精力去掌握和管理复杂的框架本身,在实际应用中,去追踪和解决框架出现的问题也绝非易事;
- 其二,开发框架通常只支持一种或几种特定的语言,回过头来看文章最开始对微服务的定义,一个重要的特性就是语言无关,但那些没有框架支持的语言编写的服务,很难融入面向微服务的架构体系,想因地制宜的用多种语言实现架构体系中的不同模块也很难做到;
- 其三,框架以lib库的形式和服务联编,复杂项目依赖时的库版本兼容问题非常棘手,同时,框架库的升级也无法对服务透明,服务会因为和业务无关的lib库升级而被迫升级;
因此以Linkerd,Envoy,NginxMesh为代表的代理模式(边车模式)应运而生,这就是第一代Service Mesh,它将分布式服务的通信抽象为单独一层,在这一层中实现负载均衡、服务发现、认证授权、监控追踪、流量控制等分布式系统所需要的功能,作为一个和服务对等的代理服务,和服务部署在一起,接管服务的流量,通过代理之间的通信间接完成服务之间的通信请求,这样上边所说的三个问题也迎刃而解。
如果我们从一个全局视角来看,就会得到如下部署图:
如果我们暂时略去服务,只看Service Mesh的单机组件组成的网络:
相信现在,大家已经理解何所谓Service Mesh,也就是服务网格了。它看起来确实就像是一个由若干服务代理所组成的错综复杂的网格。
时代6:第二代Service Mesh
第一代Service Mesh由一系列独立运行的单机代理服务构成,为了提供统一的上层运维入口,演化出了集中式的控制面板,所有的单机代理组件通过和控制面板交互进行网络拓扑策略的更新和单机数据的汇报。这就是以Istio为代表的第二代Service Mesh。
只看单机代理组件(数据面板)和控制面板的Service Mesh全局部署视图如下:
至此,见证了6个时代的变迁,大家一定清楚了Service Mesh技术到底是什么,以及是如何一步步演化到今天这样一个形态。
现在,我们再回过头来看Buoyant的CEO William Morgan,也就是Service Mesh这个词的发明人,对Service Mesh的定义:
服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。
这个定义中,有四个关键词:
基础设施层+请求在这些拓扑中可靠穿梭:这两个词加起来描述了Service Mesh的定位和功能,是不是似曾相识?没错,你一定想到了TCP;
网络代理:这描述了Service Mesh的实现形态;
对应用透明:这描述了Service Mesh的关键特点,正是由于这个特点,Service Mesh能够解决以Spring Cloud为代表的第二代微服务框架所面临的三个本质问题;
总结一下,Service Mesh具有如下优点:
- 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;
- 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可;
- 对应用透明,Service Mesh组件可以单独升级;
当然,Service Mesh目前也面临一些挑战:
- Service Mesh组件以代理模式计算并转发请求,一定程度上会降低通信系统性能,并增加系统资源开销;
- Service Mesh组件接管了网络流量,因此服务的整体稳定性依赖于Service Mesh,同时额外引入的大量Service Mesh服务实例的运维和管理也是一个挑战;
历史总是惊人的相似。为了解决端到端的字节码通信问题,TCP协议诞生,让多机通信变得简单可靠;微服务时代,Service Mesh应运而生,屏蔽了分布式系统的诸多复杂性,让开发者可以回归业务,聚焦真正的价值。
参考:
什么是 Service Mesh - 割肉机 - 博客园
什么是 Service Mesh - 知乎
2021 年 Istio 大型“入坑”指南 - 知乎
什么是 Service Mesh?相关推荐
- 聊聊Service Mesh:linkerd
[编者的话]随着企业逐渐将传统的单体应用向微服务或云原生应用的转变,虽然微服务或者云原生应用能给企业带来更多的好处,但也会带来一些具有挑战的问题,如怎么管理从单体应用转向微服务所带来的服务间通讯的复杂 ...
- 下一代 Service Mesh -- istio 架构分析
前面的分享中,我们讲到,出于性能和稳定的考虑,我们没有采用以 istio 为代表的第二代 service mesh技术,而是直接使用了 Envoy 搭配自己的 xDS 服务. 然而我们还是有必要去了解 ...
- 百度大规模Service Mesh落地实践
导读:百度过去基于rpc框架的服务治理存在各种框架能力层次不齐.业务自身服务治理效率低.全局可观测性不足等诸多问题.本文介绍了百度内部落地service mesh的实践过程,以基础稳定性能力治理和流量 ...
- 基于Service Mesh构建更现代的服务架构
点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 前言 传统业务模型中,客户端和服务端之间放置一个负载均衡器,比如nginx.我们的客户端可以是移动程序或者web系统. 当服 ...
- 实施Service Mesh前,你需要考虑这几个问题
随着我们需要治理的微服务数量越来越多,我们必须开始着手解决服务间通信的复杂性问题,而Service Mesh(服务网格)的出现恰逢其时,作为基础设施层,它能够以透明代理的形式提供安全.快速.可靠的服务 ...
- Service Mesh是大方向,那Database Mesh呢?
在微服务和云原生大潮的卷席之下,服务化一直以来是人们关注的重点.但服务化之后,真正绕不开的数据访问却鲜有论道.尽管目前的关系型数据库远达不到云原生的要求,并且对分布式的不友好在长期以来也饱受诟病,但不 ...
- 十问 | 关于Service Mesh 和Kubernets的最前沿思考
小蚂蚁说: 在7月6日ArchSummit全球架构师峰会2018深圳站上,蚂蚁金服平台数据技术部的杨冰.Service Mesh布道师敖小剑.蚂蚁金服技术专家毛小云和来自阿里大文娱UC基础部的曾彬,四 ...
- Service Mesh:调度千军万马微服务,2.0妥妥的
冠望 发自 凹非寺 量子位 报道 | 公众号 QbitAI 过去一年,继Kubernetes风靡,Service Mesh已成功上位变成当之无愧的技术网红. TA不但可以极大简化用户使用体验,还将大中 ...
- Service Mesh — Overview
目录 文章目录 目录 微服务的两个层面 微服务架构服务治理的难点 Service Mesh(服务网格) Service Mesh 的设计思想 Istio 的实现原理 Service Mesh 的问题 ...
- Service Mesh — APIGW vs ServiceMesh
目录 文章目录 目录 APIGW vs ServiceMesh 原本清晰的界限:定位和职责 APIGW 访问内部服务,算东西向还是南北向? Sidecar:真正的重合点 如何融合东西向和南北向的通讯方 ...
最新文章
- MongoDB之副本集
- 酒桌游戏c语言,最受欢迎的12种酒桌游戏
- ECSHOP 模版文件里的编辑区域
- Java-ConfigHelper工具类
- 狐假虎威的故事,狐假虎威的故事告诉我们什么道理?
- 高德地图 map.setcenter 动画_娄底三维动画制作公司价格2020行情-立艺数字
- Docker EE 2.0 版本震撼来袭,全新特性先睹为快(附资源地址)
- 关于Android发送邮件
- Rufus 制作U盘启动器
- netbeans开发php项目,NetBeans PHP 项目创建
- window 系统目录和程序 system32 syswow64 无法加载dll
- CXF 客户端报错 No conduit initiator was found for the namespace http://schema
- The LeVoice Far-field Speech Recognition System for VOiCES from a Distance Challenge 2019
- 关于git和 github
- Win11服务Windows Update禁用后自动开启怎么办
- 主控开发(一)Jetson nano环境搭建
- Synchronized的原理(C++层)
- OFDM子载波频率 知乎_5G的速度到底能有多快?
- html网页清楚内外边距
- 传奇人物《周兴和》书连载20 内外交困搞发明
热门文章
- HDOJ 1720 A+B Coming
- android与ndk交互,NDK-JNI与Java的交互 hello-world
- 初级开发人员的7种领导技能:如何为高级职位做准备
- java中KMP模式,Java数据结构-串及其应用-KMP模式匹配算法
- html5+桌面推送,HTML5 Web Notifications 桌面推送小记
- html设置长宽高代码_Jenkins CI 自动构建与 CSTAT 代码
- 本地html如何导出pdf,html表格以pdf格式导出到本地
- android连接service,android连接webservice
- Python: PyCharm中导入matplotlib时报错:“Backend Qt5Agg is interactive backend”的解决方案
- Python Imaging Library: Script(脚本)