十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
最近,系統(tǒng)設(shè)計(jì)中較新穎的概念之一要屬“無服務(wù)器架構(gòu)”理念。毫無疑問, 這有點(diǎn)夸張, 因?yàn)榇_實(shí)有服務(wù)器參與其中, 但這意味著我們可以以不同的方式看待服務(wù)器。
無服務(wù)器的潛在上升空間
想象一下,一個(gè)簡單的基于Web的應(yīng)用程序,處理來自HTTP客戶端的請求。而不是讓一些程序運(yùn)行時(shí)等待請求到達(dá),然后調(diào)用一個(gè)函數(shù)來處理它們,如果我們可以按需啟動(dòng)運(yùn)行每個(gè)函數(shù),然后將其丟棄,那會(huì)怎樣?我們不需要擔(dān)心可以接受連接的運(yùn)行的服務(wù)器數(shù)量,或者在伸縮時(shí)處理復(fù)雜的配置管理系統(tǒng)以構(gòu)建應(yīng)用程序的新實(shí)例。此外,我們還將減少諸如內(nèi)存泄漏、分段錯(cuò)誤等狀態(tài)管理的常見問題。
或許最重要的一點(diǎn)是,這種按需調(diào)用函數(shù)的方法將允許我們伸縮每個(gè)函數(shù),以匹配請求數(shù)并對它們并行處理。每個(gè)“客戶”都將獲得一個(gè)專門的流程來處理他們的請求,而流程數(shù)只會(huì)受到您處理的計(jì)算能力的限制。當(dāng)與一個(gè)大型云提供商耦合,其可用的計(jì)算大大超過您的使用量,此時(shí)無服務(wù)器就有可能移除大量的復(fù)雜性,從而伸縮應(yīng)用程序。
潛在的缺點(diǎn)
誠然, 在為每個(gè)請求構(gòu)建進(jìn)程時(shí), 仍存在增加的滯后時(shí)間的挑戰(zhàn)。無服務(wù)器永遠(yuǎn)不會(huì)像預(yù)先分配的進(jìn)程和內(nèi)存那樣樣快;然而,問題不在于它是否更快, 而在于它是否足夠快。從理論上講, 我們會(huì)接受無服務(wù)器的延遲, 因?yàn)槲覀儠?huì)得到回報(bào)。然而, 這一權(quán)衡需建立在對手頭的情況進(jìn)行仔細(xì)評估的基礎(chǔ)上。
使用Rancher和開源工具實(shí)現(xiàn)無服務(wù)器
Docker為我們提供了很多工具來實(shí)現(xiàn)這個(gè)無服務(wù)器的概念,并在最近的DockerCon上給出了很好的演示。Rancher將這些能力大化了。因?yàn)槲覀兊钠脚_(tái)承擔(dān)您的容器基礎(chǔ)架構(gòu)的管理,所以只需操作一個(gè)API即可添加和刪除計(jì)算容量。通過軟件定義棧的這部分能力,支持用戶實(shí)現(xiàn)全面的應(yīng)用程序自動(dòng)化。
棧中的下一層即為無服務(wù)器系統(tǒng)編寫代碼的可用框架。您可以自己編寫、或者擴(kuò)展一些中間件來處理這個(gè)問題,但有很多開源項(xiàng)目提供了工具來簡化這一過程。其中一個(gè)項(xiàng)目是Iron.io的Iron功能。我在Rancher上做了一個(gè)快速的POC,發(fā)現(xiàn)它很容易使用。使用這些compose文件可以在Rancher中快速啟動(dòng)該設(shè)置。
要使用這些文件,請將repo中的docker-compose.yml和rancher-compose.yml文件復(fù)制并粘貼到Rancher UI的“Add Stack(添加棧)”部分。或者從Rancher CLI中,簡單地運(yùn)行“rancher up”(確保設(shè)置以下環(huán)境變量:RANCHER_URL,RANCHER_ACCESS_KEY,RANCHER_SECRET_KEY)。
棧啟動(dòng)時(shí),您應(yīng)該可以在Rancher UI中看到。此外,您可以通過單擊棧中第一個(gè)項(xiàng)目(“API - lb”)旁邊的“i”圖標(biāo),查找 Iron Functions API端點(diǎn)和UI的URL。
部署完成后運(yùn)行無服務(wù)器棧
找到您的IronFunctions端點(diǎn)的URL
一旦您運(yùn)行棧,請按照Iron.io的Github repo上的“Write a Function(編寫一個(gè)函數(shù))”的說明進(jìn)行操作。您可能需要一些時(shí)間來適應(yīng),因?yàn)檫@需要您在編寫應(yīng)用程序時(shí)稍作改變。將不會(huì)有任何共享的狀態(tài)供您的函數(shù)引用,而庫之類的東西利用起來可能會(huì)又困難又昂貴。在我的例子中,我從Iron.io中選擇了一個(gè)簡單的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ù)的實(shí)例中。為了使這更容易嘗試,我編寫了一個(gè)為您執(zhí)行所有步驟的腳本。參照這個(gè)repo中的README。一旦部署了函數(shù),您應(yīng)該能夠在UI中看到它,然后就可以試著用它了:
IronFunctions的Dashboard
你的正在執(zhí)行的函數(shù)的結(jié)果
從Rancher內(nèi)部,您可以根據(jù)您的需求擴(kuò)張或縮減員工人數(shù)。Rancher會(huì)把它們放在一個(gè)主機(jī)上,并將它們連接到一個(gè)負(fù)載均衡器上。根據(jù)最佳實(shí)踐指南,您可以簡單地根據(jù)“wait_time”度量,從而使伸縮操作相對簡單。
若您也想過用這種方式構(gòu)建應(yīng)用程序,我覺得本文的教程會(huì)是一個(gè)很有用的嘗試。如果您對此有任何意見或反饋,不要猶豫,聯(lián)系我們!我們一如既往地期待聽到您的反饋!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。