OpenWhisk 簡介 輕鬆建立微服務

Mondo 科技 更新 2024-03-03

OpenWhisk 是乙個開源的、事件驅動的計算平台。

在上一篇文章中,我介紹了乙個微服務架構,它使用佇列、發布/訂閱頻道或訊息中心來排列“工作”列表。 每個工作項都是乙個資料塊,將以某種方式(通常是 JSON 文件)進行處理、儲存或操作。 我使用 Redis、RabbitMQ 或 Apache Kafka 建立了乙個指標收集器微服務,用於從移動或 Web 應用程式收集 Web 指標資料,並將其寫入佇列或發布/子通道。

另乙個指標收集器儲存微服務使用的收集資料,並將其寫入 Cloudant、MongoDB 或 Elasticsearch 選項。 然後,我向您展示了如何新增其他微服務,以便在流資料傳入時對其進行聚合。 幸運的是,作曲IO 支援部署 Redis、Rabbimq、MongoDB 或 Elasticsearch,IBM 提供 Cloudant 和 Apache Kafka 即服務,因此很容易上手,但有很多變化的部分。

今天,我正在使用一項新服務 OpenWhisk,它簡化了微服務的部署,無需管理自己的訊息傳遞或部署自己的工作伺服器。

OpenWhisk 是乙個開源的、事件驅動的計算平台。 您可以將操作傳送到 OpenWhisk,然後提供要由 OpenWhisk 處理的資料流。 OpenWhisk 處理處理工作負載所需的計算資源的擴充套件; 您只需要處理操作**和觸發這些操作的資料。 您只需為已完成的工作量付費,而不必為等待工作的閒置伺服器付費。

您可以在 jAscript 或 Swift 中編寫操作。 這意味著 Web 開發人員和 iOS 開發人員可以使用相同的語言來建立伺服器端和前端。

本文中提供的部分和命令列呼叫假定您已在 IBM Cloud(以前稱為 Bluemix)(現在更名為 IBM Cloud Functions,基於 Apache OpenWHISK)中註冊了 OpenWHISK beta 計畫,並且您已經安裝了“WSK”命令列工具。 請訪問我們建立乙個名為“hello”的檔案。js 的 j**ascript 檔案,其中包含乙個返回簡單物件的函式:

function main()
這是最簡單的 OpenWhisk 操作; 它只返回乙個靜態字串作為有效負載。 使用以下命令將操作部署到 openwhisk:

> wsk action create hello hello.jsok: created action hello
這將建立乙個名為“hello”的操作來執行 hellojs的。 我們可以使用以下命令在雲中執行它:

> wsk action invoke --blocking hello
我們也可以要求我們輸入一些引數:

function main(params) ;
然後更新我們的操作:

> wsk action update hello hello.jsok: created updated hello
使用引數執行我們的 **:

> wsk action invoke --blocking --result hello --param name 'jennie' --param place 'the block'
我們建立了乙個簡單的 j**ascript 函式來處理一些資料,而不必擔心佇列、員工或任何網路基礎設施,並且我們能夠在 OpenWhisk 平台上做到這一點。

我們可以在操作中做更複雜的事情,比如做 API 呼叫。 我建立了以下操作,該操作呼叫包含《權力的遊戲》資料的簡單搜尋服務例項,並傳入 q 引數:

var request = require('request');function main(msg) ,json:true}request(opts, function(error, response, body) )return whisk.async();
我們可以建立這個動作,並給它乙個不同的名稱:

> wsk action create gameofthrones gameofthrones.jsok: created action gameofthrones
然後用引數 q 呼叫它;

> wsk action invoke --blocking --result gameofthrones --param q 'melisandre',"gender":},"from_cache":true,"rows":"total_rows":1}}
我們可以在 OpenWhisk 操作中執行的另乙個任務是在 Slack 中發布訊息。 Slack 有乙個很好的 API 來建立自定義整合:Slack 管理員可以設定乙個“傳入 Webhook”,這樣他們就可以通過簡單地向 HTTP 端點傳送 POST 請求來將字串發布到頻道。 我們可以用幾行建立 Slack 發布操作:

var request = require('request');function main(msg) )json:true}request(opts, function(error, response, body) )return whisk.async();
將“我的自定義 Slack Webhook URL”替換為 Slack 在建立“傳入 Webhook”整合時建立的 Webhook URL。 請注意,此操作是非同步執行的,並且僅在請求完成時回收。

然後,我們可以像往常一樣部署和執行它:

> wsk action create slack slack.jsok: created action slack
> wsk action invoke --blocking --result slack --param text'you know nothing, jon snow'

碰巧的是,Whisk 有乙個內建的 Slack 整合,但你自己構建乙個對您來說也不錯,不是嗎? 然後,您可以執行自己的邏輯,根據傳入的資料決定是否發布 Slack 訊息。

將自己的自定義操作寫入 Cloudant 相對簡單,因為您可以:

Cloudant Node 的“要求”js 庫使用 Cloudant 的 HTTP API 將資料寫入 Cloudant 這種方法的缺點是您需要將 Cloudant 憑據硬編碼到操作中,就像我們在上乙個示例中硬編碼 Slack webhook URL 一樣,這不是最佳實踐。

幸運的是,OpenWhisk 有乙個預構建的 Cloudant 整合,您無需任何自定義即可呼叫它**。 如果您已經擁有 Cloudant 帳戶,則可以使用以下命令列授予對 Cloudant 服務的訪問許可權:

> wsk package bind /whisk.system/cloudant mycloudant -pusername 'myusername' -p password 'mypassword' -p host'mydomainname.cloudant.com'
然後,您可以檢視 OpenWHISK 可以與之互動的連線列表:

> wsk package listpackages/[email protected]_dev/mycloudant private binding
其中[email protected] 是我的 IBM Cloud 使用者名稱(或您的 IBM Cloud 組織的名稱),Dev 是您的 IBM Cloud 空間。

您可以呼叫包的 write 命令將資料寫入 cloudant:

> wsk action invoke /[email protected]_dev/mycloudant/ write --blocking --result --param dbname testdb --param doc ''
到目前為止,我們已經建立並更新了 openwhisk 操作,並且我們還觸發了每個操作以將任務作為一組命令執行。 “wsk”工具允許您觸發一些操作,在後台執行它們,還允許您將操作鏈結在一起以形成序列,但我們不打算在本文中介紹這一點。

我們是乙個簡單的 j**ascript 塊,其中只呼叫“main”函式。 這意味著我們可以使用常見的自動化測試和持續整合工具來測試我們的。 部署只需要乙個命令列語句; 無需擔心伺服器、作業系統或網路硬體。

OpenWhisk 是乙個事件驅動的系統。 你已了解如何通過手動部署**來建立事件。 但是我們如何設定 OpenWhisk 來處理事件流呢?

