天天看點

功能即服務(FaaS)介紹

本文講的是<b>功能即服務(FaaS)介紹</b>【編者的話】本文直接介紹無伺服器計算,然後介紹在之前500次commit裡FaaS的3大特性,最後展望未來。

<a href="http://dockone.io/article/2626">【燒腦式Kubernetes實戰訓練營】本次教育訓練理論結合實踐,主要包括:Kubernetes架構和資源排程原理、Kubernetes DNS與服務發現、基于Kubernetes和Jenkins的持續部署方案 、Kubernetes網絡部署實踐、監控、日志、Kubernetes與雲原生應用、在CentOS中部署Kubernetes叢集、Kubernetes中的容器設計模式、開發Kubernetes原生應用步驟介紹等。</a>

本文直接介紹無伺服器計算,然後介紹在之前500次commit裡FaaS的3大特性,最後展望未來。

<a href="http://dockerone.com/uploads/article/20170903/3efd7c3ca066f370e86c9157fa37f238.png" target="_blank"></a>

<a href="http://dockerone.com/uploads/article/20170903/3bb17dbcb28cbe9233e702faf1a84afe.jpg" target="_blank"></a>

“無伺服器”這個詞并不是很恰當——我們實際讨論的是事件驅動系統的一種全新架構模式。基于此,無伺服器功能常常被用來作為服務間的連接配接,或者用在事件驅動的架構裡。在過去,我們稱之為服務總線。

<a href="http://dockerone.com/uploads/article/20170903/82d4b3197229101f23eeddfd14ad4131.png" target="_blank"></a>

無伺服器是一段小型的,無關聯的,并且可重用的代碼:

它是短暫的

它不是daemon(長期運作的)

它不釋出TCP服務

它沒有狀态

利用已有服務或者第三方資源

幾秒内完成執行(基于AWS的Lambda)

我們還需要區分開無伺服器産品和IaaS供應商以及開源軟體項目。

一方面,IaaS供應商提供無伺服器産品,比如Lambda,Google Cloud Functions以及Azure Functions。另一方面,有FaaS這樣的架構,讓編排平台,比如Docker Swarm或者Kubernetes做重量的事情。

<a href="http://dockerone.com/uploads/article/20170903/e68f50b88cd626a84cce04deb7b46849.png" target="_blank"></a>

IaaS供應商提供的無伺服器産品是完全受控的,是以它提供了高度的便捷性和基于秒/分鐘的計費方案。另一面是,使用者需要跟蹤供應商的釋出和支援周期。開源的FaaS想要提供一些多樣性以供大家選擇。

FaaS基于業界标準的Cloud Native技術建構:

<a href="http://dockerone.com/uploads/article/20170903/2ba724915d40ba506614ec42ace58414.jpeg" target="_blank"></a>

使用者可以運作任意語言編寫的代碼

可以運作任意時間

可以在任何地方運作

轉向無伺服器化并不意味着用另一種程式設計語言重寫代碼。隻需繼續使用業務和團隊需要的東西即可。

示例:比如,<code>cat</code>或者<code>sha512sum</code>可以作為一種不需要變更的功能,通過stdin/stdout通信。Windows功能也可以通過Docker CE支援。

這是FaaS和其他開源無伺服器架構的主要差別,它們依賴于每種所支援的語言的特定運作時。

有安裝腳本可以用,John McCabe在<code>brew</code>上維護了項目的recipe。

或者

CLI的模闆是你唯一需要用所選的程式設計語言編寫handler的地方,CLI會使用模闆将其打包成Docker容器——FaaS會處理所需的步驟。

提供了Python和Node.js的模闆,但是你可以輕松建立自己的。

CLI支援三種操作:

<code>-action build</code>:從模闆在本地建立Docker鏡像

<code>-action push</code>:将模闆推送到指定的registry或者Hub上

<code>-action deploy</code>: 部署FaaS功能。

如果有一個單節點的叢集,那麼不需要推送鏡像就可以部署。

YAML格式的CLI配置配置示例:

Python功能的最簡潔的handler:

通過HTTP<code>pings</code>URL獲得傳回代碼的示例:

如果需要添加額外的<code>pip</code>子產品,那麼除了提供handler.py檔案之外還需要提供<code>requirements.txt</code>檔案。

之後可以找到一個稱為alexellis2/faas-urlping的Docker鏡像,可以使用<code>-action push</code>将其推送到DockerHub上,使用<code>-action deploy</code>将其部署。

當我了解了如何将Docker Swarm的理念映射到Kubernetes之後,我就在幾天之内實作了技術原型。我選擇了建立一個新的微服務daemon和Kubernetes互動,而不是給主要的FaaS代碼及引入額外的依賴條件。

FaaS通過标準的RESTful接口将調用路由到新的daemon上,完成各種操作,比如:Deploy,List,Delete,Invoke和Scale。

<a href="https://v.qq.com/x/page/v05458u3895.html">視訊</a>

但是等一下……其他三種架構在Kubernetes上可以用麼?

Kubernetes的無伺服器架構大概分為兩大類——一種對于每種所支援的程式設計語言都需要依賴于特定的運作時,一種像FaaS一樣,可以讓任意容器成為功能。

FaaS綁定到Docker Swarm和Kubernetes的原生API上,意味着它使用你已經使用的第一級對象來管理Deployment和Service。也就是說,這裡沒什麼代碼去了解你的新應用程式的邏輯。

選擇架構時的一個考慮是是否想要貢獻特性或者fix。比如,OpenWhisk,是用Scala編寫的,大部分其他架構使用Golang寫的。

<a href="https://github.com/funktionio/funktion">Funktion</a>

<a href="https://github.com/iron-io/functions">Iron Functions</a>

<a href="https://github.com/apache/incubator-openwhisk">OpenWhisk</a>

<a href="https://github.com/kubeless/kubeless">Kubeless</a>

<a href="https://github.com/fission/fission">Fission</a>

<a href="https://github.com/alexellis/faas-netes">FaaS-netes</a>

無伺服器功能的一大特征是小而快,通常在幾秒之内就異步完成了。想要異步處理功能的幾點理由是:

它是一個事件并且調用者不需要結果

它需要很長時間執行或者初始化——比如,TensorFlow/機器學習

在批量job裡消費大量請求

想要限制速度

<a href="http://dockerone.com/uploads/article/20170903/8a5ddd97bf0aeafd1fdb8b6cb4a49abe.png" target="_blank"></a>

嘗試異步代碼的Gist:

<a href="https://gist.github.com/alexellis/62dad83b11890962ba49042afe258bb1">Run through the FaaS/Async Gist</a>

<a href="http://dockerone.com/uploads/article/20170903/39280361632ac2b24e4cb40801bdaf0e.png" target="_blank"></a>

Packet正在自動化網際網路,提供了很好的雲上純實體基礎架構。

<b>原文釋出時間為:</b>2017-09-02

<b>本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。</b>

<b></b>

<b>原文标題:</b><b>功能即服務(FaaS)介紹</b>

繼續閱讀