如何在Rancher上運行無服務器應用程序

最近,系統設計中較新穎的概念之一要屬「無服務器架構」理念。毫無疑問, 這有點誇張, 由於確實有服務器參與其中, 但這意味着咱們能夠以不一樣的方式看待服務器。git

無服務器的潛在上升空間

想象一下,一個簡單的基於Web的應用程序,處理來自HTTP客戶端的請求。而不是讓一些程序運行時等待請求到達,而後調用一個函數來處理它們,若是咱們能夠按需啓動運行每一個函數,而後將其丟棄,那會怎樣?咱們不須要擔憂能夠接受鏈接的運行的服務器數量,或者在伸縮時處理複雜的配置管理系統以構建應用程序的新實例。此外,咱們還將減小諸如內存泄漏、分段錯誤等狀態管理的常見問題。github

或許最重要的一點是,這種按需調用函數的方法將容許咱們伸縮每一個函數,以匹配請求數並對它們並行處理。每一個「客戶」都將得到一個專門的流程來處理他們的請求,而流程數只會受到您處理的計算能力的限制。當與一個大型雲提供商耦合,其可用的計算大大超過您的使用量,此時無服務器就有可能移除大量的複雜性,從而伸縮應用程序。golang

潛在的缺點

誠然, 在爲每一個請求構建進程時, 仍存在增長的滯後時間的挑戰。無服務器永遠不會像預先分配的進程和內存那樣樣快;然而,問題不在於它是否更快, 而在於它是否足夠快。從理論上講, 咱們會接受無服務器的延遲, 由於咱們會獲得回報。然而, 這一權衡需創建在對手頭的狀況進行仔細評估的基礎上。docker

使用Rancher和開源工具實現無服務器

Docker爲咱們提供了不少工具來實現這個無服務器的概念,並在最近的DockerCon上給出了很好的演示。Rancher將這些能力最大化了。由於咱們的平臺承擔您的容器基礎架構的管理,因此只需操做一個API便可添加和刪除計算容量。經過軟件定義棧的這部分能力,支持用戶實現全面的應用程序自動化。json

棧中的下一層即爲無服務器系統編寫代碼的可用框架。您能夠本身編寫、或者擴展一些中間件來處理這個問題,但有不少開源項目提供了工具來簡化這一過程。其中一個項目是Iron.io的Iron功能。我在Rancher上作了一個快速的POC,發現它很容易使用。使用這些compose文件能夠在Rancher中快速啓動該設置。服務器

要使用這些文件,請將repo中的docker-compose.yml和rancher-compose.yml文件複製並粘貼到Rancher UI的「Add Stack(添加棧)」部分。或者從Rancher CLI中,簡單地運行「rancher up」(確保設置如下環境變量:RANCHER_URL,RANCHER_ACCESS_KEY,RANCHER_SECRET_KEY)。微信

棧啓動時,您應該能夠在Rancher UI中看到。此外,您能夠經過單擊棧中第一個項目(「API - lb」)旁邊的「i」圖標,查找 Iron Functions API端點和UI的URL。架構

輸入圖片說明 部署完成後運行無服務器棧負載均衡

輸入圖片說明 找到您的IronFunctions端點的URL框架

一旦您運行棧,請按照Iron.io的Github repo上的「Write a Function(編寫一個函數)」的說明進行操做。您可能須要一些時間來適應,由於這須要您在編寫應用程序時稍做改變。將不會有任何共享的狀態供您的函數引用,而庫之類的東西利用起來可能會又困難又昂貴。在個人例子中,我從Iron.io中選擇了一個簡單的golang函數:

package main

import (
"encoding/json"
"fmt"
"os"
)

type Person struct {
Name string
}

func main() {
p := &Person{Name: "World"}
json.NewDecoder(os.Stdin).Decode(p)
fmt.Printf("Hello %v!", p.Name)
}

下一步是將函數部署到咱們在Rancher中設置的Iron函數的實例中。爲了使這更容易嘗試,我編寫了一個爲您執行全部步驟的腳本。參照這個repo中的README。一旦部署了函數,您應該可以在UI中看到它,而後就能夠試着用它了:

輸入圖片說明 IronFunctions的Dashboard

輸入圖片說明 你的正在執行的函數的結果

從Rancher內部,您能夠根據您的需求擴張或縮減員工人數。Rancher會把它們放在一個主機上,並將它們鏈接到一個負載均衡器上。根據最佳實踐指南,您能夠簡單地根據「wait_time」度量,從而使伸縮操做相對簡單。

若您也想過用這種方式構建應用程序,我以爲本文的教程會是一個頗有用的嘗試。若是您對此有任何意見或反饋,不要猶豫,聯繫咱們!咱們一如既往地期待聽到您的反饋!

歡迎關注Rancher官方微信公衆號(RancherLabs),獲取第一手技術乾貨推送;歡迎添加客服微信(RancherLabsChina)爲好友,加入Rancher官方技術交流羣,獲取免費技術支持,與數千Docker/Rancher使用者互動。

9月27日,北京海航萬豪酒店,容器技術大會Container Day 2017即將舉行。

CloudStack之父、海航科技技術總監、華爲PaaS部門部長、恆豐銀行科技部總經理、阿里雲PaaS工程總監、民生保險CIO······均已加入豪華講師套餐!

11家已容器落地企業,15位真·雲計算大咖,13場純·技術演講,結合實戰場景,聚焦落地經驗。免費參會+超高規格,詳細議程及註冊連接請戳 輸入圖片說明

相關文章
相關標籤/搜索