欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何基于Nacos和Sentinel,實(shí)現(xiàn)灰度路由和流量防護(hù)一體化

Nepxion Discovery框架在實(shí)現(xiàn)灰度發(fā)布和路由功能前提下,結(jié)合Nacos和Sentinel,對(duì)流量再實(shí)施一層防護(hù)措施,更能達(dá)到企業(yè)級(jí)的流量安全控制的目的。它的功能包括:
  • 封裝遠(yuǎn)程配置中心和本地規(guī)則文件的讀取邏輯,即優(yōu)先讀取遠(yuǎn)程配置,如果不存在或者規(guī)則錯(cuò)誤,則讀取本地規(guī)則文件。動(dòng)態(tài)實(shí)現(xiàn)遠(yuǎn)程配置中心對(duì)于規(guī)則的熱刷新
  • 封裝NacosDataSource和ApolloDataSource,支持Nacos和Apollo兩個(gè)遠(yuǎn)程配置中心,零代碼實(shí)現(xiàn)Sentinel功能。更多的遠(yuǎn)程配置中心,請(qǐng)參照Sentinel官方的DataSource并自行集成
  • 支持原生的流控規(guī)則、降級(jí)規(guī)則、授權(quán)規(guī)則、系統(tǒng)規(guī)則、熱點(diǎn)參數(shù)流控規(guī)則
  • 支持?jǐn)U展LimitApp的機(jī)制,通過(guò)動(dòng)態(tài)的Http Header方式實(shí)現(xiàn)組合式防護(hù)機(jī)制,包括基于服務(wù)名、基于灰度組、基于灰度版本、基于灰度區(qū)域、基于機(jī)器地址和端口等防護(hù)機(jī)制,支持自定義任意的業(yè)務(wù)參數(shù)組合實(shí)現(xiàn)該功能,例如,根據(jù)傳入的微服務(wù)灰度版本號(hào)+用戶名,組合在一起進(jìn)行熔斷
  • 支持微服務(wù)側(cè)Actuator、Swagger和Rest三種方式的規(guī)則寫入
  • 支持控制臺(tái)側(cè)基于微服務(wù)名的Actuator、Swagger和Rest三種方式的批量規(guī)則寫入
  • 支持開(kāi)關(guān)關(guān)閉上述功能spring.application.strategy.sentinel.enabled=true,默認(rèn)是關(guān)閉的
[ Nacos] 阿里巴巴中間件部門開(kāi)發(fā)的新一代集服務(wù)注冊(cè)發(fā)現(xiàn)中心和配置中心為一體的中間件。它是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施,支持幾乎所有主流類型的“服務(wù)”的發(fā)現(xiàn)、配置和管理,更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)
[ Sentinel] 阿里巴巴中間件部門開(kāi)發(fā)的新一代以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性的分布式系統(tǒng)的流量防衛(wèi)兵。它承接了阿里巴巴近10年的雙十一大促流量的核心場(chǎng)景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實(shí)時(shí)熔斷下游不可用應(yīng)用等

環(huán)境搭建及依賴引入

服務(wù)端在Discovery框架原有依賴的基礎(chǔ)上,再引入如下依賴
<dependency>
    <groupId>com.nepxion</groupId>
    <artifactId>discovery-plugin-strategy-starter-service-sentinel</artifactId>
    <version>${discovery.version}</version>
</dependency>
<dependency>
    <groupId>com.nepxion</groupId>
    <artifactId>discovery-plugin-strategy-sentinel-starter-nacos</artifactId>
    <!-- <artifactId>discovery-plugin-strategy-sentinel-starter-apollo</artifactId> -->
    <version>${discovery.version}</version>
</dependency>

原生Sentinel注解

參照下面代碼,為接口方法增加@SentinelResource注解,value為sentinel-resource,blockHandler和fallback是防護(hù)其作用后需要執(zhí)行的方法
@RestController
@ConditionalOnProperty(name = DiscoveryConstant.SPRING_APPLICATION_NAME, havingValue = "discovery-guide-service-b")
public class BFeignImpl extends AbstractFeignImpl implements BFeign {
    private static final Logger LOG = LoggerFactory.getLogger(BFeignImpl.class);
    @Override
    @SentinelResource(value = "sentinel-resource", blockHandler = "handleBlock", fallback = "handleFallback")
    public String invoke(@PathVariable(value = "value") String value) {
        value = doInvoke(value);
        LOG.info("調(diào)用路徑:{}", value);
        return value;
    }
    public String handleBlock(String value, BlockException e) {
        return value + "-> B server sentinel block, cause=" + e.getClass().getName() + ", rule=" + e.getRule() + ", limitApp=" + e.getRuleLimitApp();
    }
    public String handleFallback(String value) {
        return value + "-> B server sentinel fallback";
    }
}

原生Sentinel規(guī)則

Sentinel在配置中心訂閱的Key格式,如下:
1. Nacos的Key格式:Group為元數(shù)據(jù)中配置的[組名],Data Id為[服務(wù)名]-[規(guī)則類型]
2. Apollo的Key格式:[組名]-[服務(wù)名]-[規(guī)則類型]
Sentinel規(guī)則的用法,請(qǐng)參照Sentinel官方文檔

流控規(guī)則

增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-flow,規(guī)則內(nèi)容如下:
[
    {
        "resource": "sentinel-resource",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "refResource": null,
        "controlBehavior": 0,
        "warmUpPeriodSec": 10,
        "maxQueueingTimeMs": 500,
        "clusterMode": false,
        "clusterConfig": null
    }
]
如圖所示

降級(jí)規(guī)則

增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-degrade,規(guī)則內(nèi)容如下:
[
    {
        "resource": "sentinel-resource",
        "limitApp": "default",
        "count": 2,
        "timeWindow": 10,
        "grade": 0,
        "passCount": 0
    }
]
如圖所示

授權(quán)規(guī)則

增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下:
[
    {
        "resource": "sentinel-resource",
        "limitApp": "discovery-guide-service-a",
        "strategy": 0
    }
]
如圖所示

系統(tǒng)規(guī)則

增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-system,規(guī)則內(nèi)容如下:
[
    {
        "resource": null,
        "limitApp": null,
        "highestSystemLoad": -1.0,
        "highestCpuUsage": -1.0,
        "qps": 200.0,
        "avgRt": -1,
        "maxThread": -1
    }
]
如圖所示

熱點(diǎn)參數(shù)流控規(guī)則

增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-param-flow,規(guī)則內(nèi)容如下:
[
    {
        "resource": "sentinel-resource",
        "limitApp": "default",
        "grade": 1,
        "paramIdx": 0,
        "count": 1,
        "controlBehavior": 0,
        "maxQueueingTimeMs": 0,
        "burstCount": 0,
        "durationInSec": 1,
        "paramFlowItemList": [],
        "clusterMode": false
    }
]
如圖所示

基于灰度路由和Sentinel-LimitApp擴(kuò)展的防護(hù)機(jī)制

該方式對(duì)于上面5種規(guī)則都有效,這里以授權(quán)規(guī)則展開(kāi)闡述
授權(quán)規(guī)則中,limitApp,如果有多個(gè),可以通過(guò)“,”分隔。"strategy": 0 表示白名單,"strategy": 1 表示黑名單

基于服務(wù)名的防護(hù)機(jī)制

修改配置項(xiàng)Sentinel Request Origin Key為服務(wù)名的Header名稱,修改授權(quán)規(guī)則中l(wèi)imitApp為對(duì)應(yīng)的服務(wù)名,可實(shí)現(xiàn)基于服務(wù)名的防護(hù)機(jī)制
配置項(xiàng),該配置項(xiàng)默認(rèn)為n-d-service-id,可以不配置
spring.application.strategy.service.sentinel.request.origin.key=n-d-service-id
增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下,表示所有discovery-guide-service-a服務(wù)允許訪問(wèn)discovery-guide-service-b服務(wù)
[
    {
        "resource": "sentinel-resource",
        "limitApp": "discovery-guide-service-a",
        "strategy": 0
    }
]

基于灰度組的防護(hù)機(jī)制

