溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在Rancher上運行無服務(wù)器應(yīng)用程序

發(fā)布時間:2020-06-15 12:18:09 來源:網(wǎng)絡(luò) 閱讀:309 作者:RancherLabs 欄目:建站服務(wù)器

最近,系統(tǒng)設(shè)計中較新穎的概念之一要屬“無服務(wù)器架構(gòu)”理念。毫無疑問, 這有點夸張, 因為確實有服務(wù)器參與其中, 但這意味著我們可以以不同的方式看待服務(wù)器。


無服務(wù)器的潛在上升空間


想象一下,一個簡單的基于Web的應(yīng)用程序,處理來自HTTP客戶端的請求。而不是讓一些程序運行時等待請求到達,然后調(diào)用一個函數(shù)來處理它們,如果我們可以按需啟動運行每個函數(shù),然后將其丟棄,那會怎樣?我們不需要擔(dān)心可以接受連接的運行的服務(wù)器數(shù)量,或者在伸縮時處理復(fù)雜的配置管理系統(tǒng)以構(gòu)建應(yīng)用程序的新實例。此外,我們還將減少諸如內(nèi)存泄漏、分段錯誤等狀態(tài)管理的常見問題。

 

或許最重要的一點是,這種按需調(diào)用函數(shù)的方法將允許我們伸縮每個函數(shù),以匹配請求數(shù)并對它們并行處理。每個“客戶”都將獲得一個專門的流程來處理他們的請求,而流程數(shù)只會受到您處理的計算能力的限制。當(dāng)與一個大型云提供商耦合,其可用的計算大大超過您的使用量,此時無服務(wù)器就有可能移除大量的復(fù)雜性,從而伸縮應(yīng)用程序。


潛在的缺點


誠然, 在為每個請求構(gòu)建進程時, 仍存在增加的滯后時間的挑戰(zhàn)。無服務(wù)器永遠不會像預(yù)先分配的進程和內(nèi)存那樣樣快;然而,問題不在于它是否更快, 而在于它是否足夠快。從理論上講, 我們會接受無服務(wù)器的延遲, 因為我們會得到回報。然而, 這一權(quán)衡需建立在對手頭的情況進行仔細評估的基礎(chǔ)上。


使用Rancher和開源工具實現(xiàn)無服務(wù)器


Docker為我們提供了很多工具來實現(xiàn)這個無服務(wù)器的概念,并在最近的DockerCon上給出了很好的演示。Rancher將這些能力最大化了。因為我們的平臺承擔(dān)您的容器基礎(chǔ)架構(gòu)的管理,所以只需操作一個API即可添加和刪除計算容量。通過軟件定義棧的這部分能力,支持用戶實現(xiàn)全面的應(yīng)用程序自動化。


棧中的下一層即為無服務(wù)器系統(tǒng)編寫代碼的可用框架。您可以自己編寫、或者擴展一些中間件來處理這個問題,但有很多開源項目提供了工具來簡化這一過程。其中一個項目是Iron.io的Iron功能。我在Rancher上做了一個快速的POC,發(fā)現(xiàn)它很容易使用。使用這些compose文件可以在Rancher中快速啟動該設(shè)置。


要使用這些文件,請將repo中的docker-compose.yml和rancher-compose.yml文件復(fù)制并粘貼到Rancher UI的“Add Stack(添加棧)”部分?;蛘邚腞ancher CLI中,簡單地運行“rancher up”(確保設(shè)置以下環(huán)境變量:RANCHER_URL,RANCHER_ACCESS_KEY,RANCHER_SECRET_KEY)。


棧啟動時,您應(yīng)該可以在Rancher UI中看到。此外,您可以通過單擊棧中第一個項目(“API - lb”)旁邊的“i”圖標(biāo),查找 Iron Functions API端點和UI的URL。


如何在Rancher上運行無服務(wù)器應(yīng)用程序


部署完成后運行無服務(wù)器棧


如何在Rancher上運行無服務(wù)器應(yīng)用程序


找到您的IronFunctions端點的URL


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

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)
}

下一步是將函數(shù)部署到我們在Rancher中設(shè)置的Iron函數(shù)的實例中。為了使這更容易嘗試,我編寫了一個為您執(zhí)行所有步驟的腳本。參照這個repo中的README。一旦部署了函數(shù),您應(yīng)該能夠在UI中看到它,然后就可以試著用它了:


如何在Rancher上運行無服務(wù)器應(yīng)用程序


IronFunctions的Dashboard


如何在Rancher上運行無服務(wù)器應(yīng)用程序


的正在執(zhí)行的函數(shù)的結(jié)果


從Rancher內(nèi)部,您可以根據(jù)您的需求擴張或縮減員工人數(shù)。Rancher會把它們放在一個主機上,并將它們連接到一個負(fù)載均衡器上。根據(jù)最佳實踐指南,您可以簡單地根據(jù)“wait_time”度量,從而使伸縮操作相對簡單。


若您也想過用這種方式構(gòu)建應(yīng)用程序,我覺得本文的教程會是一個很有用的嘗試。如果您對此有任何意見或反饋,不要猶豫,聯(lián)系我們!我們一如既往地期待聽到您的反饋!


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI