ServiceMesh(服务网格)

今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础。作为架构师,如果你现在还不了解ServiceMesh的话,是否感觉有点落伍了?那么到底什么是ServiceMesh?它诞生的背景是什么?它解决什么问题?企业是否适合引入ServiceMesh?根据近年在一线互联网企业的实践和思考,从个人视角出发,我为大家一一解答这些问题。

微服务架构的核心技术问题

在业务规模化和研发效能提升等因素的驱动下,从单块应用向微服务架构的转型(如下图所示),已经成为很多企业(尤其是互联网企业)数字化转型的趋势。

图片发自简书App

在微服务模式下,企业内部服务少则几个到几十个,多则上百个,每个服务一般都以集群方式部署,这时自然产生两个问题(如下图所示):

图片发自简书App

一、服务发现:服务的消费方(Consumer)如何发现服务的提供方(Provider)?

二、负载均衡:服务的消费方如何以某种负载均衡策略访问集群中的服务提供方实例?

作为架构师,如果你理解了这两个问题,可以说就理解了微服务架构在技术上的最核心问题。

三种服务发现模式

服务发现和负载均衡并不是新问题,业界其实已经探索和总结出一些常用的模式,这些模式的核心其实是代理(Proxy,如下图所以),以及代理在架构中所处的位置,

图片发自简书App

在服务消费方和服务提供方之间增加一层代理,由代理负责服务发现和负载均衡功能,消费方通过代理间接访问目标服务。根据代理在架构上所处的位置不同,当前业界主要有三种不同的服务发现模式:

模式一:传统集中式代理

图片发自简书App

这是最简单和传统做法,在服务消费者和生产者之间,代理作为独立一层集中部署,由独立团队(一般是运维或框架)负责治理和运维。常用的集中式代理有硬件负载均衡器(如F5),或者软件负载均衡器(如Nginx),F5(4层负载)+Nginx(7层负载)这种软硬结合两层代理也是业内常见做法,兼顾配置的灵活性(Nginx比F5易于配置)。

这种方式通常在DNS域名服务器的配合下实现服务发现,服务注册(建立服务域名和IP地址之间的映射关系)一般由运维人员在代理上手工配置,服务消费方仅依赖服务域名,这个域名指向代理,由代理解析目标地址并做负载均衡和调用。

国外知名电商网站eBay,虽然体量巨大,但其内部的服务发现机制仍然是基于这种传统的集中代理模式,国内公司如携程,也是采用这种模式。

模式二:客户端嵌入式代理

图片发自简书App

这是很多互联网公司比较流行的一种做法,代理(包括服务发现和负载均衡逻辑)以客户库的形式嵌入在应用程序中。这种模式一般需要独立的服务注册中心组件配合,服务启动时自动注册到注册中心并定期报心跳,客户端代理则发现服务并做负载均衡。

Netflix开源的Eureka(注册中心)[附录1]和Ribbon(客户端代理)[附录2]是这种模式的典型案例,国内阿里开源的Dubbo也是采用这种模式。

模式三:主机独立进程代理

这种做法是上面两种模式的一个折中,代理既不是独立集中部署,也不嵌入在客户应用程序中,而是作为独立进程部署在每一个主机上,一个主机上的多个消费者应用可以共用这个代理,实现服务发现和负载均衡,如下图所示。这个模式一般也需要独立的服务注册中心组件配合,作用同模式二。

图片发自简书App

Airbnb的SmartStack[附录3]是这种模式早期实践产品,国内公司唯品会对这种模式也有探索和实践。

三种服务发现模式的比较

上面介绍的三种服务发现模式各有优劣,没有绝对的好坏,可以认为是三种不同的架构风格,在不同的公司都有成功实践。下表总结三种服务发现模式的优劣比较,业界案例和适用场景建议,供架构师选型参考:

图片发自简书App

服务网格ServiceMesh

所谓的ServiceMesh,其实本质上就是上面提到的模式三~主机独立进程模式,这个模式其实并不新鲜,业界(国外的Airbnb和国内的唯品会等)早有实践,那么为什么现在这个概念又流行起来了呢?我认为主要原因如下:

上述模式一和二有一些固有缺陷,模式一相对比较重,有单点问题和性能问题;模式二则有客户端复杂,支持多语言困难,无法集中治理的问题。模式三是模式一和二的折中,弥补了两者的不足,它是纯分布式的,没有单点问题,性能也OK,应用语言栈无关,可以集中治理。

微服务化、多语言和容器化发展的趋势,企业迫切需要一种轻量级的服务发现机制,ServiceMesh正是迎合这种趋势诞生,当然这还和一些大厂(如Google/IBM等)的背后推动有关。

模式三(ServiceMesh)也被形象称为边车(Sidecar)模式,如下图,早期有一些摩托车,除了主驾驶位,还带一个边车位,可以额外坐一个人。在模式三中,业务代码进程(相当于主驾驶)共享一个代理(相当于边车),代理除了负责服务发现和负载均衡,还负责动态路由、容错限流、监控度量和安全日志等功能,这些功能是具体业务无关的,属于跨横切面关注点(Cross-Cutting Concerns)范畴。

作者:HelloWide
链接:https://www.jianshu.com/p/27a742e349f7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/wangyu19900123/p/12123976.html

时间: 2024-08-30 13:59:36

ServiceMesh(服务网格)的相关文章

第二章 服务网格的基本特性

服务网格是一个独立的基础设施层,用来处理服务之间的通信. 典型的服务网格通常提供了一组轻量级的网络代理,代理会在应用无感知的情况下,同应用并行部署.运行. Istio特性如下: 连接: 对网格内部的服务之间的调用产生的流量进行智能管理,以此为基础,对微服务的部署.测试和升级提供保障 安全:认证.加密.和鉴权支持,在不入侵代码的情况下,加固现有服务,提高安全性. 策略:在控制面定制策略,并在服务中实施. 观察:对服务间调用进行跟踪和测量,并获取服务的状态信息. 原文地址:https://www.c

Service Mesh服务网格之Linkerd架构|前沿

今天详细介绍一下Linkerd的架构. 控制平面 Linkerd控制平面是一组在专用Kubernetes命名空间中运行的服务(在Linked默认情况下).这些服务完成各种事情--聚合遥测数据.提供面向用户的API.向数据平面代理提供控制数据等.它们共同驱动着数据平面的行为. 控制平面由四个部分组成: 控制器--控制器部署由多个容器(public-api,proxy-api,destination,tap)组成,这些容器提供了控制平面的大部分功能. Web--Web部署提供Linkerd Dash

Service Mesh服务网格清单

Service Mesh服务网格清单 Istio Istio官网 Istio中文官网 Istio开源 无需太多介绍Service Mesh明日之星,扛把子,截止2019.11还有太多问题没解决 复杂性,性能让人望而却步,能上生产的是真要技术厉害,还得内心强大,项目允许 Linkerd Linkerd官网 Linkerd中文官网 A service mesh for Kubernetes and beyond. Main repo for Linkerd 2.x. Linkerd is a ser

【译文连载】 理解Istio服务网格(第五章 混沌测试)

全书目录 第一章 概述 第二章 安装 第三章 流控 第四章 服务弹性 本文目录 第5章 混沌测试................................................................................................. 1 5.1 HTTP错误............................................................................................

Istio 服务网格进阶实战

https://www.bookstack.cn/read/istio-handbook/concepts-and-principle-istio-sidecar-injector.md 原文地址:https://www.cnblogs.com/kaobeixingfu/p/12088023.html

朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)

十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器编排的地位确定之后大家又开始实践起以K8S为核心的云原生思想和微服务的结合如何去落地,2018年又多出一个ServiceMesh服务网格的概念,大家又在思考如何引入落地ServiceMesh,ServiceMesh和K8S以及Spring Cloud的关系如何等等. 确实有点乱了,这一波又一波的热潮

Istio旨在成为容器化微服务的网格管道

在精彩的软件容器世界中,当新项目涌现并解决你认为早已解决的问题时,这感觉就像地面在你的脚下不断地移动.在许多情况下,这些问题很久以前被解决,但现在的云原生架构正在推动着更大规模的应用程序部署,这就需要新的工具和方法. 微服务就是一个很好地例子.在此模型下,典型的应用程序或服务将被分解成可以独立部署的功能模块,这些功能模块能彼此分开扩展和维护,并且链接在一起时可以提供应用或服务的全部功能.当使用容器来开发微服务时,后一块可能是棘手的.当它们可能散布在服务器节点集群中时,并且在它们的实例不断弹出时,

微服务架构ServiceMesh

公司用的架构,在此找了资料作为记录复看所用: 什么是Service Mesh? Service Mesh的概念最早是由Buoyant公司的CEO William Morgan在一篇文章里提出,他给出的服务网格的定义是: A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery

快收藏!52篇25万字,微服务、云原生、容器、K8S、Serverless精华文章集锦

2017正在走远,新年之初,小数精选过去一年阅读量居高的技术干货,从容器.K8S 到微服务.云原生.Service Mesh,汇集成52篇精华集锦,充分反映了这一年的技术热点走向. 此文值得收藏,方便随时搜索和查看.2018,小数将继续陪伴大家,为朋友们奉献更有逼格的技术内容.2018年,在IT架构领域,你想看到哪些话题,请留言告诉我~~ 微服务篇 没说出口的研发之痛,做与不做微服务的理由请添加链接描述配置中心一团糟?微服务化改造切合企业系统需求请添加链接描述Weibo Mesh服务化实践如何应