第一步:物理分離 webserver 和數據庫web
將應用和數據庫從物理上分離,變成了兩臺機器算法
第二步:增長頁面緩存數據庫
例如 squid緩存
第三步:增長頁面片斷緩存服務器
例如 ESI 等cookie
第四步:數據緩存網絡
緩存技術,包括像 Map 數據結構、緩存算法、所選用的框架自己的實現機制等session
第五步: 增長 webserver數據結構
一、如何讓訪問分配到這兩臺機器上,這個時候一般會考慮的方案是 Apache 自帶的負載均衡負載均衡
方案,或 LVS 這類的軟件負載均衡方案;
二、如何保持狀態信息的同步,例如用戶 session 等,這個時候會考慮的方案有寫入數據庫、
寫入存儲、cookie 或同步 session 信息等機制等;
三、如何保持數據緩存信息的同步,例如以前緩存的用戶數據等,這個時候一般會考慮的機
制有緩存同步或分佈式緩存;
四、如何讓上傳文件這些相似的功能繼續正常,這個時候一般會考慮的機制是使用共享文件
系統或存儲等;
第六步:分庫
這一步更多的是須要從業務上作合理的劃分,以實現分庫,具體技術細節上沒有其餘的要求
第七步:分表、DAL 和分佈式緩存
分表更多的一樣是業務上的劃分,技術上涉及到的會有動態 hash 算法、consistent hash 算法
等;
DAL 涉及到比較多的複雜技術,例如數據庫鏈接的管理(超時、異常)、數據庫操做的控
制(超時、異常)、分庫分表規則的封裝等;
第八步:增長更多的 webserver
一、Apache 的軟負載或 LVS 軟負載等沒法承擔巨大的 web 訪問量(請求鏈接數、網絡流量等)
的調度了,這個時候若是經費容許的話,會取的方案是購 買硬件負載,例如 F五、Netsclar
、Athelon 之類的,如經費不容許的話,會取的方案是將應用從邏輯上作必定的分類,然
後分散到不一樣的軟負載集羣中;
二、原有的一些狀態信息同步、文件共享等方案可能會出現瓶頸,須要進行改進,也許這個
時候會根據狀況編寫符合網站業務需求的分佈式文件系統等;
在作完這些工做後,開始進入一個看似完美的無限伸縮的時代,當網站流量增長時,應對的
解決方案就是不斷的添加 webserver。
第九步:數據讀寫分離和廉價存儲方案
數據讀寫分離要求對數據庫的複製、standby 等策略有深刻的掌握和理解,同時會要求具有
自行實現的技術;
廉價存儲方案要求對 OS 的文件存儲有深刻的掌握和理解,同時要求對採用的語言在文件這
塊的實現有深刻的掌握、
第十步:進入大型分佈式應用時代和廉價服務器羣夢想時代
一、拆成分佈式後須要提供一個高性能、穩定的通訊框架,而且須要支持多種不一樣的通訊和
遠程調用方式;
二、將一個龐大的應用拆分須要耗費很長的時間,須要進行業務的整理和系統依賴關係的控
制等;
三、如何運維(依賴管理、運行情況管理、錯誤追蹤、調優、監控和報警等)好這個龐大的
分佈式應用。