Skip to content

如何执行服务无损下线

HaojunRen edited this page May 31, 2024 · 2 revisions

全链路服务无损下线场景

服务下线场景下,由于Ribbon负载均衡组件存在着缓存机制,当被提供端服务实例已经下线,而消费端服务实例还暂时缓存着它,直到下个心跳周期才会把已下线的服务实例剔除,在此期间,如果发生调用,会造成流量有损

框架提供流量的实时性绝对无损策略。采用下线之前,把服务实例添加到屏蔽名单中,负载均衡不会去寻址该服务实例。下线之后,清除该名单。实现该方式,需要通过DevOps调用配置中心的Open API推送或者在配置中心界面手工修改

全局唯一ID屏蔽

全局唯一ID对应于元数据spring.application.uuid字段,框架会自动把该ID注册到注册中心,不需要用户自己配置,支持通配表达式方式

增加Spring Cloud Gateway的全局唯一ID屏蔽策略,Group为discovery-guide-group,Data Id为discovery-guide-gateway,策略内容如下,实现从Spring Cloud Gateway发起的调用屏蔽指定全局唯一ID的服务

<?xml version="1.0" encoding="UTF-8"?>
<rule>
    <strategy-blacklist>
        <id>20210601-222214-909-1146-372-698</id>
    </strategy-blacklist>
</rule>

注意事项

跟Header驱动下的IP地址和端口屏蔽策略等效,例如

1. n-d-id-blacklist=20210601-222214-909-1146-372-698;20210601-222623-277-4978-633-279
2. n-d-id-blacklist={"discovery-guide-service-a":"20210601-222214-909-1146-372-698", "discovery-guide-service-b":"20210601-222623-277-4978-633-279"}

小贴士

利用通配符方式实现对指定日期上线的服务实例做屏蔽,示例内容如下,表示2021年6月1日(也可以精确到小时或者分钟)上线的a服务实例和b服务实例都会被屏蔽。该场景的使用意义是,在服务下线之前,使用者担心流量有损,同时使用者知道上一次服务发布的日期,只要该屏蔽策略一生效,负载均衡将实时过滤掉指定日期的服务实例。那么,使用者对这些服务实例无论是优雅停机,还是暴力下线,都不会造成任何流量有损,例如

<?xml version="1.0" encoding="UTF-8"?>
<rule>
    <strategy-blacklist>
        <id>{"discovery-guide-service-a":"20210601*", "discovery-guide-service-b":"20210601*"}</id>
    </strategy-blacklist>
</rule>

IP地址和端口屏蔽

通过IP地址或者端口或者IP地址+端口进行屏蔽,支持通配表达式方式

增加Zuul的IP地址和端口屏蔽策略,Group为discovery-guide-group,Data Id为discovery-guide-zuul,策略内容如下,实现从Zuul发起的调用屏蔽指定IP地址和端口,或者指定IP地址,或者指定端口(下面策略以端口为例)的服务

<?xml version="1.0" encoding="UTF-8"?>
<rule>
    <strategy-blacklist>
        <!-- <address>127.0.0.1:3001</address> -->
        <!-- <address>127.0.0.1</address> -->
        <address>3001</address>
    </strategy-blacklist>
</rule>

提醒:跟Header驱动下的IP地址和端口屏蔽策略等效,例如

1. n-d-address-blacklist=3001
2. n-d-address-blacklist={"discovery-guide-service-a":"3001", "discovery-guide-service-b":"3001"}




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally