日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Sentinel-Go 集成 Nacos 实现外部动态数据源

發(fā)布時(shí)間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sentinel-Go 集成 Nacos 实现外部动态数据源 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

**導(dǎo)讀:**2020年,Sentinel 推出 Go 原生版本Sentinel-Golang,在云原生領(lǐng)域繼續(xù)突破。本文將從實(shí)際出發(fā) 結(jié)合案例說(shuō)明 在Sentinel-Golang中如何集成Nacos,使其做為外部動(dòng)態(tài)數(shù)據(jù)源,將流控規(guī)則存儲(chǔ)在nacos中,并且實(shí)現(xiàn)動(dòng)態(tài)實(shí)時(shí)更新規(guī)則。

本文主要分為兩個(gè)部分:

  • 將sentinel流控規(guī)則定義在代碼內(nèi)部 實(shí)現(xiàn)限流效果。
  • 將sentinel流控規(guī)則定義在nacos配置中心,實(shí)現(xiàn)限流效果以及在nacos中動(dòng)態(tài)更新規(guī)則,實(shí)現(xiàn)動(dòng)態(tài)流控。
  • 下面將詳細(xì)介紹一下相關(guān)的背景知識(shí)。

    1. Sentinel

    隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來(lái)越重要。Sentinel 以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。

    Sentinel 具有以下特征:

    • 豐富的應(yīng)用場(chǎng)景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場(chǎng)景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實(shí)時(shí)熔斷下游不可用應(yīng)用等。
    • 完備的實(shí)時(shí)監(jiān)控:Sentinel 同時(shí)提供實(shí)時(shí)的監(jiān)控功能。您可以在控制臺(tái)中看到接入應(yīng)用的單臺(tái)機(jī)器秒級(jí)數(shù)據(jù),甚至 500 臺(tái)以下規(guī)模的集群的匯總運(yùn)行情況。
    • 廣泛的開源生態(tài):Sentinel 提供開箱即用的與其它開源框架/庫(kù)的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應(yīng)的依賴并進(jìn)行簡(jiǎn)單的配置即可快速地接入 Sentinel。
    • 完善的 SPI 擴(kuò)展點(diǎn):Sentinel 提供簡(jiǎn)單易用、完善的 SPI 擴(kuò)展接口。您可以通過(guò)實(shí)現(xiàn)擴(kuò)展接口來(lái)快速地定制邏輯。例如定制規(guī)則管理、適配動(dòng)態(tài)數(shù)據(jù)源等。

    1.1 Sentinel 的歷史

    • 2012年,Sentinel 誕生,主要功能為入口流量控制。
    • 2013-2017年,Sentinel 在阿里巴巴集團(tuán)內(nèi)部迅速發(fā)展,成為基礎(chǔ)技術(shù)模塊,覆蓋了所有的核心場(chǎng)景。Sentinel 也因此積累了大量的流量歸整場(chǎng)景以及生產(chǎn)實(shí)踐。
    • 2018年,Sentinel 開源,并持續(xù)演進(jìn)。
    • 2019年,Sentinel 在多語(yǔ)言擴(kuò)展的方向上逐步探索,陸續(xù)推出 C++ 原生版本、Envoy 集群流量控制支持。
    • 2020年,Sentinel 推出 Go 原生版本,期待在云原生領(lǐng)域繼續(xù)突破。https://github.com/alibaba/sentinel-golang

    2. Nacos

    Nacos是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理的平臺(tái),Nacos脫胎于阿里巴巴內(nèi)部的ConfigServer和Diamond,是它們的開源實(shí)現(xiàn)。經(jīng)歷過(guò)雙十一流量峰值和阿里巴巴經(jīng)濟(jì)體超大規(guī)模容量的考驗(yàn),沉淀了阿里巴巴軟負(fù)載團(tuán)隊(duì)在這個(gè)領(lǐng)域十年的經(jīng)驗(yàn),在穩(wěn)定性和功能性上都有很好的保障。


    (Sentinel-Go集成Nacos動(dòng)態(tài)數(shù)據(jù)源架構(gòu))

    目前 Sentinel 內(nèi)部的限流、熔斷等策略都是基于規(guī)則來(lái)實(shí)現(xiàn)的,提供動(dòng)態(tài)數(shù)據(jù)源擴(kuò)展的目的,就是希望將規(guī)則數(shù)據(jù)的加載以及更新操作通過(guò)一些配置中心中間件(比如 nacos,etcd,conful,等等)來(lái)實(shí)現(xiàn)動(dòng)態(tài)更新。

    3. Sentinel-Go 限流 Demo

    未集成nacos時(shí) 規(guī)則定義在代碼內(nèi)部,沒有使用外部數(shù)據(jù)源。

    3.1 安裝

    go get github.com/alibaba/sentinel-golang

    3.2 Demo樣例

    使用 Sentinel 主要分為以下幾步:

  • 對(duì) Sentinel 進(jìn)行相關(guān)配置并進(jìn)行初始化
  • 埋點(diǎn)(定義資源)
  • 配置規(guī)則
  • package mainimport ("fmt""log""math/rand""time"sentinel "github.com/alibaba/sentinel-golang/api""github.com/alibaba/sentinel-golang/core/base""github.com/alibaba/sentinel-golang/core/flow""github.com/alibaba/sentinel-golang/util" )func main() {// We should initialize Sentinel first.err := sentinel.InitDefault()if err != nil {log.Fatalf("Unexpected error: %+v", err)}_, err = flow.LoadRules([]*flow.FlowRule{{Resource: "some-test",MetricType: flow.QPS,Count: 10,ControlBehavior: flow.Reject,},})if err != nil {log.Fatalf("Unexpected error: %+v", err)return}ch := make(chan struct{})for i := 0; i < 10; i++ {go func() {for {e, b := sentinel.Entry("some-test", sentinel.WithTrafficType(base.Inbound))if b != nil {// Blocked. We could get the block reason from the BlockError.time.Sleep(time.Duration(rand.Uint64()%10) * time.Millisecond)} else {// Passed, wrap the logic here.fmt.Println(util.CurrentTimeMillis(), "passed")time.Sleep(time.Duration(rand.Uint64()%10) * time.Millisecond)// Be sure the entry is exited finally.e.Exit()}}}()}<-ch }

    官方expmale:https://github.com/alibaba/sentinel-golang/tree/master/example

    4. Sentinel-Go 集成Nacos

    Sentinel-Go集成Nacos實(shí)現(xiàn)外部動(dòng)態(tài)數(shù)據(jù)源功能.

    4.1 部署Nacos

    4.1.1 版本選擇

    您可以在Nacos的release notes及博客中找到每個(gè)版本支持的功能的介紹,當(dāng)前推薦的穩(wěn)定版本為1.3.1。

    4.1.2 預(yù)備環(huán)境準(zhǔn)備

    Nacos 依賴 Java 環(huán)境來(lái)運(yùn)行。如果您是從代碼開始構(gòu)建并運(yùn)行Nacos,還需要為此配置 Maven環(huán)境,請(qǐng)確保是在以下版本環(huán)境中安裝使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下載 & 配置。
  • Maven 3.2.x+;下載 & 配置。
  • 4.1.3 下載源碼或者安裝包

    你可以通過(guò)源碼和發(fā)行包兩種方式來(lái)獲取 Nacos。

    從 Github 上下載源碼方式

    git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U ls -al distribution/target/ // change the $version to your actual path cd distribution/target/nacos-server-$version/nacos/bin

    下載編譯后壓縮包方式

    您可以從 最新穩(wěn)定版本 下載 nacos-server-$version.zip 包。

    unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gzcd nacos/bin

    4.1.4 啟動(dòng)服務(wù)器

    Linux/Unix/Mac
    啟動(dòng)命令(standalone代表著單機(jī)模式運(yùn)行,非集群模式):
    sh startup.sh -m standalone
    如果您使用的是ubuntu系統(tǒng),或者運(yùn)行腳本報(bào)錯(cuò)提示[[符號(hào)找不到,可嘗試如下運(yùn)行:
    bash startup.sh -m standalone

    Windows
    啟動(dòng)命令:
    cmd startup.cmd
    或者雙擊startup.cmd運(yùn)行文件。

    **部署成功訪問 http://127.0.0.1:8848/nacos ?**
    用戶名/密碼:nacos/nacos

    4.2 Sentinel限流配置到Nacos

  • 登錄到nacos web
  • 在配置管理中,新建配置
  • 輸入dataId,group(dataId,group 創(chuàng)建時(shí)可以自定義,本文創(chuàng)建的dataId=flow,group=sentinel-go)
  • 將數(shù)據(jù)源樣例粘貼到配置內(nèi)容中。
  • 4.2.1 Nacos 外部數(shù)據(jù)源樣例

    此樣例是流量控制的Demo配置。當(dāng)流量并發(fā)數(shù)大于100直接拒絕。

    配置內(nèi)容說(shuō)明可參考https://github.com/alibaba/sentinel-golang/wiki/流量控制

    [{"resource": "some-test","metricType": 1,"count": 100.0,"controlBehavior":0} ]

    創(chuàng)建完成后,在nacos配置列表中可以看到對(duì)應(yīng)的限流配置。

    4.3 Nacos數(shù)據(jù)源集成

    4.3.1 創(chuàng)建項(xiàng)目

  • 版本
  • sentinel-golang 版本使用0.6.0,nacos-sdk-go 使用1.0.0
  • go.mod
  • module sentinel-go-nacos-examplego 1.13require (github.com/alibaba/sentinel-golang v0.6.0github.com/nacos-group/nacos-sdk-go v1.0.0 )
  • main.go
  • package mainimport ("fmt""math/rand""sync/atomic""time"sentinel "github.com/alibaba/sentinel-golang/api""github.com/alibaba/sentinel-golang/core/base""github.com/alibaba/sentinel-golang/ext/datasource/nacos""github.com/alibaba/sentinel-golang/util""github.com/nacos-group/nacos-sdk-go/clients""github.com/alibaba/sentinel-golang/ext/datasource""github.com/nacos-group/nacos-sdk-go/common/constant" )type Counter struct {pass *int64block *int64total *int64 }func main() {//流量計(jì)數(shù)器,為了流控打印日志更直觀,和集成nacos數(shù)據(jù)源無(wú)關(guān)。counter := Counter{pass: new(int64), block: new(int64), total: new(int64)}//nacos server地址sc := []constant.ServerConfig{{ContextPath: "/nacos",Port: 8848,IpAddr: "127.0.0.1",},}//nacos client 相關(guān)參數(shù)配置,具體配置可參考https://github.com/nacos-group/nacos-sdk-gocc := constant.ClientConfig{TimeoutMs: 5000,}//生成nacos config client(配置中心客戶端)client, err := clients.CreateConfigClient(map[string]interface{}{"serverConfigs": sc,"clientConfig": cc,})if err != nil {fmt.Printf("Fail to create client, err: %+v", err)return}//注冊(cè)流控規(guī)則Handlerh := datasource.NewFlowRulesHandler(datasource.FlowRuleJsonArrayParser)//創(chuàng)建NacosDataSource數(shù)據(jù)源//sentinel-go 對(duì)應(yīng)在nacos中創(chuàng)建配置文件的group//flow 對(duì)應(yīng)在nacos中創(chuàng)建配置文件的dataIdnds, err := nacos.NewNacosDataSource(client, "sentinel-go", "flow", h)if err != nil {fmt.Printf("Fail to create nacos data source client, err: %+v", err)return}//nacos數(shù)據(jù)源初始化err = nds.Initialize()if err != nil {fmt.Printf("Fail to initialize nacos data source client, err: %+v", err)return}//啟動(dòng)統(tǒng)計(jì)go timerTask(&counter)//模擬流量ch := make(chan struct{})for i := 0; i < 10; i++ {go func() {for {atomic.AddInt64(counter.total, 1)//some-test 對(duì)應(yīng)在nacos 流控配置文件中的resourcee, b := sentinel.Entry("some-test", sentinel.WithTrafficType(base.Inbound))if b != nil {atomic.AddInt64(counter.block, 1)// Blocked. We could get the block reason from the BlockError.time.Sleep(time.Duration(rand.Uint64()%10) * time.Millisecond)} else {atomic.AddInt64(counter.pass, 1)time.Sleep(time.Duration(rand.Uint64()%10) * time.Millisecond)// Be sure the entry is exited finally.e.Exit()}}}()}<-ch }//statistic print func timerTask(counter *Counter) {fmt.Println("begin to statistic!!!")var (oldTotal, oldPass, oldBlock int64)for {time.Sleep(1 * time.Second)globalTotal := atomic.LoadInt64(counter.total)oneSecondTotal := globalTotal - oldTotaloldTotal = globalTotalglobalPass := atomic.LoadInt64(counter.pass)oneSecondPass := globalPass - oldPassoldPass = globalPassglobalBlock := atomic.LoadInt64(counter.block)oneSecondBlock := globalBlock - oldBlockoldBlock = globalBlockfmt.Println(util.CurrentTimeMillis()/1000, "total:", oneSecondTotal, " pass:", oneSecondPass, " block:", oneSecondBlock)} }

    4.3.2 運(yùn)行結(jié)果

    4.3.3 動(dòng)態(tài)更新限流配置

    在項(xiàng)目啟動(dòng)過(guò)程中,在nacos中修改流控配置參數(shù)。將count 從100->400

    可以看到打印了重新loadRule的日志,流量控制動(dòng)態(tài)的由100->400

    總結(jié)

    在sentinel-go中使用nacos作為外部動(dòng)態(tài)數(shù)據(jù)源,只需要將原來(lái)聲明Rule以及加載Rule的部分 變成從nacos數(shù)據(jù)源讀取。

    在本文中只介紹了流量控制的集成,熔斷,warmup,熱點(diǎn)參數(shù)的集成也是相同的,只要按需修改配置的內(nèi)容即可

    配置內(nèi)容參考地址:https://github.com/alibaba/sentinel-golang/wiki

    關(guān)鍵代碼:

    h := datasource.NewFlowRulesHandler(datasource.FlowRulesJsonConverter)nds, err := nacos.NewNacosDataSource(client, "sentinel-go", "flow", h)if err != nil {fmt.Printf("Fail to create nacos data source client, err: %+v", err)return}err = nds.Initialize()if err != nil {fmt.Printf("Fail to initialize nacos data source client, err: %+v", err)return}

    相關(guān)鏈接

    • Demo地址:https://github.com/alibaba/sentinel-golang/tree/master/example/nacos
    • Sentinel-golang:https://github.com/alibaba/sentinel-golang
    • Sentinel釘釘社區(qū)交流群: 30150716,23339422(Sentinel golang生態(tài)交流群)
    • Nacos:https://nacos.io/zh-cn/index.html
    • Nacos釘釘社區(qū)交流群:30438813, 23191211(Nacos golang生態(tài)交流群)
    • Nacos-SDK-Go項(xiàng)目地址:https://github.com/nacos-group/nacos-sdk-go

    作者簡(jiǎn)介

    張斌斌 Github 賬號(hào):sanxun0325,Nacos Commiter,Sentinel-Golang Contributor,現(xiàn)任職 OpenJaw 微服務(wù)團(tuán)隊(duì)。目前主要負(fù)責(zé) Nacos、Sentinel-Golang 社區(qū)相關(guān)項(xiàng)目的開發(fā)工作,以及 Nacos 在 Golang 微服務(wù)生態(tài)中的推廣集成工作。

    “阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的公眾號(hào)。”

    總結(jié)

    以上是生活随笔為你收集整理的Sentinel-Go 集成 Nacos 实现外部动态数据源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美精品第一区 | 国产视频一级 | 日本小视频网站 | 日韩少妇一区 | 国产剧情精品在线 | 欧美亚洲中文精品字幕 | 久久66热这里只有精品 | 亚洲综合久久婷婷 | 青草青在线 | 成人午夜在线播放 | 日本黄色片网址 | 黑人玩弄人妻一区二区三区免费看 | www.黄在线| 亚洲人在线 | 欧美中文字幕视频 | 国产成人综合自拍 | 我和岳m愉情xxxⅹ视频 | 亚洲三级久久 | 国产特级aaaaaa大片 | 99久久国产宗和精品1上映 | 精品人妻无码一区二区三区换脸 | 亚洲国产无线乱码在线观看 | 香蕉久久国产av一区二区 | 久久久极品 | 无码少妇一区二区三区芒果 | 激情欧美综合 | 日本精品一区二区 | 美女国产精品 | 小柔的淫辱日记(1~7) | 熟女少妇一区二区三区 | 亚洲午夜无码久久久久 | av无限看 | 91av视频在线免费观看 | 国产福利不卡 | 深爱婷婷网 | 成年人爱爱视频 | 波多野 在线 | 国产剧情在线视频 | 黄页视频在线观看 | 超碰69 | 奇米888一区二区三区 | 久久免费黄色网址 | 午夜伦伦 | 中文字幕一区二区三区久久久 | 性做久久久久久久免费看 | 午夜无遮挡 | 欧洲色视频 | 成人羞羞国产免费 | 亚洲永久免费精品 | 老司机午夜免费福利 | 色呦呦网站在线观看 | 成人在线视频免费看 | 青青网站 | 国产不卡高清 | 特级西西444www大精品视频免费看 | 国产1区在线 | 老汉色老汉首页av亚洲 | 久草视频免费 | 日本欧美在线视频 | 国产高清视频免费观看 | 国产精品美乳在线观看 | 国产无码精品久久久 | 一区二区三区在线视频免费观看 | 久久涩综合| 可以在线看黄的网站 | 中文字幕一级二级三级 | 91麻豆一区二区三区 | 国产69精品久久久久久 | 亚洲精品福利网站 | 国产精品九九九 | 97日韩精品 | 精品一区二区中文字幕 | 在线观看视频国产 | 波多野结衣有码 | 国产精品久久久亚洲 | 男女视频免费网站 | 啪啪无遮挡 | 亚洲一级在线播放 | 九九热免费| 你懂的网址在线 | 奇米影视999 | 国产图片区 | 色四虎 | 男女视频免费看 | 免费精品在线视频 | 视频在线一区 | www.4hu95.com四虎 极品在线视频 | 久久久久99精品成人片三人毛片 | 操比网站 | 成人免费毛片观看 | 美女啪啪网 | 久久亚洲精品小早川怜子 | 日韩免费影院 | 欧美黄色一区 | 高清成人| 99热6这里只有精品 三级av在线免费观看 | 久久只有精品 | 深夜av在线 | 精品国自产拍在线观看 |