本文是Service Mesh系列第1篇

随着云原生时代的来临,使用微服务架构的朋友们开始听到一个新的技术名词——Service Mesh(现在来说已经不算新了)。

对于一项新技术的学习,总归绕不过两个问题:

  • 它是什么?
  • 为什么需要它?

本文将围绕这两个问题进行展开,期望对Service Mesh有一个综述性的了解。

最后,引发一个核心的思考:

  • 到底谁才需要Service Mesh?

1. 什么是Service Mesh

Service Mesh 在国内被翻译「服务网格」。

目前比较公认的是Buoyant公司的CEO William Morgan给出的定义:

Service Mesh是用于处理服务到服务通信的专用基础架构层。Cloud Native有着复杂的服务拓扑,它负责可靠地传递请求。实际上,Service Mesh通常作为一组轻量级网络代理实现,这些代理与应用程序代码部署在一起,应用程序无感知。

这个定义看起来有些复杂,我们抽取其中的关键词,可能会更加清晰一些:

  • 服务到服务通信的基础架构层(定位)
  • 在复杂的服务拓扑中,可靠地传递请求(目标)
  • 轻量级网络代理实现(实现)
  • 应用程序无感知(特点)

从定位、目标、特点来看,我们联想到了什么呢?

没错,就是 TCP/IP协议!

对于云原生下的微服务,Service Mesh就是等同于 TCP/IP协议 一样的 基础设施,负责服务之间的网络调用、路由管理、限流和监控等。

使用了Service Mesh,我们就不需要在应用程序编写时,去关注服务间调用的框架适配、升级等问题,比如Spring Cloud、Dubbo等。就像我们过去编写应用程序时一样,基本不会再关注TCP/IP这一层的问题。

另外,从实现角度来看,这个轻量级的网络代理实现,往往以Sidecar(边车)来称呼(其实就是Proxy)。

我们看下Service Mesh的架构。

(图片来自
https://philcalcado.com/2017/08/03/pattern_service_mesh.html)

「服务网格」分为两个核心部分:

  • 数据平面。以Sidecar作为数据平面节点,对应用来说完全透明,所有流量进出都会经过Sidecar。
  • 控制平面。集中式的控制平面,提供统一的上层运维入口,所有的Sidecar代理组件通过和控制平面交互进行网络拓扑策略的更新和单机数据的汇报。

2.为什么需要Service Mesh

一项新技术的产生与引入,必然是为了解决已有的问题。引入Service Mesh的原因,也是为了解决已有微服务框架存在的问题。

为了更深刻地理解Service Mesh解决的问题,我们结合Phil Calçado的文章《Pattern: Service Mesh》,梳理下服务开发模式和Service Mesh技术的演化过程。

1)原始通信时代 1.0

在原始通信时代(TCP协议出现前),服务需要自己处理网络通信所面临的丢包、乱序、重试等一系列Flow Control问题。所以在业务逻辑代码之外,还需要考虑对网络传输问题进行处理。

2)原始通信时代 2.0

为了解决这种业务无关的通过网络传输问题,TCP/IP协议出现,并将这部分Flow Control问题“下沉”到操作系统层面。业务开发不再需要关注网络传输问题,可以专注于业务逻辑开发。

3)微服务的服务治理1.0

随着微服务架构的推广,单体服务逐渐向分布式系统发展,服务间调用变得越来越复杂。

这时候,微服务架构下的 “Flow Control”问题不断出现,包括 服务注册与发现、限流、熔断等等。所以,在业务逻辑代码中,我们又需要开发一些模块解决这类业务无关的问题。

4)微服务的服务治理2.0 —— 微服务框架

为了解决微服务架构下的通用通信问题,各种微服务框架开始出现,Spring cloud、Dubbo等框架都是为了解决这类通用问题而产生。

这些框架通过客户端依赖包的形式,向业务开发屏蔽了包括 服务注册与发现、限流、熔断等等处理逻辑,只需要简单的配置,就能完成比较健壮的微服务架构。

5)微服务的服务治理3.0 —— Service Mesh

