Midas吊打Spring Cloud变为Service Mesh

96 阅读5分钟

1. 背景

笔者2014年开始关注Spring Cloud并使用,也是目前国内Spring Cloud的骨灰级玩家。随着istio等Service Mesh出现,Spring Cloud目前是一个比较鸡肋的东西,即使有国内Spring Cloud Alibaba的加持,去适配使用Nacos注册中心替换Eureka等。之所以说鸡肋是因为有学习门槛,且坑多,Spring Cloud刚开始集成Netflix的开源组件,转而抛弃替换,升级兼容各种问题。

   国内各大云厂商,比如spring-cloud-alibaba,spring-cloud-tencent等,开始将自己的中间件适配Spring Cloud Common提供商业服务,俗称上云。但本质解决不了,Spring Cloud升级的问题,也无法落地Service Mesh,让业务开发同学回归到只需关心业务代码。

有人说基于Spring Cloud+istio或者Spring Boot+istio去落地Service Mesh是可以的,但目前是个伪命题,前提是k8s环境标准化,且多次注入istio的过程中,如果没有Spring Cloud兜底,你敢玩吗?公司如果没有能彻底驾驭K8S和Istio源码的人吗,你敢玩吗?即使公司有钱,有驾驭istio的人存在,上了伪Service Mesh?那Spring Cloud恶心的jar,还在应用里存在且work。如果你是个基础架构,中间件洁癖的人你能忍吗?当然,我不能忍。 背景原因很多懂的都懂,下面进入正题。

2. Midas概述

Midas,中文名米达斯,是古希腊神话中的点石成金,化腐朽为神奇之神。目前定位是全球首发的One Agent+Service Mesh产品。普通的Java应用,使用Midas将会达到点石成金,化腐朽为神奇的效果。

图片

Midas团队的责任就是厂商中立,提供源码和方案服务,通过开源的等方式,让所有玩微服务的公司,只需要专注业务发展,消化需求,降本增效,应对目前低迷的全球经济并生存!

3. Midas的产生背景

  • 为了降低技术门槛和学习成本

    让玩Spring Cloud和Dubbo的开发,回归到只需要懂Spring Boot即可!

  • 为了解决技术的推广和升级

   做过基础架构和中间件的研发都知道,中间件的推广和升级尽量不影响业务,不需要业务开发参与最好,PS:有强势CTO的公司除外。原因很简单,业务团队有时候需求都消化不完,更别说技改,还历史技术债,技术的升级和接入。因此Java体系,Java Agent的出现无非就是福音。

  • 为了快速拿到结果

比如,通过Java Agent的方式接入Skywalking, 全链路压测,全链路流量录制和回放,全链路灰度等,只需要对应的Java Agent产品Ready,就能快速接入,拿到结果

  • 为了解决技术债,架构治理当一家公司有多套Nacos,多套Eureka,多套调用方式,多套服务治理体系等存在时,为了治理还技术债,需要Java Agent处理
  • 为了落地Sevice Mesh而生

落地Service Mesh本质还是为了解决基础架构和中间件升级的问题,但由于istio,Spring Cloud的鸡肋,Midas应运而生

  • 治理众多Agent而生

市面上多种Java Agent产品重复建设,重复字节码拦截,且冲突与互斥等。因此需要One Agent产品制定标准,统管所有Java Agent的产品的生命周期和行为

4. Midas快速入门

4.1  工程列表清单Midas快速入门将会使用一个服务消费,通过二方包去调用服务提供者,表格如下所示

应用名说明备注
midas-demo-new-consumer服务消费者纯Spring Boot应用
midas-demo-new-provider-client二方包纯Spring Boot应用
midas-demo-new-provider服务提供者纯Spring Boot应用

 PS:服务消费者和服务提供者,是纯Spring Boot应用不依赖Spring Cloud任何东西,也不依赖Nacos等中间件。

4.2  服务消费者

  • midas-demo-new-consumer

    服务消费者的依赖如下所示仅依赖Spring Boot和二方包 图片

4.3  服务提供者提供的调用二方包

  • midas-demo-new-provider-client

- 服务提供者提供出来的二方包代码如下所示:

图片

Tips: 接口的定义兼容大家Spring Cloud OpenFeign的使用习惯,

当然我们也有@MidasClient的定义- 二方包的依赖如下所示:

图片

- 引入的注解依赖包,仅只有2个注解,如下所示! 图片

Tips: 注解的定义跟Spring Cloud OpenFeign类路径一样

4.4  服务提供者

  • midas-demo-new-provider- 服务提供者的依赖如下所示:

图片

图片

4.5  Midas Agent的

Midas Agent 1.0结构如下所示,Moss是Midas中的服务治理Agent,目前作为一个插件被Midas管控,也就是最简单的Midas作为One Agent的角色。

图片

Tips: Moss 插件将会承担类似Spring Cloud的功能进行服务注册与发现,限流熔断等服务治理功能

4.6  分别启动服务提供者和消费者- 服务提供者的启动信息如下

图片 控制台信息可以看到Midas启动成功,服务提供者已经成功注册到Nacos上,如下图所示:

图片

- 服务消费者的启动信息如下

图片

图片

4.7  服务提供者发起调用- 服务消费者通过Swagger发起调用,如下所示:

图片

- 服务消费者Controller收到请求,将通过服务提供者sdk进行服务发现调用

图片

- 服务提供者收到消费者的调用请求,并处理返回

图片

- 服务消费者通过Swagger发起调用,如下所示: 图片

5. 总结

通过Midas Demo,可以看到如何只需要会定义接口,会用Spring Boot即可实现服务之间的相互调用,让玩Spring Cloud的人不在迷惑,不需要学习成本,只需懂Spring Boot即可,实现真正意义上的Service Mesh。 图片