修改配置項(xiàng)Sentinel Request Origin Key為灰度組的Header名稱,修改授權(quán)規(guī)則中l(wèi)imitApp為對(duì)應(yīng)的組名,可實(shí)現(xiàn)基于組名的防護(hù)機(jī)制
配置項(xiàng)
spring.application.strategy.service.sentinel.request.origin.key=n-d-service-group
增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下,表示隸屬my-group組的所有服務(wù)都允許訪問(wèn)服務(wù)discovery-guide-service-b
[
    {
        "resource": "sentinel-resource",
        "limitApp": "my-group",
        "strategy": 0
    }
]

基于灰度版本的防護(hù)機(jī)制

修改配置項(xiàng)Sentinel Request Origin Key為灰度版本的Header名稱,修改授權(quán)規(guī)則中l(wèi)imitApp為對(duì)應(yīng)的版本,可實(shí)現(xiàn)基于版本的防護(hù)機(jī)制
配置項(xiàng)
spring.application.strategy.service.sentinel.request.origin.key=n-d-service-version
增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下,表示版本為1.0的所有服務(wù)都允許訪問(wèn)服務(wù)discovery-guide-service-b
[
    {
        "resource": "sentinel-resource",
        "limitApp": "1.0",
        "strategy": 0
    }
]

基于灰度區(qū)域的防護(hù)機(jī)制

修改配置項(xiàng)Sentinel Request Origin Key為灰度區(qū)域的Header名稱,修改授權(quán)規(guī)則中l(wèi)imitApp為對(duì)應(yīng)的區(qū)域,可實(shí)現(xiàn)基于區(qū)域的防護(hù)機(jī)制
配置項(xiàng)
spring.application.strategy.service.sentinel.request.origin.key=n-d-service-region
增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下,表示區(qū)域?yàn)閐ev的所有服務(wù)都允許訪問(wèn)服務(wù)discovery-guide-service-b
[
    {
        "resource": "sentinel-resource",
        "limitApp": "dev",
        "strategy": 0
    }
]

基于機(jī)器地址和端口的防護(hù)機(jī)制

修改配置項(xiàng)Sentinel Request Origin Key為灰度區(qū)域的Header名稱,修改授權(quán)規(guī)則中l(wèi)imitApp為對(duì)應(yīng)的區(qū)域值,可實(shí)現(xiàn)基于機(jī)器地址和端口的防護(hù)機(jī)制
配置項(xiàng)
spring.application.strategy.service.sentinel.request.origin.key=n-d-service-address
增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下,表示地址和端口為192.168.0.88:8081和192.168.0.88:8082的服務(wù)都允許訪問(wèn)服務(wù)discovery-guide-service-b
[
    {
        "resource": "sentinel-resource",
        "limitApp": "192.168.0.88:8081,192.168.0.88:8082",
        "strategy": 0
    }
]

自定義業(yè)務(wù)參數(shù)的組合式防護(hù)機(jī)制

通過(guò)適配類實(shí)現(xiàn)自定義業(yè)務(wù)參數(shù)的組合式防護(hù)機(jī)制
// 版本號(hào)+用戶名,實(shí)現(xiàn)組合式熔斷
public class MyServiceSentinelRequestOriginAdapter extends DefaultServiceSentinelRequestOriginAdapter {
    @Override
    public String parseOrigin(HttpServletRequest request) {
        String version = request.getHeader(DiscoveryConstant.N_D_SERVICE_VERSION);
        String user = request.getHeader("user");
        return version + "&" + user;
    }
}
在配置類里@Bean方式進(jìn)行適配類創(chuàng)建
@Bean
public ServiceSentinelRequestOriginAdapter ServiceSentinelRequestOriginAdapter() {
    return new MyServiceSentinelRequestOriginAdapter();
}
增加服務(wù)discovery-guide-service-b的規(guī)則,Group為discovery-guide-group,Data Id為discovery-guide-service-b-sentinel-authority,規(guī)則內(nèi)容如下,表示版本為1.0且傳入的Http Header的user=zhangsan,同時(shí)滿足這兩個(gè)條件下的所有服務(wù)都允許訪問(wèn)服務(wù)discovery-guide-service-b
[
    {
        "resource": "sentinel-resource",
        "limitApp": "1.0&zhangsan",
        "strategy": 0
    }
]
運(yùn)行效果
  • 當(dāng)傳遞的Http Header中user=zhangsan,當(dāng)全鏈路調(diào)用中,API網(wǎng)關(guān)負(fù)載均衡discovery-guide-service-a服務(wù)到1.0版本后再去調(diào)用discovery-guide-service-b服務(wù),最終調(diào)用成功
如圖所示

  • 當(dāng)傳遞的Http Header中user=lisi,不滿足條件,最終調(diào)用在discovery-guide-service-b服務(wù)端被拒絕掉
如圖所示

  • 當(dāng)傳遞的Http Header中user=zhangsan,滿足條件之一,當(dāng)全鏈路調(diào)用中,API網(wǎng)關(guān)負(fù)載均衡discovery-guide-service-a服務(wù)到1.1版本后再去調(diào)用discovery-guide-service-b服務(wù),不滿足version=1.0的條件,最終調(diào)用在discovery-guide-service-b服務(wù)端被拒絕掉
如圖所示

基于Swagger的Sentinel規(guī)則推送

分為基于單個(gè)服務(wù)實(shí)例和基于服務(wù)名對(duì)應(yīng)的多個(gè)服務(wù)實(shí)例的Sentinel規(guī)則推送

基于單個(gè)服務(wù)實(shí)例的Sentinel規(guī)則推送

直接訪問(wèn)該服務(wù)實(shí)例的Swagger主頁(yè)即可
如圖所示

基于服務(wù)名對(duì)應(yīng)的多個(gè)服務(wù)實(shí)例的Sentinel規(guī)則推送

需要開(kāi)啟discovery-console服務(wù),并訪問(wèn)其Swagger主頁(yè)即可
如圖所示

本文作者:任浩軍, 10 多年開(kāi)源經(jīng)歷,Github ID:@HaojunRen,Nepxion 開(kāi)源社區(qū)創(chuàng)始人,Nacos Group Member,Spring Cloud Alibaba & Nacos & Sentinel Committer ,曾就職于平安銀行平臺(tái)架構(gòu)部,負(fù)責(zé)銀行 PaaS 系統(tǒng)基礎(chǔ)服務(wù)框架研發(fā)。 王偉華, 10 余年 Java 開(kāi)發(fā),Github ID:@vipweihua,對(duì)微服務(wù)架構(gòu)研究多年,當(dāng)前更多關(guān)注于微服務(wù)中的網(wǎng)關(guān)、限流熔斷、灰度路由等,現(xiàn)就職于平安銀行平臺(tái)架構(gòu)部,從事銀行 PaaS 系統(tǒng)基礎(chǔ)服務(wù)框架研發(fā)。

原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

分享題目:如何基于Nacos和Sentinel,實(shí)現(xiàn)灰度路由和流量防護(hù)一體化
文章出自:http://aaarwkj.com/article38/pcdcpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、面包屑導(dǎo)航、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
亚洲精品伦理中文字幕| 欧美三级特黄在线播放| 日韩性生活视频免费播放| 国产乱来视频在线观看| 精品一区二区日韩在线| 日韩欧美国产精品专区| 国产av人妻精品一区二| 欧美精品蜜桃激情一区久久| 99久久久国产精品日本久久区一 | 日本性电影一区二区| 国产操大奶头女人自拍av| 欧美一级纯黄电影视频| 一起草草视频在线观看| 少妇高潮时会抱紧男人脖子| 国产高潮呻吟久久av| 99久久成人精品国产片| 日本精品在线一区二区| 日韩精品在线观看天堂| 日本在线精品在线观看| 欧美黄色一区二区在线观看| 日韩一区二区人妻在线| 黑人精品一区二区三区| 国产偷人伦激情在线观看| 99人妻一区二区三区在线| 国产精品久久久久精品三级下载 | 日韩欧美亚洲一级黄片| 最新国产av网址大全| 欧美日韩久久亚洲精品| 国产亚洲欧美日韩网站| 人妻少妇系列一区二区| 日韩欧美乱码一区二区| 成人在线视频国产自拍| 18禁黄网站免费观看在线| 免费看欧美黄片在线看| 高质量的性生活在线观看| 91青青草原在线视频| 亚洲熟女av综合网丁香| 夫妻的世界电影完整版| 97日韩在线免费视频网站| 国产饥渴熟女在线三区| 日韩精品在线免费观看了|