通常當我們對擴充套件性感興趣時,我們東尋西找連結、書籍和參考資料。這篇短文是 Leandro 精心挑選出的參考資料,並給出了學習路徑,他希望對你的學習之旅有所幫助。
宣告:你不需要有 N 臺機器來搭建一個高擴充套件性系統,你只要使用 Vagrant 就能很容易模擬成 N 臺機器。
學習參考資料:
既然你可以通過虛擬伺服器來武裝自己了,那你不僅要讀這些文章,而且還要動手實踐。
- 首先,看看《使用 Nodejs +Nginx + 靜態快取應用 + 負載均衡器 + 測試教程》來預熱一下,只需要 7 分鐘。
- 把這些單詞放入你的詞彙表 scalability(擴充套件性)、failover(災備)、 single point of failure (SPOF)(單點故障)、 sharding(分割槽)、 replication(複製) 和 load balancing(負載均衡) 。即使你根本不理解它們,也不要緊。
- 為了對擴充套件性系統有總體概念和更好地瞭解來龍去脈,我強烈推薦你閱讀《Scalable Web Architecture and Distributed Systems(擴充套件性web架構和分散式系統)》。這是一篇非常棒的導論。
- 在對概念有清晰瞭解以後,你現在可以開始學習如何使用 load balancer(負載均衡器) 和處理一些你將要面對的決策問題。你可以嘗試執行haproxy,並且避免它產生single point of failure too(單點故障)。
- 通過 實現300萬個請求/秒的服務 挑戰你自己,完成這項任務你可能需要 生成300萬個請求,調優Web伺服器 和 規模化並測試。
- 你的應用已經可以擴充套件了,現在你輪到資料庫了。它是你應用中非常重要的一部分,在這裡我推薦你至少要閱讀,MongoDB 是如何通過 sharding 和 replication 來擴充套件資料庫,還有Cassandra 是如何通過 linear scalability(線性擴充套件)和 adding nodes to the cluster(在叢集中新增節點) 來擴充套件。
- 你的應用和資料庫現在有很好的擴充套件性和容錯能力。有利於節省伺服器不必要的工作負載,然後會有更快的使用者響應。
- 假定我們已經在一個單獨的資料中心部署了這套系統,現在我們有另一個SPOF。所有的伺服器都在同一個地方,可能會有自然災害,或者僅僅是斷電。好訊息,Cassandra可以非常方便地支援多個資料中心, 看看 Google 是如何處理的。如果你的使用者在巴西,不要讓他訪問時間過長。記住,即使在最好的情況下, 我們仍然會有延遲。
測測你是否學到了知識:
- 為什麼要使用可擴充套件性?通常如何使用?
- 如何處理 N臺 伺服器上 RAM 中的使用者會話?LB(負載均衡器)如何知道哪個伺服器啟動了?LB 如何知道是哪臺伺服器傳送的請求?
- LB 是不是另一個 SPOF?我們如何為 LB 提供失效備援?
- 我的作業系統是不是被 64K 埠限制了? Linux 能做沙盒麼?
- MongoDB 是如何解決失效備援和高擴充套件性的?Cassandra 如何使用?當有新節點加入到叢集中時,Cassandra是如何處理的。
- 快取鎖是什麼?我們應該使用什麼樣的快取策略?
- 一個域名如何配置多個IP?什麼是 BGP?如何使用DNS 或者 BGP 來提供區域性服務?