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

配置HTTP觸發(fā)器并使用gRPC觸發(fā)

更新時(shí)間:

函數(shù)計(jì)算支持HTTP觸發(fā)器,配置HTTP觸發(fā)器的函數(shù)可以通過(guò)gRPC請(qǐng)求被觸發(fā)執(zhí)行。此時(shí)函數(shù)可以看做一個(gè)gRPC Server,處理gRPC請(qǐng)求并將處理結(jié)果返回給調(diào)用端。本文介紹如何在函數(shù)計(jì)算控制臺(tái)配置HTTP觸發(fā)器并使用gRPC請(qǐng)求觸發(fā)函數(shù)。

使用說(shuō)明

調(diào)用方式

  • 域名:支持使用子域名fcapp.run或自定義域名調(diào)用gRPC函數(shù),不支持使用舊域名fc.aliyuncs.com調(diào)用gRPC函數(shù)。

    說(shuō)明

    如果需要使用自定義域名,自定義域名需要配置請(qǐng)求路徑與函數(shù)的映射關(guān)系。建議您將請(qǐng)求的路徑配置為/*,可以讓所有g(shù)RPC請(qǐng)求都轉(zhuǎn)發(fā)到對(duì)應(yīng)的gRPC函數(shù)中,gRPC函數(shù)會(huì)將請(qǐng)求路由到客戶端定義的gRPC方法。

  • 端口:gRPC請(qǐng)求端口為8089

傳輸安全性

  • 為保證gRPC請(qǐng)求的安全性,函數(shù)計(jì)算線上環(huán)境僅支持使用TLS協(xié)議的客戶端。否則,請(qǐng)求會(huì)報(bào)錯(cuò)rpc error: code = Unavailable desc = connection closed before server preface received

  • 自定義域名支持使用自定義HTTPS證書(shū),gRPC服務(wù)端不需要定義TLS證書(shū)驗(yàn)證,函數(shù)計(jì)算網(wǎng)關(guān)層會(huì)進(jìn)行TLS驗(yàn)證。

請(qǐng)求超時(shí)控制

gRPC請(qǐng)求的最長(zhǎng)超時(shí)時(shí)間不得超過(guò)函數(shù)的執(zhí)行超時(shí)時(shí)間執(zhí)行超時(shí)時(shí)間默認(rèn)為60秒,最長(zhǎng)為86400秒。

請(qǐng)求并發(fā)度控制

gRPC請(qǐng)求受函數(shù)計(jì)算并發(fā)度的控制。一個(gè)gRPC請(qǐng)求被視為占用一個(gè)并發(fā)度。gRPC的協(xié)議基于HTTP/2,在函數(shù)計(jì)算中,對(duì)于一個(gè)函數(shù)實(shí)例而言,分配到這個(gè)函數(shù)實(shí)例的gRPC請(qǐng)求會(huì)復(fù)用同一條HTTP/2連接,則這條HTTP/2連接上的并發(fā)流就等于實(shí)例的并發(fā)度。您可以設(shè)置函數(shù)的單實(shí)例并發(fā)度來(lái)控制一個(gè)實(shí)例上的并發(fā)流數(shù)量。具體操作,請(qǐng)參見(jiàn)設(shè)置實(shí)例并發(fā)度

負(fù)載均衡

函數(shù)計(jì)算支持將gRPC請(qǐng)求分發(fā)到不同的實(shí)例上,自動(dòng)為gRPC請(qǐng)求做負(fù)載均衡。

計(jì)費(fèi)方式

gRPC有以下四種請(qǐng)求類型:

  • 普通gRPC請(qǐng)求

  • 客戶端流式請(qǐng)求

  • 服務(wù)端流式請(qǐng)求

  • 雙向流式請(qǐng)求

不同請(qǐng)求類型對(duì)應(yīng)的計(jì)費(fèi)方式不同,具體如下:

  • 普通gRPC請(qǐng)求:計(jì)費(fèi)方式與使用HTTP的計(jì)費(fèi)方式完全一致。

    • 對(duì)于并發(fā)度設(shè)置為1的函數(shù),計(jì)費(fèi)時(shí)間從gRPC連接建立開(kāi)始到gRPC連接斷開(kāi)結(jié)束。

    • 對(duì)于并發(fā)度大于1的函數(shù),實(shí)例的計(jì)費(fèi)時(shí)間從收到第一個(gè)gRPC連接建立開(kāi)始,到最后一個(gè)gRPC連接斷開(kāi)結(jié)束。一個(gè)實(shí)例中多個(gè)連接同時(shí)存在期間,不會(huì)被重復(fù)計(jì)費(fèi)。

      如下圖所示,一個(gè)函數(shù)的并發(fā)度設(shè)置為2,第一個(gè)請(qǐng)求到達(dá)的時(shí)間為T1,結(jié)束時(shí)間為T3,第二個(gè)請(qǐng)求到達(dá)時(shí)間為T2,結(jié)束時(shí)間為T4,計(jì)費(fèi)時(shí)間為T4-T1,其中T2到T3這段時(shí)間只會(huì)被計(jì)費(fèi)一次,不會(huì)被重復(fù)計(jì)費(fèi)。

      image
  • 客戶端流式、服務(wù)端流式和雙向流式請(qǐng)求:實(shí)例的計(jì)費(fèi)從第一個(gè)gRPC連接開(kāi)始,到最后一個(gè)gRPC連接斷開(kāi)結(jié)束。

準(zhǔn)備工作

準(zhǔn)備gRPC函數(shù)代碼

您可以自己編寫(xiě)代碼,也可以在安裝并配置Serverless Devs工具后執(zhí)行s init fc-custom-golang-grpc,下載一套完整的使用Golang語(yǔ)言,在函數(shù)計(jì)算運(yùn)行g(shù)RPC服務(wù)的示例代碼。完整的代碼目錄結(jié)構(gòu)如下所示,其中./greeter_client目錄為客戶端代碼,./code目錄為服務(wù)端代碼。

fc-custom-golang-grpc
├── build-image
│   └── Dockerfile
├── certificate
├── code
│   ├── bootstrap
│   └── main.go
├── go.mod
├── greeter_client
│   ├── main
│   └── main.go
├── Makefile
├── privatekey
├── proto
│   ├── helloworld_grpc.pb.go
│   ├── helloworld.pb.go
│   └── helloworld.proto
├── readme.md
├── s_en.yaml
└── s.yaml

準(zhǔn)備ZIP代碼包

在項(xiàng)目目錄fc-custom-golang-grpc,執(zhí)行make deploy,會(huì)在./code目錄下生成二進(jìn)制文件bootstrap,將其打包為bootstrap.zip

安裝依賴

在項(xiàng)目目錄fc-custom-golang-grpc,執(zhí)行go mod vendor安裝運(yùn)行g(shù)RPC客戶端需要的依賴。

使用控制臺(tái)部署函數(shù)

前提條件

創(chuàng)建服務(wù)

操作步驟

  1. 登錄函數(shù)計(jì)算控制臺(tái),在左側(cè)導(dǎo)航欄,單擊服務(wù)及函數(shù)
  2. 在頂部菜單欄,選擇地域,然后在服務(wù)列表頁(yè)面,單擊目標(biāo)服務(wù)。
  3. 函數(shù)管理頁(yè)面,單擊創(chuàng)建函數(shù)
  4. 創(chuàng)建函數(shù)頁(yè)面,選擇使用自定義運(yùn)行時(shí)創(chuàng)建方式,設(shè)置相關(guān)參數(shù),然后單擊創(chuàng)建

    需要設(shè)置的參數(shù)說(shuō)明如下,其余參數(shù)保持默認(rèn)值即可。更多參數(shù)信息,請(qǐng)參見(jiàn)創(chuàng)建函數(shù)

    • 函數(shù)名稱:設(shè)置您要?jiǎng)?chuàng)建的函數(shù)名稱,例如grpc-demo

    • 請(qǐng)求處理程序類型:選擇處理 HTTP 請(qǐng)求

    • 運(yùn)行環(huán)境:選擇Debian 9

    • 代碼上傳方式:選擇通過(guò) ZIP 包上傳代碼

    • 代碼包:選擇并上傳您已打包的bootstrap.zip文件。

    • 啟動(dòng)命令:如不填寫(xiě),默認(rèn)執(zhí)行./bootstrap

    • 監(jiān)聽(tīng)端口:監(jiān)聽(tīng)端口與服務(wù)端監(jiān)聽(tīng)的端口保持一致,本文示例值為8089

  5. 在函數(shù)詳情頁(yè)面,單擊觸發(fā)器管理頁(yè)簽,查看觸發(fā)器的公網(wǎng)訪問(wèn)地址。

    grpc-demo

  6. 執(zhí)行以下命令調(diào)用gRPC客戶端,發(fā)起gRPC調(diào)用,測(cè)試函數(shù)的正確性。

    go run ./greeter_client -addr  grpc-demo-service-*********.cn-qingdao.fcapp.run:8089
說(shuō)明

您也可以為您創(chuàng)建的gRPC函數(shù)配置自定義域名,并使用自定義域名調(diào)用該函數(shù)。

使用Serverless Devs工具部署函數(shù)

前提條件

操作步驟

  1. 執(zhí)行以下命令,初始化項(xiàng)目。

    s init fc-custom-golang-grpc -d fc-custom-golang-grpc
  2. 執(zhí)行以下命令,進(jìn)入項(xiàng)目目錄fc-custom-golang-grpc

    cd fc-custom-golang-grpc
  3. 可選:編輯s.yaml文件。

    示例如下:

    edition: 1.0.0
    name: hello-world-app
    # access為當(dāng)前應(yīng)用所需要的密鑰信息
    # 密鑰配置可以參考:https://www.serverless-devs.com/serverless-devs/command/config
    # 密鑰使用順序可以參考:https://www.serverless-devs.com/serverless-devs/tool#
    access: "default"
    
    vars: # 全局變量
      region: "cn-hangzhou" # 您要部署的函數(shù)所在的地域
      service:
        name: "grpc-demo"  # 您要部署的函數(shù)所在的服務(wù)名稱
        description: 'hello world by serverless devs'
        internetAccess: true
    
    services:
      helloworld: # 您自定義的業(yè)務(wù)名稱或模塊名稱
        # 如果只想針對(duì)helloworld下面的業(yè)務(wù)進(jìn)行相關(guān)操作,可以在命令行中加上helloworld,例如,只對(duì)helloworld進(jìn)行構(gòu)建:s helloworld build
        # 如果不帶有helloworld,而是直接執(zhí)行s build,工具則會(huì)對(duì)當(dāng)前Yaml下,所有和helloworld平級(jí)的業(yè)務(wù)模塊(如有其他平級(jí)的模塊,例如下面注釋的next-function),按照一定順序進(jìn)行build操作
        component: fc
        actions: # 自定義執(zhí)行邏輯,關(guān)于actions的使用,可以參考:https://www.serverless-devs.com/serverless-devs/yaml
          pre-deploy: # 在deploy之前運(yùn)行
            - run: make build
              path: ./
        #        - component: fc build --use-docker --dockerfile ./code/Dockerfile  # 要運(yùn)行的組件,格式為【component: 組件名 命令 參數(shù)】(可以通過(guò)s cli registry search --type Component 獲取組件列表)
        #        - run: docker build xxx          # 要執(zhí)行的系統(tǒng)命令,類似于一種鉤子的形式
        #          path: ./src                    # 執(zhí)行系統(tǒng)命令/鉤子的路徑
        #        - plugin: myplugin               # 運(yùn)行的插件(可以通過(guò)s cli registry search --type Plugin獲取插件列表)
        #          args:                          # 插件的參數(shù)信息
        #            testKey: testValue
        #      post-deploy: # 在deploy之后運(yùn)行
        #        - component: fc versions publish # 要運(yùn)行的命令行
        props:
          region: ${vars.region}
          service: ${vars.service}
          #        logConfig:
          #          project: mypro-dev
          #          logstore: function-log
          function:
            name: "golang-grpc"  # 您要部署的函數(shù)名稱
            description: 'hello world by serverless devs'
            timeout: 30
            memorySize: 512
            runtime: custom
            codeUri: ./code
            instanceConcurrency: 3
            caPort: 8089
          triggers:
            - name: http2Trigger
              type: http
              config:
                authType: anonymous
                # HTTP觸發(fā)器的觸發(fā)方式配置,必須配置POST方式
                methods: 
                  - GET
                  - POST
    #      customDomains:
    #        - domainName: auto
    #          protocol: HTTP,HTTPS
    #          routeConfigs:
    #            - path: /*
    #              serviceName: "grpc-demo"
    #              functionName: "golang-grpc"
    #          certConfig:
    #            certName: certtest
    #            certificate: ./certificate
    #            privateKey: ./privatekey
  4. 執(zhí)行s deploy -y部署函數(shù)。

    執(zhí)行完成后,函數(shù)將部署至函數(shù)計(jì)算。此外,函數(shù)計(jì)算會(huì)生成一個(gè)可直接訪問(wèn)的URL地址,您可以使用該URL地址調(diào)用函數(shù)進(jìn)行測(cè)試。

  5. 執(zhí)行以下命令,安裝運(yùn)行g(shù)RPC客戶端所需的依賴。

    go mod vendor
  6. 執(zhí)行以下命令,調(diào)用gRPC客戶端,發(fā)起gRPC調(diào)用,測(cè)試函數(shù)的正確性。

    使用HTTP函數(shù)觸發(fā)器的公網(wǎng)訪問(wèn)地址,示例如下:

    go run ./greeter_client -addr golang-grpc-grpc-demo-torcawakky.cn-qingdao.fcapp.run:8089

更多示例

Custom Runtime

Custom Container

Golang

Golang

Python

無(wú)

常見(jiàn)問(wèn)題

函數(shù)錯(cuò)誤

客戶端報(bào)錯(cuò)rpc error: code = Internal desc = server closed the stream without sending trailers,表示函數(shù)計(jì)算服務(wù)端提前異常關(guān)閉gRPC請(qǐng)求。這種錯(cuò)誤屬于函數(shù)錯(cuò)誤,例如函數(shù)超時(shí)、函數(shù)進(jìn)程異常退出或函數(shù)出現(xiàn)內(nèi)存溢出OOM錯(cuò)誤等。您可以從函數(shù)日志中查詢具體的錯(cuò)誤原因并排查處理。更多信息,請(qǐng)參見(jiàn)查看調(diào)用日志

gRPC請(qǐng)求未使用TLS協(xié)議客戶端

需使用TLS協(xié)議客戶端調(diào)用gRPC請(qǐng)求,否則會(huì)報(bào)錯(cuò)rpc error: code = Internal desc = server closed the stream without sending trailers。例如,Golang語(yǔ)言可以使用如下示例代碼:

var opts []grpc.DialOption
    cred := credentials.NewTLS(&tls.Config{
        InsecureSkipVerify: false,
    })
    opts = append(opts, grpc.WithTransportCredentials(cred))
    conn, err := grpc.Dial(*addr, opts...)

InsecureSkipVerify的值可以設(shè)置為true,即跳過(guò)TLS證書(shū)驗(yàn)證,或者設(shè)置為false,即不跳過(guò)TLS證書(shū)驗(yàn)證。

更多信息

除了函數(shù)計(jì)算控制臺(tái),您還可通過(guò)SDK配置觸發(fā)器。具體操作,請(qǐng)參見(jiàn)SDK參考(2021-04-16推薦)

如需修改或刪除觸發(fā)器,具體操作,請(qǐng)參見(jiàn)觸發(fā)器管理