从ServiceMesh服务网格到去中心化的SOA总线

网络 通信技术
在SIdecar中的各个拦截插件实际和控制中心之间存在协同,类似鉴权处理需要访问控制中心的服务授权信息,对于日志处理需要拦截日志后将日志写入到消息中间件。对于路由处理需要访问控制中心的路由配置表等。

对于服务网格,API网关和传统的中心化架构ESB服务总线,在我头条前面文章已经谈到多次,今天继续再谈下对三者的一些思考。

缘起还是在多年前和客户交流ESB产品的时候,客户就提出能否将ESB产品去中心化,将ESB产品的能力通过SDK代理包放到各个业务系统里面去。而这也是当前ServiceMesh服务网关和Sidecar的核心思路。

在传统的单体架构下,通过ESB总线集成已经是一种标准做法,但是ESB总线本身的集中化架构是被人诟病最多的地方。由于ESB本身中心化,导致ESB总线本身可能相处一个性能瓶颈点,同时所有服务调用请求全部经过ESB总线,那么ESB如果宕机将是一个巨大的灾难。

ESB有一个很重要的核心功能就是Proxy服务代理路由,对底层位置透明并提供统一出口,所以你可以看到类似Ngnix也可以提供这个核心能力。当前很多API网关也是基于Ngnix和OpenRestry进行二次开发。

所以到了微服务阶段。

很多人理解通过服务注册中心实现了彻底的去中心化,但是当你考虑到多个独立的微服务团队集成,一个大的微服务应用需要对外统一暴露API接口服务的时候,这些场景仍然需要使用API网关或微服务网关。

所以API网关本身也是中心化的架构,由于是中心化架构,更加容易增加各种流量拦截插件来实现安全,日志,流控,路由等各种接口管控能力。

那么有无一种去中心化架构也能够实现上述能力?

当前主流方案就演进到下发Sidecar代理,控制流和数据流分离的ServiceMesh服务网格架构模式。下图是API网格和ServiceMesh架构的一个对比。

可以看到API网关的大部分能力都可以被SericeMesh来替代。

唯一的就是上图提到的南北流量和对外统一接口暴露问题,这个仍然需要处理,即实现最基本的Proxy和南北流量分发的能力。

只要具备这个能力就可以了,这个能力可以是硬件负载均衡能力,也可以是软件集群或反向代理。如果对应到K8s集群来说,即对应到K8s的Ingress网关来提供统一对外出口。

在Docker+K8s的容器云资源调度平台下,动态扩展的弹性计算节点统一由K8s来进行管理,那么由K8s Ingress网关对外暴露统一接口是合理的。剩余的接口管控能力应该全部下沉到SreviceMesh来完成。

因此:SreviceMesh网格+Ingress网关可完全实现去中心化的ESB能力。

简单来说我们还是希望去实现一个去中心化的ESB产品,完全保留ESB总线具备的各种能力,实现数据流和控制流分离,并配合ServiceMesh的思路来进行开源实现。

服务自发现还是服务手工注册?

在基于微服务架构框架下,可以实现服务自发现。服务自发现实际是对开发态有影响,类似的开发框架,在开发阶段就需要做的开发配置,代码注解增加等。

还有一种就是还是传统的人工去注册和接入API接口。如上图,供应商微服务提供了一个查询的Rest API接口服务。

http://10.0.0.1/VendorInfo

那我们还是需要在管控平台对该接口进行注册操作。该注册还是要通过网关,仅仅使用了最基本的Proxy路由代理能力进行一次封装后暴露。如果是南北流量走网关封装后的接口暴露,如果是东西流量则直接走原始的供应商微服务提供的API接口地址即可。因此实际消费端的服务调用,仍然通过服务注册中心能力。

  • 先在管控治理平台对供应商查询服务进行注册
  • 消费方先从注册中心查询供应商查询接口服务
  • 消费方发起接口调用
  • 消费方或提供方端的Sidecar进行拦截处理

即两种流量场景不同的方式进行处理。

内部微服务间东西流量场景可以在消费端和提供端都通过Sidecar流量拦截进行各种安全,日志管控处理。如果是外部的APP或外部应用对接口调用,则只在服务提供端进行Sidecar的流量拦截和处理。

Sidecar和控制中心协同

在SIdecar中的各个拦截插件实际和控制中心之间存在协同,类似鉴权处理需要访问控制中心的服务授权信息,对于日志处理需要拦截日志后将日志写入到消息中间件。对于路由处理需要访问控制中心的路由配置表等。

那么如控制中心本身也出现故障,对于接口服务调用还是存在影响,控制中心本身也需要分布式集群部署以提升高可用性。同时可以通过在Sidecar端构建一个轻缓存体系,来实现控制中心宕机下的可用性。

责任编辑:武晓燕 来源: 人月聊IT
相关推荐

2023-09-07 09:00:00

数据网格数据驱动

2022-11-24 14:21:27

微服务ISTIO

2023-06-18 19:21:04

技术架构服务网格

2020-11-15 23:48:57

服务网格微服务网络网络技术

2022-05-16 08:00:00

服务网格架构Kuma

2020-01-07 09:25:02

服务网格微服务Kubernetes

2019-08-29 08:00:00

微服务架构服务网格

2020-07-13 07:00:03

微服务服务网格架构

2020-08-26 05:45:40

服务网格DevOps开发

2020-10-21 13:31:53

服务网格开源微服务

2021-04-25 08:48:36

Traefik mes服务网格Kubernetes集

2023-09-20 11:33:41

服务网格监控报警

2021-07-26 08:10:24

微服务单体架构

2022-08-09 08:00:00

服务网格云原生工具

2009-03-21 16:43:29

SOA虚拟化IT

2022-07-06 08:25:17

服务网格Kubernetes

2022-09-06 10:46:34

服务网格可观测性微服务

2021-08-27 11:42:51

Nacos云原生阿里云

2024-09-27 10:05:02

2021-04-02 22:00:50

服务网格微服务
点赞
收藏

51CTO技术栈公众号