文档章节

Service Mesh简史

好雨云帮
 好雨云帮
发布于 06/25 13:47
字数 2193
阅读 25
收藏 0

William Morgan

Service Mesh是一个相当新的概念,讲它的“历史”似乎有些勉强。就目前而言,Service Mesh已经在部分企业生产环境中运行了超过18个月,它的源头可以追溯到2010年前后互联网公司面对大规模业务的开发。

那么Service Mesh为什么会突然变成一个热门话题的?

Service Mesh是一个软件基础设施层,用于控制和监视微服务应用的内部、服务到服务的通信,通常的形式是部署在应用旁网络代理的“数据平面(data plane)”,或者是与浙西诶代理交互的“控制平面(control plane)”。在Service Mesh模式下,开发者对服务网格无感知,而运维人员获得了一套新工具,协助确保服务的可靠性、安全性和可见性。

它通常采用部署在应用程序代码旁边的网络代理的“数据平面”和用于与这些代理交互的“控制平面”的形式。在这个模型中,开发人员(“服务所有者”)不知道服务网格的存在,而操作员(“平台工程师”)获得了一套新的工具,以确保可靠性、安全性和可见性。

对于很多公司来说,Docker和Kubernetes已经“解决了部署”(至少一开始是这样的),但还没有解决运行时的问题,这正是Service Mesh的用武之地。

“解决了部署”是什么意思?使用Docker和Kubernetes等工具可以显著降低部署时的操作负担。有了这些工具,部署100个应用程序或服务的工作量不再是部署一个应用程序的100倍。这是向前迈出的一大步,对许多公司来说,这将显著降低采用微服务的成本。这不仅因为Docker和Kubernetes在所有合适的级别上提供了强大的抽象,而且因为它们标准化了整个组织的打包和部署模式。

但是一旦应用程序开始运行,又是怎样的情形?毕竟,部署不是生产的最后一步——这个应用程序仍然需要运行、需要交付、需要产生价值。因此,问题就变成了:我们是否可以用Docker和Kubernetes标准化部署时间操作(deploy-time ops)的相同方式来标准化应用程序的运行时操作?

要回答这个问题,不妨求教Service Mesh。Service Mesh的核心是提供统一的、全局的方法来控制和测量应用程序或服务之间的所有请求流量(用数据中心的话说,就是“east-west”流量)。对于采用了微服务的公司来说,这种请求流量在运行时行为中扮演着关键角色。因为服务通过响应传入请求和发出传出请求来工作,所以请求流成为应用程序在运行时行为的关键决定因素。因此,标准化流量管理成为标准化应用程序运行时的工具。

通过提供api来分析和操作此流量,Service Mesh为跨组织的运行时操作提供了标准化的机制——包括确保可靠性、安全性和可见性的方法。与任何好的基础架构层一样,Service Mesh采用的是独立于服务的构建方式。

Service Mesh如何形成

那么,Service Mesh是从哪里来的呢?通过做一些“软件考古学”,我们发现服务网格提供的核心功能——诸如request-level的负载均衡、断路器、重试、检测——并不是基本的新特性。相反,Service Mesh是功能的重新打包——a shift in where,not what。

Service Mesh起源于2010年左右应用架构的三层模型——一种简单的体系结构,一度为web上的绝大多数应用提供“动力”。在这个模型中,应用流量首先由“web层”来处理,后者又会与“应用层”进行对话,之后又会与“数据库层”对话。web层中的web服务器被设计成能够非常快速地处理大量传入的请求,并将它们小心地交给相对较慢的应用服务器(Apache、NGINX和其他流行的web服务器都有非常复杂的逻辑来处理这种情况)。同样,应用层使用数据库库与back stores进行通信。这些库通常以一种针对这个用例进行优化的方式处理缓存、负载均衡、路由、流控制等。

So far so good,但是这个模型面对大规模业务时开始显露出疲态——尤其是在应用层,随着时间的推移它会变得非常大。早期的网络规模公司——谷歌、Facebook、Netflix、Twitter——学会了把这块巨石分解成许多独立运行的碎片,催生了微服务的兴起。在引入微服务的那一刻,east-west traffic随之引入。在这个世界上,通信不再是专门的,而是在每个服务之间。当它出错时,网站就会崩溃。

这些公司都以类似的方式进行应对——他们编写了“fat client”库来处理请求流量。这些库——谷歌的Stubby、Netflix的HYstrix、Twitter的Finagle——提供了跨所有服务的统一的运行时操作方式。开发者或服务所有者将使用这些库向其他服务发出请求,库将在后台执行负载均衡、路由、断路等等。通过为应用中的每个服务提供统一的行为、可见性和控制点,这些库表面上形成了第一个Service Mesh。

代理崛起

当我们回到当下以云为本的世界,这些库仍然存在。但是,由于进程外代理提供的操作便利,库的吸引力正在降低——尤其是在与容器和编排的出现所带来的部署复杂性显著降低的情况下。

代理绕过了库的许多缺点。例如,当一个库发生更改时,这些更改必须在每个服务中部署,这个过程通常需要复杂的组织协作。而代理,无需重新编译和重新部署,就可以升级应用。同样,代理允许使用多种语言系统,应用可以由不同的语言编写,当然这种方法对于库来说代价是非常大的。

也许对于大型组织来说,最重要的是,在代理服务器而不是库中实现——服务网格负责将运行时操作所需的功能提供给服务所有者,并被这些功能的最终用户掌握 - 平台团队。提供者和消费者的这种对齐,允许这些团队掌握自己的命运,并将dev和ops之间的复杂依赖关系分离。

以上这些因素共同促成了Service Mesh的兴起,也使运行时操作变得更为健全。通过部署一个分布式代理的“网”,可以作为底层基础设施的一部分维护,而不是维护应用本身,并通过提供集中的api来分析和操作流量,Service Mesh为整个组织运行时操作提供了一个标准的机制,同时确保可靠性、安全性和可见性。

  • END -

开源PaaS Rainbond v3.6.0现已发布,新增Service Mesh微服务架构开箱即用,通过插件式扩展来实现治理功能,并支持spring cloud、api gateway、dubbo等主流微服务架构。

阅读更多

© 著作权归作者所有

共有 人打赏支持
好雨云帮
粉丝 17
博文 92
码字总数 107058
作品 1
东城
Service Mesh vs API Gateway,用途特征大相径庭?

作者:Kasun Indrasiri 翻译:赵化冰(博客链接:http://zhaohuabing.com/) 原文:Service Mesh vs API Gateway 地址:https://medium.com/microservices-in-practice/service-mesh-vs-api-......

ServiceMesh中文网
04/12
0
0
service mesh与api gateway有何不同?

Kasun Indrasiri service mesh与api gateway的关键特征可以帮助我们更好的区分两者。 API Gateway: 将服务作为托管api暴露给外部 api gateway的核心目标是将微服务作为托管的api暴露给外部系...

好雨云帮
06/14
0
0
What Service Meshes Mean for Enterprise Security

Service meshes: Heard of them? By now, you may have. Service meshes are becoming an increasingly important part of the container conversation.This article offers a brief overvie......

openthings
03/19
0
0
下一代微服务架构——Service Mesh

Service Mesh 是什么?为什么我们需要它? Service Mesh(服务网格)是一个基础设施层,让服务之间的通信更安全、快速和可靠。如果你在构建云原生应用,那么就需要 Service Mesh。 在过去的一...

JFrog中国
2017/11/30
0
0
图文直击 | 北美KubeCon爆点之Service Mesh

导读 服务网格(Service Mesh)是本次大会的最热门话题之一,北美KubeCon第一天有不少Keynote和Session围绕Istio、Linkerd和Conduit等热门的Service Mesh项目展开,故挑选其中比较有代表的分...

lq1ns259ej3okyvk4jf
2017/12/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 对象赋值 去除关联性。

js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象 我最近在做一个vue 项目的时候,遇到了一个对象的问题。 当我们在项目需要 复制一个对象到另一个对象...

xiaogg
10分钟前
0
0
art-template4.0使用

art-template javascript 模板引擎,官网:https://github.com/aui/art-template 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出HTML 流程控制 遍历 调用自定义函数方法 ...

不负好时光
10分钟前
0
0
HANA tenant backup

HANA tenant backup Hello, Script from note 1651055 - Scheduling SAP HANA Database Backups in Linux isn't Multi-Tenant complient. I modified script to be able to backup tenant da......

rootliu
12分钟前
0
0
Java并发编程:阻塞队列

本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。 ...

Java小铺
14分钟前
0
0
mysql8添加用户帐户

版本8.0 MySQL 8.0参考手册 / ... / 添加用户帐户 6.3.2添加用户帐户 要创建MySQL帐户,请使用用于创建帐户和建立其权限的帐户管理语句,例如CREATE USER和 GRANT。这些语句使服务器对基础授...

SunHacker
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部