日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

接入Go應用

將Go應用接入AHAS應用防護后,可以對其配置流控、隔離和系統規則來保證系統穩定性。本文介紹如何使用SDK方式將Go應用接入應用防護。

前提條件

確保Go應用的版本為1.13.0或以上,并通過Go Modules管理依賴。

Dubbo、Gin Web、gRPC、Mrcio應用接入步驟

  1. 登錄AHAS控制臺,然后在頁面左上角選擇地域。
  2. 在控制臺左側導航欄中選擇流量防護 > 應用防護
  3. 應用防護頁面右上角單擊新應用接入,然后在GO語言頁簽下,選擇SDK接入

  4. 單擊下載AHAS Go SDK,然后將安裝包解壓到本地。

  5. 打開您的Go工程,并在go.mod文件中添加以下依賴。

    說明
    • /path/to/aliyun-ahas-go-sdk是示例路徑,請替換為Go SDK的解壓路徑。

    • 請確保您的Go版本≥1.13.0,并開啟Go modules支持。

    require github.com/aliyun/aliyun-ahas-go-sdk v1.0.0
    #將后面的路徑替換為AHAS Go SDK解壓后的本地路徑。
    replace github.com/aliyun/aliyun-ahas-go-sdk => /path/to/aliyun-ahas-go-sdk
  6. 添加AHAS Sentinel初始化命令,并在應用啟動時生效。

    import (
        ahas "github.com/aliyun/aliyun-ahas-go-sdk"
    )
    
    // 在應用的初始化邏輯中加入以下代碼。
    // Sentinel core的初始化包含在了這里面。如果之前有調用過Sentinel的初始化函數,需要去掉。
    err := ahas.InitAhasDefault()
    if err != nil {
        log.Fatalf("Failed to init AHAS: %+v", err)
    }
  7. 使用以下代碼包住您的業務邏輯。示例代碼如下。

    應用

    示例代碼

    Dubbo應用接入

    import ( _ "github.com/alibaba/sentinel-golang/adapter/dubbo")

    Gin Web應用接入

    import ( sentinelPlugin "github.com/alibaba/sentinel-golang/adapter/gin" "github.com/gin-gonic/gin")r := gin.New()r.Use(sentinelPlugin.SentinelMiddleware())

    gRPC應用接入

    import ( sentinelPlugin "github.com/alibaba/sentinel-golang/adapter/grpc" "google.golang.org/grpc")s := grpc.NewServer(grpc.UnaryInterceptor(sentinelPlugin.NewUnaryServerInterceptor()))

    Micro應用接入

    import ( sentinelPlugin "github.com/alibaba/sentinel-golang/adapter/micro" "github.com/micro/go-micro/v2")svc := micro.NewService(micro.WrapHandler(sentinelPlugin.NewHandlerWrapper()))

    說明
    • Dubbo應用是在代碼中通過import包的形式引入Dubbo adapter,其中的init()函數會自動注入相關filter。Dubbo-Go版本需要≥1.3.0。Sentinel Dubbo adapter會自動統計所有provider和consumer的調用。

    • Gin Web應用在Gin的初始化代碼中引入SentinelMiddleware。Sentinel會對每個API route進行統計,資源名稱類似于GET:/foo/:id。默認的限流處理邏輯是返回429 (Too Many Requests)錯誤碼。

    • gRPC應用在gRPC的初始化代碼中引入Sentinel提供的interceptor,Sentinel針對Server和Client都提供了unary和streaming兩種interceptor,以上代碼以Server端為例。默認的限流處理邏輯是返回Sentinel的BlockError。您也可以在創建interceptor時提供自定義的fallback處理邏輯。

    • 在Go-Micro的初始化代碼中引入Sentinel提供的wrapper。Sentinel針對Go-Micro Server和Client都提供了wrapper。以上代碼以Server端為例。埋點默認會提取服務method作為資源名,默認的流控處理邏輯是返回Sentinel的BlockError。您也可以在創建wrapper時提供自定義的fallback處理邏輯。

  8. 配置AHAS,在項目目錄下新建sentinel.yml文件,配置文件內容如下。

    類別

    配置文件示例

    非公網

    version: "v1"
    sentinel:
      app:   # 應用名,會顯示在AHAS控制臺,必須指定。
        name: YourAppName   # AppName只能包含字母、數字、以及以下特殊字符 _ - . :
    ahas:
      regionId: <RegionId>  #Region環境需要填寫應用所在地域,公網環境不需要
      namespace: default

    公網

    version: "v1"
    sentinel:
      app:   #應用名,會顯示在AHAS控制臺,必須指定
        name: "YourAppName"    #AppName只能包含字母、數字、以及以下特殊字符 _ - . :
    ahas:
      license: <license>   #license只有公網環境需要(如本機)
      regionId: "cn-public"

    若在公網地域,需要查看License信息。請在GO語言頁簽查看(非公網地域不需要),具體請參見查看License

    GO license2.png

  9. 重啟您的應用。

自定義埋點接入步驟

通過自定義埋點接入Go語言的步驟如下。

  1. 登錄AHAS控制臺,然后在頁面左上角選擇地域。
  2. 在控制臺左側導航欄中選擇流量防護 > 應用防護
  3. 應用防護頁面右上角單擊新應用接入,然后在GO語言頁簽下,選擇SDK接入

  4. 單擊下載AHAS Go SDK,然后將安裝包解壓到本地。

  5. 打開您的Go工程,并在go.mod文件中添加以下依賴。

    說明

    /path/to/aliyun-ahas-go-sdk是示例路徑,請替換為Go SDK的解壓路徑。

    require github.com/aliyun/aliyun-ahas-go-sdk v1.0.0
    replace github.com/aliyun/aliyun-ahas-go-sdk => /path/to/aliyun-ahas-go-sdk
  6. 添加import依賴。

    import (
    ahas "github.com/aliyun/aliyun-ahas-go-sdk"
    sentinel "github.com/alibaba/sentinel-golang/api"
    )
  7. 添加AHAS Sentinel初始化命令,并在應用啟動時生效。

    // 在應用的初始化邏輯中加入以下代碼
    // Sentinel core的初始化包含在了這里面。如果之前有調用過Sentinel的初始化函數,需要去掉。
    
    err:= ahas.InitAhasDefault()
    if err!= nil{
    log.Fatalf("Failed to init AHAS:%+v", err)
    }
  8. 使用以下代碼包住您的業務邏輯,埋點方法及示例請參見Sentinel Go API

    import (
        sentinel "github.com/alibaba/sentinel-golang/api"
    )
    
    // Entry方法用于埋點。
    e, b := sentinel.Entry("your-resource-name", sentinel.WithTrafficType(base.Inbound))
    if b != nil {
        // 請求被流控,可以從BlockError中獲取限流詳情。
    } else {
        // 請求可以通過,在此處編寫您的業務邏輯。
        // 務必保證業務邏輯結束后Exit。
        e.Exit()
    }
  9. 使用以下任意一種方式配置AHAS Sentinel。

    • YAML文件配置。

      AHAS支持的YAML配置項如下:

      說明
      • 若通過InitAhasFromFile(path)初始化AHAS,則會從path指定的YAML文件中讀取配置項。

      • 若通過InitAhasDefault()初始化AHAS,則會嘗試從SENTINEL_CONFIG_FILE_PATH環境變量讀取path并讀取對應的文件。若未指定則默認從項目目錄下的sentinel.yml文件讀取配置。

      • 若均不存在,AHAS則會通過環境變量讀取基礎的配置(如項目名稱),其他配置項采用默認值。注意環境變量配置會覆蓋配置文件的配置。

      Key

      對應的YAML配置項

      含義

      備注

      SENTINEL_APP_NAME

      sentinel.app.name

      項目名稱

      必需的配置項,若不配置則標為unknown_go_service

      SENTINEL_CONFIG_FILE_PATH

      YAML配置文件路徑

      若未指定則默認從項目目錄下的sentinel.yml文件讀取配置。

      AHAS_LICENSE

      ahas.license

      AHAS License

      公網環境必需,Region環境不需要。

      AHAS_NAMESPACE

      ahas.namespace

      AHAS命名空間

      默認為Default。需在控制臺預先添加后配置,不可隨便指定。

      SENTINEL_LOG_DIR

      日志路徑

      默認路徑為~/logs/csp

      SENTINEL_LOG_USE_PID

      日志文件是否帶Pid

      默認為False。

      AHAS_REGION_ID

      ahas.regionId

      AHAS地域

      Region環境需要填寫應用所在地域,公網環境不需要。

      配置文件示例:

      類別

      配置文件示例

      非公網

      sentinel:
        app: # 應用名,會顯示在AHAS控制臺,必須指定。
          name: sentinel-go-service
      ahas:
        regionId: <RegionId>  #Region環境需要填寫應用所在地域,公網環境不需要
        namespace: default

      公網

      sentinel:
        app:
          name: sentinel-go-service  # 應用名,會顯示在AHAS控制臺,必須指定。
      ahas:
        license: "xxx"  # license公網環境需要,阿里云Region的應用不需要。
        regionId: "cn-public"
        namespace: default
    • 配置環境變量。

      類別

      配置環境變量

      非公網

      SENTINEL_APP_NAME=應用名; AHAS_NAMESPACE=default; AHAS_REGION_ID=應用所在地域

      公網

      AHAS_LICENSE=${license}; AHAS_NAMESPACE=default; SENTINEL_APP_NAME=應用名; AHAS_REGION_ID=cn-public

