lusains / decision

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

decision

介绍

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

目标群体

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

源码

相关文章

工程架构

架构核心

总体路由策略

安装教程

  1. 下载代码 ,git clone https://github.com/IRONMAN-KD/decision.git
  2. 打包
cd decision/decision-agent
mvn package
cd decision/decision-plugin
mvn package

打包后会生成对应的文件在“decision-agent-bin”目录里

  1. vm参数配置 添加启动参数
-javaagent:/home/decision-agent-bin/decision-agent.jar

使用说明

1. decision-agent-bin 目录文件说明

  • decision-agent.jar 核心jar包,agent的入口
  • cfg目录,包含decision-logback.xml日志配置文件,后续会添加decision相关的配置
  • plugins目录,里面包含了需要织入的插件jar包

2. 支持的微服务组件以及版本说明

spring cloud版本说明
decision版本 分支 Spring Cloud版本 Spring Boot版本
1.0.0 master Hoxton.SR5 ↑
Hoxton
Greenwich
Finchley
2.3.x.RELEASE
2.2.x.RELEASE
2.1.x.RELEASE
2.0.x.RELEASE
spring cloud组件支持说明
组件类型 组件名称 备注
注册中心 nacos 已支持
Eureka(开发中) 已在开发准备中
Consul(开发中) 已在开发准备中
服务网关 gateway 已支持
Zuul(计划中) 计划中
消息中间件 RabbitMq 已支持广播模式下根据header选择消费者
kafaka(计划中) 计划中

3.如何使用

  • 在启动时添加VM参数
-javaagent:/home/decision-agent-bin/decision-agent.jar
  • 需要在nacos的配置中添加metadata的配置, 注意:当header中没有指定服务版本以及环境时,默认会选择common版本和环境进行路由,所以服务必须要有一个common版本存在
metadata:
   version: common
   env: common

metaData

路由策略

1.version路由策略

metaData

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

2.env路由策略

env路由策略

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

交流与反馈

qq群: 1021457517
微信号: IronMan_lkd(请备注decision交流,进微信群)

特别说明

目前还在不断更新迭代中,有兴趣的朋友可以一起参与进来!!

About

License:Apache License 2.0


Languages

Language:Java 100.0%