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