5.5.11(JAN 6, 2020)
Nepxion Discovery 5.5.11 发布
发布日志
版本更新:
- 升级Spring Boot到2.1.11.RELEASE
- 升级Sentinel到1.7.1
功能更新:
- 支持全链路灰度权重和灰度匹配组合式策略,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<strategy-customization>
<weights>
<weight id="1" version-id="version-route1=90;version-route2=10"/>
</weights>
<routes>
<route id="version-route1" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</route>
<route id="version-route2" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>
</routes>
</strategy-customization>
</rule>
支持版本匹配、区域匹配、IP地址和端口匹配。以版本匹配为例,该组合式策略表示:
- a服务1.0版本向网关提供90%的流量,1.1版本向网关提供10%的流量
- a服务1.0版本只能访问b服务1.0版本,1.1版本只能访问b服务1.1版本
该功能的意义是,网关随机权重调用服务,而服务链路按照版本匹配方式调用
支持Spring Matcher的通配符匹配,例如,版本前后缀,区域前后缀,IP段,端口前后缀等通配符匹配。以IP段和端口匹配为例:
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<strategy-customization>
<weights>
<weight id="1" address-id="address-route1=90;address-route2=10"/>
</weights>
<routes>
<route id="address-route1" type="address">{"discovery-guide-service-a":"192.168.0.*", "discovery-guide-service-b":"80*"}</route>
<route id="address-route2" type="address">{"discovery-guide-service-a":"192.168.*", "discovery-guide-service-b":"707?"}</route>
</routes>
</strategy-customization>
</rule>
- 如果全链路灰度权重和灰度匹配组合式策略仍旧不能满足需求,可以自定义更复杂的场景,示例如下:
public String getRouteVersion() {
List<Pair<String, Double>> weightList = new ArrayList<Pair<String, Double>>();
weightList.add(new ImmutablePair<String, Double>(aRouteVersion, 30D));
weightList.add(new ImmutablePair<String, Double>(bRouteVersion, 70D));
MapWeightRandom<String, Double> weightRandom = new MapWeightRandom<String, Double>(weightList);
return weightRandom.random();
}
- 重构自定义条件命中的路由,支持Spel表达式进行自定义规则,支持所有标准的Spel表达式,包括==,!=,>,>=,<,<=,&&,||等,由于规则保存在XML文件里,对于特殊符号需要转义
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<strategy>
<version>{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}</version>
</strategy>
<strategy-customization>
<conditions>
<condition id="condition1" header="#H['a'] == '1'" version-id="version-route2"/>
<condition id="condition2" header="#H['a'] == '1' && #H['b'] == '2'" version-id="version-route1"/>
</conditions>
<routes>
<route id="version-route1" type="version">{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.1"}</route>
<route id="version-route2" type="version">{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.1"}</route>
</routes>
</strategy-customization>
</rule>
- 支持同时多个DiscoveryEnabledStrategy的联合判断
- 支持网关独立部署和非独立部署两种场景下,动态调度子环境的能力。网关独立部署场景下,通过Http Header传递n-d-env=xxx在DefaultEnvironmentDiscoveryEnabledStrategy来动态调度子环境的能力;网关非独立部署场景下,网关需要加上env的元数据,通过Nginx来动态调度子环境的能力
- 修复子环境过滤为判断元数据中的env为空的Bug
- 增加子环境调度策略的全链路输出和Opentracing输出
源码主页
https://github.com/Nepxion/Discovery
指南主页
https://github.com/Nepxion/DiscoveryGuide
文档主页
https://gitee.com/Nepxion/Docs/tree/master/web-doc
其它版本
同时发布的版本,还包括:
- Nepxion Discovery 4.13.11,支持Finchley版
- Nepxion Discovery 3.13.11,支持Edgware版