SpringCloud服务治理(六)服务版本、多环境治理

558 阅读3分钟

使用Decision实现服务治理下多版本多环境治理

Decision

基于Spring Cloud Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用等组件全方位增强的微服务解决方案,可通过设置Header或者配置中心配置来定义路由策略,并将路由策略传递到全链路服务中,实现在全链路中访问指定的服务版本。 decision是基于开源的字节码框架bytebuddy开发的环境治理工具,通过javaagent字节码织入技术实现,对业务代码完全透明无侵入,业务代码无需做修改即可实现服务的自定义路由,借助于类隔离机制,保证了业务代码的安全性,从而实现高效稳定的微服务环境治理方案

目标群体

  • 对于多团队开发多个服务时,每个团队都需要自己的一套开发环境进行及时的验证测试,导致开发环境资源和维护成本过高
  • 开发人员平时想在本地进行调试时,需服务注册到注册中心,且并不是每次请求都能到达本地,而且还影响其他人使用
  • 需要对服务进行灰度时,不知如何选择服务版本

源码

架构核心

version路由策略

策略说明:
  • 通过header中配置对应服务的version信息进行服务版本的路由选择,目前有两种方式添加header信息,①通过网关的配置添加配置参数decision.header.version来配置 ②通过在外部系统的http请求中(例如在Nginx中统一配置、在前端工程中统一配置、或者在postman等工具中配置)设置header值vd-version来配置,如果两种方式都配置的话,外部系统配置优先级大于网关配置中的配置
  • 当请求链路中的服务未在header中指定版本,则默认是选择common版本(所以每个服务都需要指定common版本),如为配置common版本并且header中未指定版本会导致找不到对应的服务

env路由策略

策略说明:
  • 通过header中配置对应服务的env信息进行服务的路由选择,目前有两种方式添加header信息,①通过网关的配置添加配置参数decision.header.env来配置 ②通过在外部系统的http请求中(例如在Nginx中统一配置、在前端工程中统一配置、或者在postman等工具中配置)设置header值vd-env来配置,如果两种方式都配置的话,外部系统配置优先级大于网关配置中的配置
  • 当请求链路中的服务未在header中指定环境或者未找到指定的环境,则默认是选择common环境,如为配置common版本并且header中未指定版本会导致找不到对应的服务