微服务框架虽然能解决通用化的服务治理问题,但是在实践中也存在一定的弊端:

  • 客户端依赖包的形式,注定了与开发语言强绑定。比较主流的微服务框架基本是Java实现的,如果业务架构中存在其他语言的服务,就比较难享受同样的便利。而针对不同语言都开发一套微服务框架,又是比较高成本且难以维护的事情。被微服务框架限定了开发语言,那显然不是一个好的事情。
  • 客户端依赖包的形式,注定了业务需要关注依赖包的升级与适配。一些复杂项目依赖包众多,经常需要处理包冲突的问题,令人头大。同时,框架库的升级也无法对服务透明,必须推进业务去完成,业务开发同学和框架维护同学都很疲惫,sigh~~

如果能像TCP/IP一样,将服务治理“下沉”,彻底与应用服务解耦,那就能解决上述问题了。

所以,以Linkerd,Envoy,NginxMesh为代表的Sidecar模式的Service Mesh产品应运而生。它们将微服务通信的通用问题,服务注册发现、限流、熔断、监控等功能,单独抽出了Sidecar服务,完全接管了服务间的网络通信,并且独立运行,与业务应用彻底解耦。这样就解决了传统客户端模式微服务框架的痛点。

而后,istiol为代表的Service Mesh产品,在Sidecar模式之基础上(istio中的sidecar采用了Envoy),又引入了统一的控制平面,方便进行管理与维护更新。

至此,相信我们对“为什么需要Service Mesh”有了深刻的认识,正是基于上述的演进历史,才有了现在的微服务的服务治理方案Service Mesh.

3.谁需要Service Mesh

既然Service Mesh这么好,是不是可以无脑上呢?就实际情况来看,不是的。

为什么呢?

Service Mesh在服务治理上,其实并没有更多的“功能性”新特性,比较吸引人的基础特性包括:

  • 天然的云原生组件
  • 能够独立升级与演进
  • 语言无关性

但在一个相对成熟的生产环境中,就目前来看,无论是Dubbo、spring cloud 或者是 自研的微服务框架,都已经相对成熟了,治理能力都比较完善,很少需要去升级或者扩展。

尤其是在服务注册与发现的核心功能不变情况下,一些扩展升级基本不需要所有后端服务都去升级适配。

那么基于“能够独立升级与演进” 的特性就不是那么有说服力了,至少是没有那么大的“业务价值”去驱动的。

那么到底谁才适合引入Service Mesh?

1)云原生基础的新企业(新生产线)

一切从零开始,就基于云原生技术栈的新企业,是非常适合直接引入Service Mesh的 。

云原生天然的服务注册发现、服务治理、云原生可观测,统统围绕Service Mesh展开,业务开发将能更好地专注于业务迭代,而不再需要关注这些业务无关的基础架构的迭代。

当然,一些深入了解云原生技术栈的基础架构维护者是必不可少的。

2)技术栈多样化的成熟企业

那对于一个相对成熟的企业来说,微服务框架、配置中心、全链路追踪系统等,都已经比较成熟,治理能力都比较完善,很少需要去升级或者扩展。

因此,要引入Service Mesh,大部分是基于「技术栈多样化」的需求。

所谓「技术栈多样化」,包括:

  • 业务场景特性不同。比如web项目使用Java、后台高性能计算服务使用go/c++、业务请求量波动剧烈的业务使用Faas、前端微服务使用nodejs等。
  • 一些特殊的招聘需求。

「技术栈多样化」带来的复杂架构,给传统微服务框架带来了巨大挑战,客户端模式(语言强绑定)的微服务框架已经无法满足这样的复杂需求了。

因此,在云原生架构下,Service Mesh的「语言无关性」的特点,给予了异构应用程序的更多可行性,让用户可以快速的编排出复杂环境、复杂依赖关系的应用程序。

4.小结

本文围绕“什么是Service Mesh”、“为什么需要Service Mesh”两个主题,对ServiceMesh进行了综述性的分享。

最后,根据生产落地中的实际情况,思考了真正适合Service Mesh落地的场景。

期望能对大家有所启发。

都看到最后了,原创不易,点个关注,点个赞吧~

文章持续更新,可以微信搜索「阿丸笔记 」第一时间阅读,回复【笔记】获取Canal、MySQL、HBase、JAVA实战笔记,回复【资料】获取一线大厂面试资料。

