避免不完全的雲原生(六):爲什麼你可能不需要彈性伸縮?

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"},{"type":"color","attrs":{"color":"#333333","name":"user"}},{"type":"strong"}],"text":"本文最初發佈於The Startup博客,經原作者授權由InfoQ中文站翻譯並分享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雲原生開發最常見的其中一個特性是彈性伸縮。許多公司告訴我們,他們認爲彈性伸縮是他們的團隊評估雲平臺的關鍵需求。然而,我們很少聽到這些團隊告訴我們,他們爲什麼需要彈性伸縮。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事實上,我們甚至可以說彈性伸縮是“在雲上”的標誌之一。所有云平臺都提供某種彈性伸縮支持。不管是Kubernetes中的"},{"type":"link","attrs":{"href":"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/","title":null,"type":null},"content":[{"type":"text","text":"Horizontal Pod Autoscalers"}]},{"type":"text","text":"(根據觀察到的CPU利用率自動擴展Pods的數量),還是像"},{"type":"link","attrs":{"href":"https:\/\/aws.amazon.com\/autoscaling\/","title":null,"type":null},"content":[{"type":"text","text":"AWS Autoscaling"}]},{"type":"text","text":"(它會自動縮放EC2實例、Dynamo DB表和許多其他資源類型)這樣的供應商特性,通常,彈性伸縮都被視爲最想要的雲特性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你是一家全新的初創公司,正在構建一個新的B2C應用程序,那麼彈性伸縮可能至關重要,因爲你無法預測你的業務何時會突然騰飛。但大型企業不是初創公司。它們有現有的客戶羣,而且它們的使用模式在很大程度上是已知的。相反,在大多數企業中,我們看到,公司是將所有不同的工作負載作爲一個整體來運行,這些工作負載大致可以分爲以下幾類:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"最大的一類是"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"靜態負載"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",它是可預測的、不變的負載;這可能佔所有應用程序的65%。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第二大類是"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"計劃內的伸縮"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(季節性、批量處理或計劃內的活動)——可能佔所有應用程序的35%。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"剩下的就是"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"計劃外的伸縮"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(不可預測的負載);剩下的可能非常少——在許多企業,這樣的應用程序可能只有5%。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下圖展示了這個劃分(取自一個真實的客戶,僅用於說明這種情況):"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3f\/3f1c2eceea7fbf6da09363eb0a4e6079.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"各種伸縮情況的佔比"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"問題是,許多團隊在構建他們的應用程序時,都將其當成是這5%的一部分,而實際上,只有很少的應用程序屬於這5%,這5%總是受到計劃外負載的影響。現在,這並不是一個新問題。在相對更傳統的應用程序環境中,常見的方法是準備遠超需要的基礎設施,“以防萬一”。顯然,這是一種浪費,也是團隊想要遷移到雲的原因之一。然而,理想的雲原生方法假定每個功能都部署成可無限擴展的。然而,對於我們與之合作的那類大型企業,更好的方法是設法識別這5%的功能,將它們從龐大的單體中分離出來,並以雲原生的方式構建它們(例如,它們可能是Strangler模式的早期候選對象)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,假設所有的雲原生程序都必須具有彈性和無限的可伸縮性,通常是一種誤導——相反,對於95%的企業應用程序來說,更重要的是"},{"type":"text","marks":[{"type":"italic"}],"text":"彈性"},{"type":"text","text":"而不是彈性伸縮。反之,如果我們需要的是"},{"type":"text","marks":[{"type":"strong"}],"text":"橫向穩定性"},{"type":"text","text":"(這是實現橫向伸縮的必要條件),那麼,這些程序就是那5%確實需要橫向穩定性的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,換句話說,如果一個節點或實例丟失、替換或重啓,程序應該可以繼續穩定地運行,而服務不會中斷——與突然需要額外增加節點的擴展相比,這要常見得多。現在我們發現,關鍵的雲原生要素(如松耦合、不使用共享數據庫以及僅通過HTTP和消息傳遞系統等標準的、可伸縮的協議進行進程間通信)是實現這一目標的好方法。因此,以"},{"type":"link","attrs":{"href":"https:\/\/medium.com\/swlh\/what-does-cloud-native-really-mean-1b10ed003aa9","title":null,"type":null},"content":[{"type":"text","text":"雲原生方式"}]},{"type":"text","text":"編寫應用程序仍然是正確的做法,但原因可能和你想的不同。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而且,對於許多企業來說,彈性伸縮都是一種反模式。例如,當我們與一家銀行談論彈性軟件許可模型時,我們被告知,鑑於他們進行應用程序成本規劃的方式,對於新項目的業務案例,他們實際上需要預先確定軟件成本。遺憾的是,我們合作的很多企業都是如此。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一個我們會反覆聽說的可怕的故事(太經常了,我們都希望它是虛構的,但不幸的是我們見證了不只一個這樣的例子)是,一個團隊新部署了一個具備自動伸縮能力的雲原生應用程序,第一個月因爲自動伸縮而產生了一個鉅額的雲提供商賬單,這不是因爲客戶使用率高,而是因爲在測試中未遇到的意外錯誤導致在正常負載下CPU利用率反常升高。在成本模型和財務規劃趕上技術發展的步伐之前,你最好以雲原生的方式構建應用程序,但部署的時候要麼固定資源數量,要麼採用有資源限制的自動伸縮設置。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"查看英文原文:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/medium.com\/swlh\/a-cloud-native-coda-why-you-probably-dont-need-elastic-scaling-46b9315df635","title":null,"type":null},"content":[{"type":"text","text":"A Cloud-Native Coda: Why You (probably) Don’t Need Elastic Scaling"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"延伸閱讀:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/qff32QZ7iTN5N0MGhq5M","title":"xxx","type":null},"content":[{"type":"text","text":"避免不完全的雲原生(五):目標和收益"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/Yc8fCIyvIwmBahZ1TPwy","title":"xxx","type":null},"content":[{"type":"text","text":"避免不完全的雲原生(四):技術和基礎設施角度"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/LmUVC2HHNPD5lHSzETUa","title":"xxx","type":null},"content":[{"type":"text","text":"避免不完全的雲原生(三):架構和設計角度"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/Qj0SqAEDZZyVOPyhyTXY","title":"","type":null},"content":[{"type":"text","text":"避免不完全的雲原生(二):人員和流程要素"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/PfHdeTgybyC47SpAB2fo","title":"","type":null},"content":[{"type":"text","text":"避免不完全的雲原生(一):雲原生到底意味着什麼?"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/LIRjAI0mhsClCooPtzLw","title":"","type":null},"content":[{"type":"text","text":"避免不完全的雲原生"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章