ServiceMesh--Spring Cloud

  1. spring cloud迁移之路
  2. SpringCloud迁移
  3. 长期共存的大背景
  4. SpringCloud的不足之处
  5. 为未来铺路
  6. 路在何方

spring cloud迁移之路

虽然service mesh号称下一代微服务,取代spring cloud是service mesh与生俱来的天然目标之一。

但是以目前市场形式,spring cloud在未来很长一段时间之内都会是市场主流和很多公司的第一选择。如何在迁移到service mesh之前加强spring cloud,并为将来转入service mesh铺路,是一个艰难而极具价值的话题。

SpringCloud迁移

虽然Service Mesh号称下一代微服务,取代以Spring Cloud为典型代表的传统侵入式开发框架是Service Mesh与生俱来的天然目标之一。

但是以目前市场形式,Spring Cloud在未来很长一段时间之内都会是市场主流和很多公司的第一选择。如何在迁移到Service Mesh之前加强Spring Cloud,并为将来转入Service Mesh铺路,是一个艰难而极具价值的话题。

长期共存的大背景

其次,目前Service Mesh处于青黄不接的尴尬时期,暂时Istio和Conduit这两个寄予厚望的产品都还没有production ready,考虑到即使1.0发布,社区和用户也还有一个逐步接触,掌握的过程。而且很多公司出于谨慎也可能采取观望的姿态,Service Mesh的普及必然会需要时间。

类比之下,今天Service Mesh的在社区的知名度方面和2015年时微服务的状态类似。但是,有一个很大不同在于:微服务在2015年时在实践方面已经有很多公司已经实践并积累了足够的经验,包括类库,典型如Netflix和OSS套件,但是Service Mesh,尤其是以Istio和Conduit为代表的具备强大管理能力的Service Mesh,至今还没有落地实践可以参考。

因此,未来一段时间,必然会存在侵入式开发框架如Spring Cloud和Service Mesh并存的局面,也必然会有很多致力于微服务迁移的公司继续选择使用Spring Cloud。期间会有很长一段时间,Service Mesh和Spring Cloud并存。

SpringCloud的不足之处

虽然Spring Cloud近两年风光无限,但是SpringCloud的不足还是非常明显,尤其服务治理功能太过薄弱。对比Istio的功能集合,Spring Cloud差距明显。

另外Spring Cloud的设计是封装一套通用接口,然后理论上可以有多种实现,典型如服务发现的DiscoveryClient,可以有Eureka/zookeeper/consul等诸多实现。但是,Spring Cloud的封装过于简化,几乎是只支持最小功能集合,缺乏大量实用功能。

和成熟的服务注册机制(如原生的Euraka/Consul)相比,缺少诸多功能:

  • 没有version参数,所以无法实现语义化版本。

  • 没有group或者namespace参数,所以无法为服务分组,当服务数量多时管理困难。

  • 没有zone/datacenter参数,所以无法实现多机房部署

  • 服务没有status参数,无法支持特殊状态例如consul的”maintainance”。注:ServiceRegistry接口上又有setStatus()。

  • 接口上也没有定义监听方法,只能交给具体实现。

除了服务注册和服务发现外,Spring Cloud目前严重依赖Ribbon来实现客户端负载均衡,而Ribbon是不支持权重的,因此类似”切1%的流量去某个实例”这样的典型灰度需求在Spring Cloud下是一筹莫展。

为未来铺路

因此,必须找到一个可行的方案,可以解决过渡期Spring Cloud体系和Service Mesh体系间服务间通讯问题。不然现有上Spring Cloud的用户,届时会遇到很大麻烦,而如果不能从容的完成迁移,那么必然会拖累Service Mesh的普及。

今天的Service Mesh和Spring Cloud,几乎没有相通的东西,对用户而言是两种截然不同的开发体验。我很难想象,目前正在向Spring Cloud迁移的用户,在历尽辛苦完成迁移之后,发现又需要再次迁移到Service Mesh时,会是何种心情?

在加强Spring Cloud各个功能(如上所列)期间,是否可以找到合适的方式,至少在编码/管理/配置的层面上,让一些Spring Cloud和Service Mesh下相同的功能对外呈现相同之处?比如,以同样的方式配置负载均衡算法,配置灰度,实现服务路由。

目前,Service Mesh和Spring Cloud都有一种各行其是无视对方存在的感觉。我们无意指责任何一方,只是作为一个负责任的引路人,我们在告诉客户,“你们先上Spring Cloud,等Service Mesh成熟后再换Service Mesh”的同时,是否有责任将这条路趟平一点?或者更进一步,将路铺好?

路在何方

对于自成一家的体系,通常是现有侵入式开发框架,再以此为基础在原有SDK上继而搭建出来service mesh,此时的侵入式开发框架和自家的service mesh底层共用代码,要实现共存和平滑过渡难度并不大。比如他们有相同的服务注册,相同的负载均衡/路由/认证……

但是对于Spring Cloud和以istio/conduit为代表的service mesh,代码实现上没有任何共通之处,要强行铺路谈何容易。反倒是Spring Boot + Service Mesh全新开始轻松上路要舒坦的多。

在后续的文章中,将就此深入展开,暂时先只列出当前的一些想法,容我稍后细细道来:

  • 增强型的服务感知和访问

    必须统一服务注册的模型,或者退一步,可以将现有服务注册模型和这个统一模型进行相互转换/桥接

    要能打通多个服务的注册中心,做到跨注册中心的服务感知

    客户端SDK要有能力将请求发送到跨注册中心的目标服务

  • 配置方式

    业务型的配置倒是简单,只要使用同一个配置中心即可

    但是对于服务治理类型的配置,则需要更多工作,甚至可能只能在管理界面一层统一而底层实现大相径庭,比如spring cloud下更多的是将配置传递给调用sdk的代码,而istio/conduit下则是通过yaml文件来更改行为。

  • 服务治理

    Spring Cloud欠债太多,这块要填的坑很大


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wshten@gmail.com

文章标题:ServiceMesh--Spring Cloud

本文作者:KevinTen

发布时间:2019-09-08, 00:00:00

最后更新:2019-09-08, 16:23:54

原始链接:http://github.com/kevinten10/2019/09/08/Cloud/servicemesh/Cloud-SM-问题-Springcloud/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

csdn zhihu github