知识碎片重新梳理,构建Java知识图谱:github.com/saigu/JavaK…(历史文章查阅非常方便)

到底谁才需要Service Mesh?的更多相关文章

  1. 微服务架构基础之Service Mesh

    ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...

  2. Service Mesh简介

    1.1 Service Mesh   1.1.1 什么是Service Mesh Service Mesh是最近才兴起的一个名词,最早在2016年9月29日由开发Linkerd的Buoyant公司首次 ...

  3. 新锤子驾到,通通闪开—Service Mesh

    微服务方兴未艾如火如荼之际,除 Spring cloud 等经典框架之外,新一代的微服务开发技术正在悄然兴起,那就是Service Mesh(服务网格).2018 年是Service Mesh 元年, ...

  4. Qcon2017实录|Service Mesh:下一代微服务

    https://zhuanlan.zhihu.com/p/30292372 数人云11月Meetup报名开启,看中西方大神如何论道云原生与微服务!本文作者敖小剑老师将在本次Meetup上继续分享Ser ...

  5. 干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?

    干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的? https://www.sohu.com/a/235575064_99940985 干货 | 蚂蚁金服是如何实现 ...

  6. Service Mesh服务网格新生代--Istio(转)

    万字解读:Service Mesh服务网格新生代--Istio  官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...

  7. 什么是 Service Mesh

    作者|敖小剑 微服务方兴未艾如火如荼之际,在 spring cloud 等经典框架之外,Service Mesh 技术正在悄然兴起.到底什么是 Service Mesh,它的出现能带来什么,又能改变什 ...

  8. Service Mesh 初体验

    前言 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越来 ...

  9. Service Mesh体验

    前言# 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越 ...

随机推荐

  1. Superedge的新特性和未来之路

    作者 王冬,腾讯云高级研发工程师,专注于Kubernetes.容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作. 背景 2021年9月27号,,在 ...

  2. Unity——可复用背包工具

    Unity可复用背包工具 Demo展示 设计思路 游戏中有非常多的背包样式,比如玩家道具背包,商城,装备栏,技能栏等:每个形式的背包都单独写一份逻辑会非常繁琐,所以需要有一套好用的背包工具: 这些背包 ...

  3. 10.2 PHP

    WEB资源类型 静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端 WEB相关语言 客户端技术:html JavaS ...

  4. 每个男孩的机械梦「GitHub 热点速览 v.21.41」

    作者:HelloGitHub-小鱼干 机械臂可能在医疗剧中看过,可以用来执行一些精细化的操作,例如:缝合之类的.但这次 Dummy-Robot 让你不仅看看而已,还具备一定的实操性(有一定的动手.经济 ...

  5. 树莓派3B上手一二

    树莓派3B上手一二 早些时间心血来潮买过一个树莓派,但是当时只是玩一玩,买来按照网上的教程摆弄了一下就闲置了.最近毕业设计,做时序数据分析的相关的工作,刚好想起能够用到树莓派+Node-RED来生成模 ...

  6. 题解 CF555E Case of Computer Network

    题目传送门 题目大意 给出一个\(n\)个点\(m\)条边的无向图,有\(q\)次有向点对\((s,t)\),问是否存在一种方法定向每条边使得每个点对可以\(s\to t\). \(n,m,q\le ...

  7. 关于 WinDoAdmin

    WinDoAdmin(有温度,更有深度) an amazing winform admin 框架描述 最新基于Winform实现的Web样式中后台解决方案,大型企业级开发框架. 如果你要使用Winfo ...

  8. C程序内存布局

    作为计算机专业的来说,程序入门基本都是从C语言开始的,了解C程序中的内存布局,对我们了解整个程序运行,分析程序出错原因,会起到事半功倍的作用 . C程序的内存布局包含五个段,分别是STACK(栈段), ...

  9. Shiro反序列化的检测与利用

    1. 前言 Shiro 是 Apache 旗下的一个用于权限管理的开源框架,提供开箱即用的身份验证.授权.密码套件和会话管理等功能. 2. 环境搭建 环境搭建vulhub 3. 如何发现 第一种情况 ...

  10. Coursera Deep Learning笔记 结构化机器学习项目 (下)

    参考:https://blog.csdn.net/red_stone1/article/details/78600255https://blog.csdn.net/red_stone1/article ...