23

谈ServiceMesh服务网格(6.13)

 5 years ago
source link: https://www.tuicool.com/articles/NbimYrB
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

ymEv6bv.jpg!web

根据Linkerd CEO William Morgan定义,Service Mesh是用于处理服务间通信的基础设施层,用于在云原生应用复杂的服务拓扑中实现可靠的请求传递。在实践中,Service Mesh通常是一组与应用一起部署,但对应用透明的轻量级网络代理。Service Mesh与传统基础设施层不同之处在于,它形成了一个分布式的互连代理网络,以sidecar形式部署在服务两侧,服务对于代理无感知,且服务间所有通信都由代理进行路由。

为什么需要Service Mesh

首先我们看下服务和进程间通信,除了完成基本的消息交互外,还需要关注服务注册发现,代理,路由,流量控制,安全,日志等共性的技术问题。而这些共性技术问题,在前面我们谈微服务架构的时候谈到过,这些不是服务注册中心能够全部解决的,更多的是依赖于微服务网关或API网关来解决这些共性问题。

通过API网关解决这些共性问题是当前的一种主流做法,而这种做法唯一的问题点在哪里呢?即API网关本身又变成了我们微服务架构中的一个中心点,即整个架构体系不再是完全去中心化的架构体系,API网关变成了一个中心点,那么就存在单点故障可能,存在性能瓶颈可能等。

而Service Mesh服务网格可以理解为API网关能力本身下沉到我们实际的服务两侧进行部署,即在部署微服务模块的机器上同时部署ServiceMesh服务网格能力,以达到完全去中心化的目的。

在服务发现模式我们曾经谈到过,一种是类似API网关来实现完全的集中化管理,还有就是客户端嵌入代理和主机独立进程代理模式。而Service Mesh网格是主机独立进程代理模式,即虽然和微服务模块一样部署在服务两侧,但是并不和微服微模块一起打包进行部署,而是独立进程部署。即在一个Server上,可以多个微服务共享一个Service Mesh网格代理端。

参考: https://blog.csdn.net/zl1zl2zl3/article/details/84440685

记得两三年前就谈到过,能否实现ESB类产品的完全去中心化,而ServiceMesh正好是这种完全去中心化的部署架构模式。真正解决整体微服务架构里面的单点故障问题。

ServiceMesh架构

参考: https://blog.csdn.net/zyqduron/article/details/80433995

Service Mesh由data plane构成,其中所有服务通过sidecar代理进行服务通信。(所有代理相互连接形成一个Mesh,Service Mesh由此得名)网格同时包含一个control plane——可以将所有独立的sidecar代理连接到一个分布式网络中,并设置网格还包括一个控制平面——它将所有独立的sidecar代理连接到一个分布式网络中,并设置由data plane指定的策略。

对于ServiceMesh可以理解为在我们部署一个或多个微服务模块的独立Server上,都会同时部署一个Sidecar代理,可以一个业务模块或多个业务模块共享一个代理。代理除了负责服务发现和负载均衡,还负责动态路由、容错限流、监控度量和安全日志等功能,这些功能是具体业务无关的。

EnqmQbY.jpg!web

Service Mesh是Kubernetes支撑微服务能力拼图的最后一块

参考: http://www.mamicode.com/info-detail-2272290.html

在为什么 kubernetes 天然适合微服务中我们提到,Kubernetes是一个奇葩所在,他的组件复杂,概念复杂,在没有实施微服务之前,你可能会觉得为什么Kubernetes要设计的这么复杂,但是一旦你要实施微服务,你会发现Kubernetes中的所有概念,都是有用的。在我们微服务设计的是个要点中,我们会发现Kubernetes都能够有相应的组件和概念,提供相应的支持。

UVr6NjU.jpg!web

其中最后的一块拼图就是服务发现,与熔断限流降级。

众所周知,Kubernetes的服务发现是通过Service来实现的,服务之间的转发是通过kube-proxy下发iptables规则来实现的,这个只能实现最基本的服务发现和转发能力,不能满足高并发应用下的高级的服务特性,比较SpringCloud和Dubbo有一定的差距,于是Service Mesh诞生了,他期望讲熔断,限流,降级等特性,从应用层,下沉到基础设施层去实现,从而使得Kubernetes和容器全面接管微服务。

那么我们可以看到,在实施微服务架构中,如果需要对外暴露能力和交互,我们谈到了必须要使用API网关来实现能力的暴露以实现服务代理和服务透明。但是如果一个微服务架构不需要和外部打交道,同时仍然需要实现安全,日志和服务限流能力,那么我们就完全可以考虑采用ServiceMesh服务网格能力来实现,同时和Kubernetes和容器化技术实现集成。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK