本文講的是<b>Apache OpenWhisk架構概述【</b>編者的話】Apache OpenWhisk是一個開源FaaS平台。現在,AWS Lambda是FaaS最流行的實作。 在開源元件的選擇中,OpenWhisk是最好的選擇。OpenWhisk是一個健壯的、可擴充的平台,支援數千并發觸發器和調用。這篇文章将探索OpenWhisk設計和架構,識别各種元件及其作用,可以幫助我們更好的了解分布式系統和serverless平台。
<a href="http://dockone.io/article/2376">【3 天燒腦式 Docker 訓練營 | 上海站】随着Docker技術被越來越多的人所認可,其應用的範圍也越來越廣泛。本次教育訓練我們理論結合實踐,從Docker應該場景、持續部署與傳遞、如何提升測試效率、存儲、網絡、監控、安全等角度進行。</a>
Apache OpenWhisk旨在作為異步和松耦合的執行環境,可以基于外部觸發器運作功能。開發人員編寫獨立的功能,作為操作上傳,完全獨立于事件源。事件源通過必不可少的正确的參數集調用操作。
一旦操作就位,開發人員就可以建立觸發器。觸發器是事件源顯式調用端點,事件源如:資料庫、流處理引擎、檔案系統和業務應用程式等。一個操作獨立于觸發器,這意味着觸發器可能或可能沒有任何操作綁定。當事件源觸發一個觸發器時,可能不知道被調用的操作。綁定到觸發器的操作集隻在運作時被發現和執行。
但是,開發人員如何使用觸發器綁定操作?這就出現了規則。規則作為觸發器和操作之間的粘合,在觸發器和操作之間建立松耦合的關聯。該設計模式使得相同的操作可以被不同的觸發器調用。

這種松耦合的架構使OpenWhisk成為可擴充、可靠和強大的無伺服器平台。 執行的每個層都被設計成獨立擴充。
操作、規則和觸發器可以通過REST端點建立和管理。 事件源調用一個操作所需要做的就是調用觸發器的REST API。
下面是示範的工作流程,突出了建立和調用代碼的簡單而強大的機制:
現在來看看OpenWhisk的核心元件。
下圖描繪了OpenWhisk的架構。 從Nginx到Kafka到Docker,這個serverless平台使用多種技術。
通過通路Vagrant Box,使用SSH去檢查運作的Docker容器和拉取的圖像:
前兩個容器代表最近被調用的操作,而其他容器則直接映射到核心元件。下面讓我們了解每個元件的作用。
在通過反向代理的請求之後,會觸發控制器,該控制器充當系統的守門員。在Scala中,該元件負責OpenWhisk API的實際實作。在将控件交給下一個元件之前,它會執行每個請求的身份驗證和授權。控制器被認為是系統的協調者,它将決定請求最終采取的路徑。
helloAction的源代碼也保留在CouchDB中,包括操作的定義、預設參數和所配置設定的資源配額:
OpenWhisk中的每次調用都會導緻一個激活,它包含Action的輸出。 例如,以下指令異步調用helloAction導緻新的激活ID:
如下是存儲在CouchDB中的輸出。
OpenWhisk、Kubernetes和Swarm這樣的現代分布式計算平台依靠分布式鍵/值存儲進行狀态管理。 OpenWhisk使用Consul作為系統每個元件可通路的單一資料源。 同時,consul還提供服務發現功能,使控制器發現調用操作的實體。 這些實體被稱為調用者(Invokers),它們直接負責執行代碼。 Consul擁有可用的調用者及其健康狀況清單。
Consul支援注冊者Registrator,注冊者可以觀看新的Docker容器,并檢查他們,決定他們提供的服務。 當Docker引擎建立一個新的容器時,注冊者會收到被推入Consul的事件。
當Controller需要将操作委派給調用者時,它會在Consul清單中查找合适的候選人。
kafka緩存由控制器發送的消息,然後再将它們傳遞給上節的Consul的調用者。當kafka确認消息被傳遞時,控制器立即用激活ID進行響應。這種無狀态架構使OpenWhisk具有高度可擴充性。
調用者使用Scala實作,調用者是處理執行過程的最後階段。基于運作時的要求和配額配置設定,會自動建立一個新的Docker容器,作為所選操作的執行機關。 調用者從CouchDB複制源代碼,并将其注入Docker容器。一旦執行完成,它将激活的結果存儲在CouchDB中,以便将來檢索。 調用者決定重新使用現有的“熱”容器,或啟動一個暫停的“暖”容器,或啟動一個新的“冷”容器進行新的調用。它會查詢Conusl的容器狀态以進行适合的調用。
可能有多個調用者取決于平台的負載和使用率。
根據中繼資料,調用者會選擇要使用的容器圖像。以下是調用helloAction的兩個容器。
雖然沒有完全內建,OpenWhisk也有一個内置的API網關負責暴露操為HTTP端點。 基于Openresty的Nginx,此項目是由Adobe維護的開源項目。 目前這種能力是可用的實驗功能,以下指令顯示了可能的選項:
OpenWhisk是一個吸引人的項目去了解分布式系統和serverless平台。 感謝IBM和Adobe捐贈到Apache基金會,鼓勵社群參與。 最近,盡管許多開源serverless平台如雨後春筍般湧現,而OpenWhisk以健壯的架構和設計的脫穎而出。
在開源元件的選擇中,OpenWhisk是最好的選擇,貢獻總體成功的平台。 希望看到在未來幾個月增加采用OpenWhisk。 并關注整合OpenWhisk與流行的資料庫、存儲引擎和API網關。
===============================================================
譯者介紹:範彬,從事微服務、Docker和Kubernetes容器技術等方面的工作。可以關注譯者的微信公衆号:範範米飯。
原文釋出時間為:2017-06-08
本文作者:範彬
本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。
原文标題:Apache OpenWhisk架構概述