Skip to content

5.5.11(JAN 6, 2020)

Compare
Choose a tag to compare
@HaojunRen HaojunRen released this 06 Jan 08:25

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' &amp;&amp; #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版