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