Sentinel Go API

使用Sentinel的Entry API將業務邏輯封裝起來,這一步稱為埋點。每個埋點都有一個資源名稱(resource),代表觸發了這個資源的調用或訪問。

埋點API位于API包中,一般為Entry(resource string, opts ...Option) (*base.SentinelEntry, *base.BlockError),其中resource代表埋點資源名,opts代表埋點配置。目前支持以下埋點配置:

  • WithTrafficType(entryType base.TrafficType):標記該埋點資源的流量類型,其中Inbound代表入口流量,Outbound代表出口流量。若不指定,默認為Outbound。

  • WithResourceType(resourceType base.ResourceType):標記該埋點資源的分類。

  • WithAcquireCount(acquireCount uint32):標記每次觸發該埋點計為幾次調用(可以理解為batch count)。若不指定,默認為1。

  • WithArgs(args ...interface{}):埋點攜帶的參數列表,為熱點參數統計預留。

埋點API示例。

import (
    sentinel "github.com/alibaba/sentinel-golang/api"
)

// Entry方法用于埋點。
e, b := sentinel.Entry("your-resource-name", sentinel.WithTrafficType(base.Inbound))
if b != nil {
    // 請求被流控,可以從BlockError中獲取限流詳情。
} else {
    // 請求可以通過,在此處編寫您的業務邏輯。
    // 務必保證業務邏輯結束后Exit。
e.Exit()
}
說明

若該次調用被拒絕,則Entry API會返回BlockError代表被Sentinel限流。BlockError提供了限流原因以及觸發的規則等信息,可以方便開發者獲取相關信息進行記錄和處理。

結果驗證

登錄AHAS控制臺,在左側導航欄選擇流量防護 > 應用防護,若在應用防護頁面出現該應用的資源卡片且有數據上報,則說明接入成功。

應用防護.png

相關操作

給Go SDK應用配置規則,目前支持流控規則(暫不支持集群流控)、隔離規則、降級規則、系統規則和熱點規則。