OpenWhisk 中的觸發器是觸發事件和執行 ** 的另一種方式。 我們可以建立一些指定的觸發器,然後建立一些規則來定義要對哪些觸發器執行哪些操作(而不是直接呼叫操作,我們將呼叫觸發器; 為這些觸發器定義的規則決定了要執行的操作。 這允許我們將操作鏈結在一起,允許觸發器觸發多個操作的執行,還可以通過將其分配給多個觸發器來重用相同的操作。

觸發器可以單獨觸發,也可以與外部源關聯觸發,例如:

來自 cloudant 資料庫的更改源 - 每次新增、更新或刪除文件時,都會觸發乙個觸發器 GitHub 儲存庫提交源 - 每次提交時,都會觸發乙個觸發器,因此我們可以使用 cloudant 資料庫觸發觸發器,以便將一些資料寫入 Slack:

> wsk trigger create mycloudanttrigger --feed /[email protected]_dev/ mycloudant/changes --param dbname mydb --param includedocs true
然後配置該觸發器以觸發我們的 Slack 發布操作:

> wsk rule create --enable myrule mycloudanttriggerslack
現在,每次在 Cloudant 資料庫中新增、更新或刪除文件時,都會觸發我的自定義操作,在這種情況下,它會向 Slack 發布一條訊息!

OpenWhisk 適用於您不想管理任何基礎設施的專案。 您只需為您所做的工作付費,而不會在閒置的伺服器上浪費金錢。 OpenWhisk 易於管理活動峰值,因為它可以橫向擴充套件以滿足該需求。

將 OpenWHISK 與其他即服務資料庫(如 Cloudant)結合使用,因此您不必管理任何資料儲存基礎設施。 Cloudant 旨在儲存大型資料集、處理高併發率並提供高可用性。

由於執行 OpenWhisk 操作需要資源,因此最好將 OpenWhisk 用於以下不常見的計算任務,例如:

處理上傳的影象以建立縮圖,將它們儲存到物件儲存中,從移動應用程式獲取地理位置資料,並呼叫天氣 API 來增強它OpenWHISK 對於處理具有高併發性的系統也很有用,例如:

在將資料傳送到雲端時,還有一些我沒有涉及的 OpenWHISK 功能,其中資料由移動應用程式儲存和處理,例如 Swift 支援、使用 docker 容器作為操作而不是上傳源的能力,以及移動 SDK。

相關問題答案

    全文淺析創智榮鑫集團介紹

    青島創智榮鑫數字科技集團是一家以科技創新為核心,致力於提供全方位數位化解決方案的綜合性產業投資企業。創智榮鑫自成立以來,一直秉承 創新 的經營理念,以客戶需求為導向,提供全週期服務。創智榮鑫集團匯聚了眾多行業精英,擁有強大的研發團隊和深厚的技術積累。在汽車 文化旅遊 大宗生產 農業 科技研發等領域,...

    崔漢文先生是數字時代營銷創新的實踐專家

    崔漢文老師。曾任 阿里商業評論 創始主編 新零售研究中心主任。曾任阿里巴巴集團商業生態 創新案例研究和公共戰略負責人。曾任大唐電信集團 中國首批 創新型企業 之一 戰略管理負責人。曾任GFK諮詢公司 全球三大市場研究公司之一 中國產品研究部負責人。曾任中科同創 扶貧辦創新試點單位 董事總經理兼首席執...

    共享購物模式 輕鬆創造財富,分享全新購物體驗!

    介紹 憑藉其獨特的設計,共享模式為使用者 商家和平台創造了清晰的參與者身份和公升級條件。本文將深入分析這些身份的重要性以及公升級條件對使用者激勵的作用,並揭示共享購買模式如何通過這種機制促進平台的可持續發展。定義共享 共享購買模式的核心理念是消費即投資,而參與者身份和公升級條件的設計使這一理念成為可...

    共享購買模式火爆,輕鬆創造財富,最火選賺錢!

    共享購買的業務邏輯和遊戲玩法 業務邏輯和玩法是共享購買模式吸引使用者參與的關鍵要素。通過對邏輯體系的深入分析,以及模式中的多種玩法,共享購買打破傳統商業模式,為使用者 商家和平台構建互利共贏的商業生態。共享購買的核心理念 即構建有機商用閉環,讓使用者在平台上的消費行為不僅僅是獲取商品和服務,更是一種...

    鏈2 1模式揭秘輕鬆創財秘訣,最流行的賺錢方式!

    連鎖 模式作為一種具有獨特優勢的電商裂變模式,以其簡單高效的機制,迅速成為零售業的領跑者。本文將深入介紹連鎖 模式的四大優勢和特點,以及其在零售市場上的搶眼特點。鏈式 模式創新性地只設定二次分銷,擺脫了繁瑣的傳統多級分銷。這種簡單的分配結構保證了收入的合理 合規分配,使整個系統更加透明,符合行業規範...