Apache OpenWhisk架構概述

Apache 軟件 CouchDB Nginx 零空科技 2017-06-10

【摘要】Apache OpenWhisk是一個開源FaaS平臺。現在,AWS Lambda是FaaS最流行的實現。 在開源組件的選擇中,OpenWhisk是最好的選擇。OpenWhisk是一個健壯的、可擴展的平臺,支持數千併發觸發器和調用。這篇文章將探索OpenWhisk設計和架構,識別各種組件及其作用,可以幫助我們更好的瞭解分佈式系統和serverless平臺。

Apache OpenWhisk是一個由IBM和Adobe驅動的開源項目,它是一個健壯的FaaS平臺,可以部署在雲或數據中心內。相比其他serverless項目,OpenWhisk是一個健壯的、可擴展的平臺,支持數千併發觸發器和調用。

你可以使用Bluemix託管版本的OpenWhisk或在自己的開發機器上部署基於Vagrant的OpenWhisk環境。在本文中,我們將探索OpenWhisk的設計和架構,識別各種組件及其作用。

要獲得最佳的指南,建議在自己的機器上部署基於Vagrant的OpenWhisk環境。OpenWhisk的CLI,wsk應該配置本地的設置。

  • 架構的快速回顧

Apache OpenWhisk旨在作為異步和鬆耦合的執行環境,可以基於外部觸發器運行功能。開發人員編寫獨立的功能,作為操作上傳,完全獨立於事件源。事件源通過必不可少的正確的參數集調用操作。

一旦操作就位,開發人員就可以創建觸發器。觸發器是事件源顯式調用端點,事件源如:數據庫、流處理引擎、文件系統和業務應用程序等。一個操作獨立於觸發器,這意味著觸發器可能或可能沒有任何操作綁定。當事件源觸發一個觸發器時,可能不知道被調用的操作。綁定到觸發器的操作集只在運行時被發現和執行。

但是,開發人員如何使用觸發器綁定操作?這就出現了規則。規則作為觸發器和操作之間的粘合,在觸發器和操作之間創建鬆耦合的關聯。該設計模式使得相同的操作可以被不同的觸發器調用。

Apache OpenWhisk架構概述

這種鬆耦合的架構使OpenWhisk成為可擴展、可靠和強大的無服務器平臺。 執行的每個層都被設計成獨立擴展。

操作、規則和觸發器可以通過REST端點創建和管理。 事件源調用一個操作所需要做的就是調用觸發器的REST API。

下面是演示的工作流程,突出了創建和調用代碼的簡單而強大的機制:

$ cat > hello.js << EOF
  • OpenWhisk的構建模塊

現在來看看OpenWhisk的核心組件。

下圖描繪了OpenWhisk的架構。 從Nginx到Kafka到Docker,這個serverless平臺使用多種技術。

Apache OpenWhisk架構概述

通過訪問Vagrant Box,使用SSH去檢查運行的Docker容器和拉取的圖像:

$ docker ps --format "{{.Names}} - {{.Image}}"

前兩個容器代表最近被調用的操作,而其他容器則直接映射到核心組件。下面讓我們瞭解每個組件的作用。

  • Nginx

這個開源Web服務器暴露HTTP(S)端點給客戶端。它主要用做API的反向代理以及終止SSL連接。每個進入OpenWhisk基礎架構的請求,包括那些源自wsk CLI的請求,都通過該層。由於它是完全無狀態的,所以Nginx層可以輕鬆擴展。

  • 控制器

在通過反向代理的請求之後,會觸發控制器,該控制器充當系統的守門員。在Scala中,該組件負責OpenWhisk API的實際實現。在將控件交給下一個組件之前,它會執行每個請求的身份驗證和授權。控制器被認為是系統的協調者,它將決定請求最終採取的路徑。

  • CouchDB

系統的狀態在CouchDB(一個開源JSON數據存儲)中進行維護和管理。憑證、元數據、命名空間以及操作、觸發器和規則的定義存儲在CouchDB中。控制器根據存儲在此數據庫中的憑證識別憑證。

可以通過訪問http://192.168.33.13:5984/_utils/(鏈接僅在開發者機器上使用)從瀏覽器訪問數據庫。

Apache OpenWhisk架構概述

