緬甸鉆石國際Apache13378837779OpenWhisk架構概述
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旨在作為異步和松耦合的履行環境,能夠依據外部觸發器運轉功用。開發人員編寫獨立的功用,作為操作上傳,徹底獨立於事情源。事情源經過必不可少的正確的參數集調用操作。
一旦操作就位,開發人員就能夠創立觸發器。觸發器是事情源顯式調用端點,事情源如:數據庫、流處理引擎、文件體系和事務應用程序等。一個操作獨立於觸發器,這意味著觸發器可能或可能沒有任何操作綁定。當事情源觸發一個觸發器時,可能不知道被調用的操作。綁定到觸發器的操作集只在運轉時被發現和履行。
但是,開發人員如何運用觸發器綁定操作?這就呈現了規矩。規矩作為觸發器和操作之間的粘合,在觸發器和操作之間創立松耦合的相關。該規劃形式使得相同的操作能夠被不同的觸發器調用。
這種松耦合的架構使OpenWhisk成為可擴展、牢靠和強壯的無效勞器渠道。 履行的每個層都被規劃成獨立擴展。
操作、規矩和觸發器能夠經過REST端點創立和辦理。 事情源調用一個操作所需要做的就是調用觸發器的REST API。
下面是演示的作業流程,突出了創立和調用代碼的簡略而強壯的機制:
$ cat > hello.js << EOF
-
OpenWhisk的構建模塊
現在來看看OpenWhisk的中心組件。
下圖描繪了OpenWhisk的架構。 從Nginx到Kafka到Docker,這個serverless渠道運用多種技能。
經過拜訪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/(鏈接僅在開發者機器上運用)從瀏覽器拜訪數據庫。
檢查創立的初始的操作、觸發器和規矩集http://192.168.33.13:5984/_uti ... hisks:
helloAction的源代碼也保留在CouchDB中,包括操作的界說、默認參數和所分配的資源配額:
OpenWhisk中的每次調用都會導致一個激活,它包括Action的輸出。 例如,以下命令異步調用helloAction導致新的激活ID:
$ wsk -i action invoke helloAction
如下是存儲在CouchDB中的輸出。
-
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:
檢查可用的調用者:http://192.168.33.13:8500/ui/#/dc1/kv/invokers/
-
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網關。
架構的快速回憶
$ cat > hello.js << EOF
OpenWhisk的構建模塊
$ docker ps --format "{{.Names}} - {{.Image}}"
Nginx
控制器
CouchDB
$ wsk -i action invoke helloAction
Consul
Kafka
調用者(Invoker)
$ docker ps --format "{{.Names}} - {{.Image}}"| grep "JsContainer"
Docker
即將到來:API網關
$ wsk -i api-experimental
總結
緬甸鉆石國際Apache13378837779OpenWhisk架構概述