Decision基于java-agent实现微服务的环境治理

Decision--基于java-agent实现微服务的动态路由

前言

随着技术不断的发展,在业务规模化和研发效能提升等因素的驱动下,大多数公司都逐步从单体架构演变到微服务架构。而在微服务架构模式下,一个系统的服务少则几十个,多则上百个,所以存在许多问题需要解决。比如:

  • 对于多个开发团共同开发一个系统来说,最可能需要多套开发测试环境进行开发测试。这样不仅增加了运维的难度也大大增大了机器资源成本。


    多环境开发
  • 对于开发人员来说需要本地的服务注册到开发环境上进行验证,如果是多个开发人员在同一个环境共同开发时,则会相互影响,从而大大降低开发效率。


    本地同一服务开发

如果你正在使用springcloud,并且有遇到以上的问题,那以下内容可能会对你有所帮助。

decision

介绍

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

源码地址

https://github.com/IRONMAN-KD/decision

工程架构

路由架构

通过decision的帮助,不在需要多个独立的隔离开发环境,可以将所有服务都部署在同一个开发环境,并且注册到统一的注册中心,然后在http请求中,带上对应的header信息,剩下的交由decision帮你完成对应的动态路由,具体路由策略如下所示:

① version路由策略

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

② env路由策略

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

核心技术

java agent & bytebuddy

decision是基于bytebuddy框架(ByteBuddy是一个可以在运行时动态生成java class的类库)通过java agent字节码织入技术,实现对业务代码无侵入的拦截增强,从而能够达到对业务代码完全透明无感知的动态路由效果。具体关于java agent和bytebuddy的介绍以及细节,这里就不在赘述了,网上有许多优秀的文章介绍它们。

基于SPI的插件化组件

decision是通过对springcloud的各个组件进行拦截获取信息和字节码织入来达到上下文传递和改变路由规则的效果,所以为了方便扩展对更多组件的支持,采用了SPI技术,进行可插拔式的组件管理机制。


SPI机制实现

插件的具体实现(更新中)

decision插件详解--核心插件Ribbon负载均衡器

总结

以上就是对decision的一些介绍,如果大家觉得对你有所帮助,或者有感兴趣的,欢迎大家体验使用和交流,后续我也会不断去优化和支持更多的插件,同时对于插件的具体实现也会更新相应的文章与大家分享,也希望大家能提出高贵意见和指出不足,谢谢!

你可能感兴趣的:(Decision基于java-agent实现微服务的环境治理)