《Apache OpenWhisk架構(gòu)概述》要點:
本文介紹了Apache OpenWhisk架構(gòu)概述,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關主題:apache配置
【摘要】Apache OpenWhisk是一個開源FaaS平臺.現(xiàn)在,AWS Lambda是FaaS最流行的實現(xiàn). 在開源組件的選擇中,OpenWhisk是最好的選擇.OpenWhisk是一個健壯的、可擴展的平臺,支持數(shù)千并發(fā)觸發(fā)器和調(diào)用.這篇文章將探索OpenWhisk設計和架構(gòu),識別各種組件及其作用,可以贊助我們更好的了解分布式系統(tǒng)和serverless平臺.
Apache OpenWhisk是一個由IBM和Adobe驅(qū)動的開源項目,它是一個健壯的FaaS平臺,可以部署在云或數(shù)據(jù)中心內(nèi).相比其他serverless項目,OpenWhisk是一個健壯的、可擴展的平臺,支持數(shù)千并發(fā)觸發(fā)器和調(diào)用.
你可以使用Bluemix托管版本的OpenWhisk或在本身的開發(fā)機器上部署基于Vagrant的OpenWhisk環(huán)境.在本文中,我們將探索OpenWhisk的設計和架構(gòu),識別各種組件及其作用.
要獲得最佳的指南,建議在自己的機器上部署基于Vagrant的OpenWhisk環(huán)境.OpenWhisk的CLI,wsk應該配置當?shù)氐脑O置.
架構(gòu)的快速回顧
Apache OpenWhisk旨在作為異步和松耦合的執(zhí)行環(huán)境,可以基于外部觸發(fā)器運行功能.開發(fā)人員編寫獨立的功能,作為操作上傳,完全獨立于變亂源.變亂源通過必不可少的正確的參數(shù)集調(diào)用操作.
一旦操作就位,開發(fā)人員就可以創(chuàng)建觸發(fā)器.觸發(fā)器是變亂源顯式調(diào)用端點,變亂源如:數(shù)據(jù)庫、流處理引擎、文件系統(tǒng)和業(yè)務應用程序等.一個操作獨立于觸發(fā)器,這意味著觸發(fā)器可能或可能沒有任何操作綁定.當變亂源觸發(fā)一個觸發(fā)器時,可能不知道被調(diào)用的操作.綁定到觸發(fā)器的操作集只在運行時被發(fā)現(xiàn)和執(zhí)行.
但是,開發(fā)人員如何使用觸發(fā)器綁定操作?這就出現(xiàn)了規(guī)則.規(guī)則作為觸發(fā)器和操作之間的粘合,在觸發(fā)器和操作之間創(chuàng)建松耦合的關聯(lián).該設計模式使得相同的操作可以被分歧的觸發(fā)器調(diào)用.
這種松耦合的架構(gòu)使OpenWhisk成為可擴展、可靠和強大的無服務器平臺. 執(zhí)行的每個層都被設計成獨立擴展.
操作、規(guī)則和觸發(fā)器可以通過REST端點創(chuàng)建和管理. 事件源調(diào)用一個操作所必要做的就是調(diào)用觸發(fā)器的REST API.
下面是演示的工作流程,突出了創(chuàng)建和調(diào)用代碼的簡單而強大的機制:
$ cat > hello.js << EOF
OpenWhisk的構(gòu)建模塊
現(xiàn)在來看看OpenWhisk的核心組件.
下圖描繪了OpenWhisk的架構(gòu). 從Nginx到Kafka到Docker,這個serverless平臺使用多種技術.
通過拜訪Vagrant Box,使用SSH去檢查運行的Docker容器和拉取的圖像:
$ docker ps --format "{{.Names}} - {{.Image}}"
前兩個容器代表最近被調(diào)用的操作,而其他容器則直接映射到核心組件.下面讓我們了解每個組件的作用.
Nginx
這個開源Web服務器暴露HTTP(S)端點給客戶端.它主要用做API的反向代理以及終止SSL連接.每個進入OpenWhisk基礎架構(gòu)的哀求,包括那些源自wsk CLI的哀求,都通過該層.由于它是完全無狀態(tài)的,所以Nginx層可以輕松擴展.
控制器
在通過反向代理的哀求之后,會觸發(fā)控制器,該控制器充當系統(tǒng)的守門員.在Scala中,該組件負責OpenWhisk API的實際實現(xiàn).在將控件交給下一個組件之前,它會執(zhí)行每個哀求的身份驗證和授權(quán).控制器被認為是系統(tǒng)的協(xié)調(diào)者,它將決定哀求最終采取的路徑.
CouchDB
系統(tǒng)的狀態(tài)在CouchDB(一個開源JSON數(shù)據(jù)存儲)中進行維護和管理.憑證、元數(shù)據(jù)、命名空間以及操作、觸發(fā)器和規(guī)則的定義存儲在CouchDB中.控制器根據(jù)存儲在此數(shù)據(jù)庫中的憑證辨認憑證.
可以通過拜訪http://192.168.33.13:5984/_utils/(鏈接僅在開發(fā)者機器上使用)從瀏覽器拜訪數(shù)據(jù)庫.
查看創(chuàng)建的初始的操作、觸發(fā)器和規(guī)則集http://192.168.33.13:5984/_uti ... hisks:
helloAction的源代碼也保留在CouchDB中,包含操作的定義、默認參數(shù)和所分配的資源配額:
OpenWhisk中的每次調(diào)用都會導致一個激活,它包括Action的輸出. 例如,以下命令異步調(diào)用helloAction導致新的激活ID:
$ wsk -i action invoke helloAction
如下是存儲在CouchDB中的輸出.
Consul
OpenWhisk、Kubernetes和Swarm這樣的現(xiàn)代分布式計算平臺依靠分布式鍵/值存儲進行狀態(tài)管理. OpenWhisk使用Consul作為系統(tǒng)每個組件可拜訪的單一數(shù)據(jù)源. 同時,consul還提供服務發(fā)現(xiàn)功能,使控制器發(fā)現(xiàn)調(diào)用操作的實體. 這些實體被稱為調(diào)用者(Invokers),它們直接負責執(zhí)行代碼. Consul擁有可用的調(diào)用者及其健康狀況清單.
Consul支持注冊者Registrator,注冊者可以觀看新的Docker容器,并檢查他們,決定他們提供的服務. 當Docker引擎創(chuàng)建一個新的容器時,注冊者會收到被推入Consul的變亂.
當Controller必要將操作委派給調(diào)用者時,它會在Consul列表中查找合適的候選人.
Consul的UIhttp://192.168.33.13:8500/ui/#/dc1/services:
查看可用的調(diào)用者:http://192.168.33.13:8500/ui/#/dc1/kv/invokers/
Kafka
Apache Kafka通常用于構(gòu)建實時數(shù)據(jù)管道和流應用程序.它支持必要可靠、高速數(shù)據(jù)攝取的生產(chǎn)工作負載. OpenWhisk利用Kafka連接控制器和調(diào)用者.
kafka緩存由控制器發(fā)送的消息,然后再將它們傳遞給上節(jié)的Consul的調(diào)用者.當kafka確認消息被傳遞時,控制器立即用激活ID進行響應.這種無狀態(tài)架構(gòu)使OpenWhisk具有高度可擴展性.
Apache ZooKeeper維護和管理Kafka集群. Zookeeper的主要工作是跟蹤Kafka群集中存在的節(jié)點的狀態(tài),并跟蹤主題、消息和配額.
調(diào)用者(Invoker)
調(diào)用者使用Scala實現(xiàn),調(diào)用者是處理執(zhí)行過程的最后階段.基于運行時的要求和配額分配,會自動創(chuàng)建一個新的Docker容器,作為所選操作的執(zhí)行單位. 調(diào)用者從CouchDB復制源代碼,并將其注入Docker容器.一旦執(zhí)行完成,它將激活的結(jié)果存儲在CouchDB中,以便將來檢索. 調(diào)用者決定重新使用現(xiàn)有的“熱”容器,或啟動一個暫停的“暖”容器,或啟動一個新的“冷”容器進行新的調(diào)用.它會查詢Conusl的容器狀態(tài)以進行適合的調(diào)用.
可能有多個調(diào)用者取決于平臺的負載和利用率.
根據(jù)元數(shù)據(jù),調(diào)用者會選擇要使用的容器圖像.以下是調(diào)用helloAction的兩個容器.
$ docker ps --format "{{.Names}} - {{.Image}}"| grep "JsContainer"
Docker
Apache OpenWhisk建立在一些開源技術基礎上,Docker起著非常重要的作用. 幾乎所有的OpenWhisk組件都打包和部署為容器. 從Nginx到kafka到consul,平臺運行都是容器.可以通過Docker hub查詢OpenWhisk鏡像列表.
即將到來:API網(wǎng)關
雖然沒有完全集成,OpenWhisk也有一個內(nèi)置的API網(wǎng)關負責裸露操為HTTP端點. 基于Openresty的Nginx,此項目是由Adobe維護的開源項目. 目前這種能力是可用的實驗功能,以下命令顯示了可能的選項:
$ wsk -i api-experimental
總結(jié)
OpenWhisk是一個吸引人的項目去了解分布式系統(tǒng)和serverless平臺. 感謝IBM和Adobe捐贈到Apache基金會,鼓勵社區(qū)參與. 最近,盡管許多開源serverless平臺如雨后春筍般涌現(xiàn),而OpenWhisk以健壯的架構(gòu)和設計的脫穎而出.
在開源組件的選擇中,OpenWhisk是最好的選擇,貢獻總體成功的平臺. 希望看到在未來幾個月增加采納OpenWhisk. 并關注整合OpenWhisk與流行的數(shù)據(jù)庫、存儲引擎和API網(wǎng)關.
歡迎參與《Apache OpenWhisk架構(gòu)概述》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/11781.html