查看創建的初始的操作、觸發器和規則集http://192.168.33.13:5984/_uti ... hisks:

Apache OpenWhisk架構概述

helloAction的源代碼也保留在CouchDB中,包括操作的定義、默認參數和所分配的資源配額:

Apache OpenWhisk架構概述

OpenWhisk中的每次調用都會導致一個激活,它包含Action的輸出。 例如,以下命令異步調用helloAction導致新的激活ID:

$ wsk -i action invoke helloAction

如下是存儲在CouchDB中的輸出。

Apache OpenWhisk架構概述

  • Consul

OpenWhisk、Kubernetes和Swarm這樣的現代分佈式計算平臺依靠分佈式鍵/值存儲進行狀態管理。 OpenWhisk使用Consul作為系統每個組件可訪問的單一數據源。 同時,consul還提供服務發現功能,使控制器發現調用操作的實體。 這些實體被稱為調用者(Invokers),它們直接負責執行代碼。 Consul擁有可用的調用者及其健康狀況清單。

Consul支持註冊者Registrator,註冊者可以觀看新的Docker容器,並檢查他們,決定他們提供的服務。 當Docker引擎創建一個新的容器時,註冊者會收到被推入Consul的事件。

當Controller需要將操作委派給調用者時,它會在Consul列表中查找合適的候選人。

Consul的UIhttp://192.168.33.13:8500/ui/#/dc1/services:

Apache OpenWhisk架構概述

查看可用的調用者:http://192.168.33.13:8500/ui/#/dc1/kv/invokers/

Apache OpenWhisk架構概述

  • Kafka

Apache Kafka通常用於構建實時數據管道和流應用程序。它支持需要可靠、高速數據攝取的生產工作負載。 OpenWhisk利用Kafka連接控制器和調用者。

kafka緩存由控制器發送的消息,然後再將它們傳遞給上節的Consul的調用者。當kafka確認消息被傳遞時,控制器立即用激活ID進行響應。這種無狀態架構使OpenWhisk具有高度可擴展性。

Apache ZooKeeper維護和管理Kafka集群。 Zookeeper的主要工作是跟蹤Kafka群集中存在的節點的狀態,並跟蹤主題、消息和配額。

  • 調用者(Invoker)

調用者使用Scala實現,調用者是處理執行過程的最後階段。基於運行時的要求和配額分配,會自動創建一個新的Docker容器,作為所選操作的執行單位。 調用者從CouchDB複製源代碼,並將其注入Docker容器。一旦執行完成,它將激活的結果存儲在CouchDB中,以便將來檢索。 調用者決定重新使用現有的“熱”容器,或啟動一個暫停的“暖”容器,或啟動一個新的“冷”容器進行新的調用。它會查詢Conusl的容器狀態以進行適合的調用。

可能有多個調用者取決於平臺的負載和利用率。

根據元數據,調用者會選擇要使用的容器圖像。以下是調用helloAction的兩個容器。

$ docker ps --format "{{.Names}} - {{.Image}}"| grep "JsContainer"
  • Docker

Apache OpenWhisk建立在一些開源技術基礎上,Docker起著非常重要的作用。 幾乎所有的OpenWhisk組件都打包和部署為容器。 從Nginx到kafka到consul,平臺運行都是容器。可以通過Docker hub查詢OpenWhisk鏡像列表。

  • 即將到來:API網關

雖然沒有完全集成,OpenWhisk也有一個內置的API網關負責暴露操為HTTP端點。 基於Openresty的Nginx,此項目是由Adobe維護的開源項目。 目前這種能力是可用的實驗功能,以下命令顯示了可能的選項:

$ wsk -i api-experimental
  • 總結

OpenWhisk是一個吸引人的項目去了解分佈式系統和serverless平臺。 感謝IBM和Adobe捐贈到Apache基金會,鼓勵社區參與。 最近,儘管許多開源serverless平臺如雨後春筍般湧現,而OpenWhisk以健壯的架構和設計的脫穎而出。

在開源組件的選擇中,OpenWhisk是最好的選擇,貢獻總體成功的平臺。 希望看到在未來幾個月增加採用OpenWhisk。 並關注整合OpenWhisk與流行的數據庫、存儲引擎和API網關。

相關推薦

推薦中...