<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          自建 Apache OpenWhisk 平臺(tái)

          共 3858字,需瀏覽 8分鐘

           ·

          2021-10-16 23:04

          作者 | 劉宇(江昱)

          前言:OpenWhisk 是一個(gè)開源、無服務(wù)器的云平臺(tái),可以在運(yùn)行時(shí)容器中通過執(zhí)行擴(kuò)展的代碼響應(yīng)各種事件,而無須用戶關(guān)心相關(guān)的基礎(chǔ)設(shè)施架構(gòu)。



          OpenWhisk 簡介



          OpenWhisk 是基于云的分布式事件驅(qū)動(dòng)的編程服務(wù)。OpenWhisk 提供一種編程模型,將事件處理程序注冊(cè)到云服務(wù)中,以處理各種不同的服務(wù)。其可以支持?jǐn)?shù)千觸發(fā)器和調(diào)用,可以對(duì)不同規(guī)模的事件進(jìn)行響應(yīng)。

          OpenWhisk 是由許多組件構(gòu)建的,這些組件讓 OpenWhisk 成為一款優(yōu)秀的開源 FaaS 平臺(tái)

          Apache OpenWhisk 組件結(jié)構(gòu)

          OpenWhisk 部署



          實(shí)驗(yàn)機(jī)器操作系統(tǒng)為 Ubuntu 18.04 Desktop。使用 GitHub 上所提供的 incubator-openwhisk 進(jìn)行安裝,如果本機(jī)沒有安裝 Git,需要先安裝 Git:

          apt install git

          接下來克隆 repo 到本地目錄:

          git clone https://github.com/apache/incubator-openwhisk.git openwhisk

          克隆完成之后,顯示如圖所示。

          Apache OpenWhisk 項(xiàng)目 Clone

          進(jìn)入 OpenWhisk 目錄,并且執(zhí)行腳本。OpenWhisk 是由 Scala 開發(fā)的,運(yùn)行需要安裝 Java 環(huán)境。下面的腳本實(shí)現(xiàn)了 Java 環(huán)境的安裝,以及其他的所需要的軟件:

          cd openwhisk && cd tools/ubuntu-setup && ./all.sh

          Apache OpenWhisk 安裝配置如圖所示。

          Apache OpenWhisk 安裝配置


          OpenWhisk 使用 ansible 進(jìn)行部署,環(huán)境變量定義在 ansible/environments/group_vars/all 下:

          limits:invocationsPerMinute: "{{ limit_invocations_per_minute | default(60) }}"concurrentInvocations: "{{ limit_invocations_concurrent | default(30) }}"concurrentInvocationsSystem:  "{{ limit_invocations_concurrent_system | default    (5000) }}"firesPerMinute: "{{ limit_fires_per_minute | default(60) }}"sequenceMaxLength: "{{ limit_sequence_max_length | default(50) }}"

          上面程序定義了 OpenWhisk 在系統(tǒng)中的限制。


          • invocationsPerMinute 表示同一個(gè) Namespace 每分鐘調(diào)用 Action 的數(shù)量。
          • concurrentInvocations 表示同一個(gè) Namespace 的并發(fā)調(diào)用數(shù)量。
          • concurrentInvocationsSystem 表示系統(tǒng)中所有 Namespace 的并發(fā)調(diào)用數(shù)量。
          • firesPerMinute 表示同一個(gè) Namespace 中每分鐘調(diào)用 Trigger 的數(shù)量。
          • sequenceMaxLength 表示 Action 的最大序列長度。


          如果需要修改上述的默認(rèn)值,可以把修改后的值添加到文件 ansible/environments/local/group_vars/all 的末尾。例如,Action 的最大序列長度為 100,可以將 sequenceMaxLength: 120 添加到文件的末尾。

          接下來,為 OpenWhisk 配置一個(gè)持久存儲(chǔ)的數(shù)據(jù)庫,有 CouchDB 和 Cloudant 可選。以 CouchDB 為例,配置環(huán)境:

          export OW_DB=CouchDBexport OW_DB_USERNAME=rootexport OW_DB_PASSWORD=PASSWORDexport OW_DB_PROTOCOL=httpexport OW_DB_HOST=172.17.0.1export OW_DB_PORT=5984

          在 openwhisk/ansible 目錄下,運(yùn)行腳本,如圖所示。

          ansible-playbook -i environments/local/ setup.yml

          執(zhí)行腳本過程

          接下來使用 CouchDB 部署 OpenWhisk,確保本地已經(jīng)有了 db_local.ini。在 openwhisk/ 目錄下執(zhí)行部署命令:

          ./gradlew distDocker

          如果部署過程中出現(xiàn)問題(如下圖所示),可能是沒有安裝 npm 導(dǎo)致的,此時(shí)可以執(zhí)行如下指令。

          部署過程可能報(bào)錯(cuò)示例


          apt install npm

          稍等片刻,可以看到 Build 成功頁面,如圖所示。

          Build 成功示例

          接下來進(jìn)入 openwhisk/ansible 目錄:

          ansible-playbook -i environments/local/ couchdb.ymlansible-playbook -i environments/local/ initdb.ymlansible-playbook -i environments/local/ wipe.ymlansible-playbook -i environments/local/ apigateway.ymlansible-playbook -i environments/local/ openwhisk.ymlansible-playbook -i environments/local/ postdeploy.yml

          執(zhí)行腳本過程如圖所示。

          執(zhí)行腳本過程


          部署成功后,OpenWhisk 會(huì)在系統(tǒng)中啟動(dòng)幾個(gè) Docker 容器。我們可以通過 docker ps 來查看:

          docker ps --format "{{.Image}} \t {{.Names }}"

          安裝成功后的容器列表如圖所示。

          安裝成功后的容器列表


          開發(fā)者工具



          OpenWhisk 提供了一個(gè)統(tǒng)一的命令行接口 wsk。生成的 wsk 在 openwhisk/bin 下。其有兩個(gè)屬性需要配置。

          • API host 用于部署 OpenWhisk 的主機(jī)名或 IP 地址的 API。
          • Authorization key(用戶名或密碼)用來授權(quán)操作 OpenWhisk 的 API。


          設(shè)置 API host,在單機(jī)配置中的 IP 應(yīng)該為 172.17.0.1,如圖所示。

          ./bin/wsk property set --apihost '172.17.0.1'

          設(shè)置 API host

          設(shè)置 key:

          ./bin/wsk property set --auth `cat ansible/files/auth.guest

          權(quán)限設(shè)置如圖所示。

          設(shè)置權(quán)限


          OpenWhisk 將 CLI 的配置信息存儲(chǔ)在 ~/.wskprops 中。這個(gè)文件的位置也可以通過環(huán)境變量 WSK_CONFIG_FILE 來指定。

          驗(yàn)證 CLI:

          wsk action invoke /whisk.system/utils/echo –p message hello –result{    "message": "hello"}


          體驗(yàn)測(cè)試



          創(chuàng)建簡單的動(dòng)作(action),代碼如下:

          # test.pydef main(args):    num = args.get("number", "30")????return?{"fibonacci":?F(int(num))}def F(n):    if n == 0:        return 0    elif n == 1:        return 1    else:        return F(n - 1) + F(n - 2)

          創(chuàng)建動(dòng)作:

          /bin/wsk action create myfunction ./test.py  --insecure

          函數(shù)創(chuàng)建如圖所示。

          創(chuàng)建函數(shù)

          觸發(fā)動(dòng)作:

          ./bin/wsk -i action invoke myfunction --result --blocking --param nember 20

          得到結(jié)果,如圖所示。

          執(zhí)行函數(shù)

          至此,我們完成了 OpenWhisk 項(xiàng)目的部署以及測(cè)試。

          Serverless 工程實(shí)踐系列



          Serverless 工程實(shí)踐 | 從云計(jì)算到 Serverless

          Serverless 工程實(shí)踐 | 細(xì)數(shù) Serverless 的配套服務(wù)

          Serverless 工程實(shí)踐 | 傳統(tǒng) Web 框架遷移? ? ? ? ? ? ? ?

          Serverless 工程實(shí)踐 | Serverless 應(yīng)用開發(fā)觀念的轉(zhuǎn)變

          Serverless 工程實(shí)踐 | Serverless 應(yīng)用優(yōu)化與調(diào)試秘訣

          Serverless 工程實(shí)踐 | 零基礎(chǔ)上手 Knative 應(yīng)用

          ??戳閱讀原文,立即購買!
          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产情侣第一页 | 久久精品免费电影 | 国产aaa| 婷av| 国产一级黄片观看 |