可擴展的web服務(wù)的公共服務(wù)器隱藏在負載均衡器后面否淤。這個負載均衡器將負載(來自用戶的請求)均勻地分配到應(yīng)用服務(wù)器組/集群上悟耘。這意味著,例如胰锌,如果用戶Steve與你的服務(wù)交互,他的第一個請求可能被服務(wù)器2服務(wù)藐窄,然后他的第二個請求可能被服務(wù)器9服務(wù)资昧,然后可能在他的第三個請求時再次被服務(wù)器2服務(wù)。
Steve應(yīng)該總是得到相同的請求返回結(jié)果荆忍,不管他被哪個服務(wù)器服務(wù)格带。這就是可擴展性的第一條黃金法則:每個服務(wù)器都包含完全相同的代碼庫撤缴,并且不在本地磁盤或內(nèi)存上存儲任何用戶相關(guān)的數(shù)據(jù),比如會話或個人資料圖片叽唱。
會話需要存儲在一個集中的數(shù)據(jù)存儲中屈呕,所有應(yīng)用程序服務(wù)器都可以訪問該存儲。它可以是一個外部數(shù)據(jù)庫或外部持久緩存棺亭,就像Redis虎眨。外部持久緩存比外部數(shù)據(jù)庫具有更好的性能。這里所說的外部是指數(shù)據(jù)存儲并不駐留在應(yīng)用服務(wù)器上镶摘。相反专甩,它位于應(yīng)用程序服務(wù)器的數(shù)據(jù)中心中或附近的某個地方。
但是部署呢?如何確保代碼更改被發(fā)送到所有服務(wù)器钉稍,而沒有一個服務(wù)器仍然服務(wù)于舊的代碼?幸運的是涤躲,這個棘手的問題已經(jīng)被偉大的工具Capistrano解決了。這需要一些學(xué)習(xí)贡未,特別是如果你不喜歡Ruby on Rails种樱。
在“外包”你的會話并從所有服務(wù)器上提供相同的代碼庫之后,現(xiàn)在可以從這些服務(wù)器之一創(chuàng)建一個圖像文件(AWS稱之為AMI - Amazon Machine image)俊卤。使用這個AMI作為“超級克隆”嫩挤,您的所有新實例都基于它。每當(dāng)您啟動一個新的實例/克隆時消恍,只需對您最新的代碼進行初始部署岂昭,您就準(zhǔn)備好了!
引用:
https://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones