聲明,這篇文章的作者是BlueDavy,並非我。本人認為寫的很好,從中抽取出有用的章節,留做備忘並與大家分享。
第一步:物理分離應用程式資料庫
網站運營的最開始階段,在每天高峰期的時候總是會出現宕機現象並且經常會有資料庫和網站應用程式掙搶硬體資源的狀況出現,這種情況下,最簡單的方案就是把應用和資料庫分開部署到不同機器上,以提高各自能夠佔有的資源。(此方案是網站建設最初階段)
第二步:頁面緩衝和靜態化
隨著網站訪問量的迅猛攀升,系統的響應會開始變慢,主要原因是因為訪問資料庫的串連增多,資料庫伺服器的硬體設定又決定了只能提供一定數量的串連。由於網站裡的很多內容是很少更新的。於是可以把這些頁面緩衝起來或者靜態化,減少對資料庫的訪問。這一步對技術上有所要求:頁面緩衝技術,模板技術。頁面緩衝提議Squid等幾種方案,靜態化可通過產生靜態HTML方式實現。
第三步:頁面片段快取
頁面片段快取可採用ESI、OSCacheD等架構來進行實現。
第四步:資料緩衝
資料緩衝可採用ehcache、OSCache或獨立實現的緩衝架構來實現。這步演變對技術上的要求:Map資料結構、程式語言中的Map資料結構(例如JAVA中的HashMap、TreeMap等)、所採用的緩衝架構的實現方式(緩衝內容的儲存方式、尋找演算法和失效演算法)
第五步:水平擴充應用伺服器
如果單純是訪問量高造成了伺服器壓力過大,那就只能採用增加應用伺服器,進入水平擴充階段。那麼如何讓訪問平均分配到每台應用伺服器上。這裡先用軟體負載平衡技術。軟體負載平衡技術可選:DNS輪詢、Apahce、Nginx、LVS等。又如何保持資訊同步呢,如session同步。可採用資訊寫入資料庫、寫入共用檔案、cookie或在各台機器上同步狀態資訊等。如何保證資料緩衝的同步?可採用緩衝同步或分布式緩衝。如何讓檔案相關的功能繼續可用 ,例如檔案上傳功能等。可採用共鄉檔案系統或存放裝置,採用前者的居多一些。這一步需要積累的知識有1.負載平衡技術,包括但不限於硬體負載金衡技術(四層,七層等)、軟體負載平衡技術、負載平衡演算法、轉寄協議、(如VS/NAT、VS/TUN、VS/DR)所選用的技術的實現細節(如LVS的實現)等。2.容災技術,包括但不限於ARP、Linux Heart-beanting等。3.狀態資訊或緩衝同步技術,包括但不限於cookie、UDP協議、組播、資料同步架構的實現(例如jgroups等)。4.共鄉檔案原理,如NFS等
第六步:分庫
以上工作完成後,你的團隊可以做各種各樣的小調優工作,例如作業系統調優、Apache調優、JVM調優等等。分庫的實現對技術沒有太高的要求,僅在於整理業務,進行拆分,並相應的對程式進行適當的修改。
第七步:分表、DAL、分布式緩衝
由於資料庫資料量太大,分庫往往不能夠解決系統緩慢,這時,需要採取適當的分表和資料庫調優,由於伺服器沒有那麼多記憶體可以提供緩衝,所以開始採用分布式緩衝。問題: 在進行分表時,發現很明顯的問題:分表後導致訪問資料庫的程式複雜度提高。因為在查表時必然要先考慮分表規則。要將這一層統一 ,最好的辦法就也就是著名的DAL。增加資料訪問層。分布式緩衝可採用的方案有memcache、JbossCache等。分表時應做的知識儲備:動態Hash、Consistent Hash 、分布式緩衝實現原理、資料庫連接管理、資料庫操作的控制等。
第八步:改變應用伺服器水平擴充環境
當Apache、nginx或LVS等軟體負載平衡方式已經無法承受巨大的訪問量的調度壓力時,可考慮購買硬體負載平衡裝置。入F5、Netsclar、Athlon等,也可從業務角度進行劃分,構建不同的業務軟體負載叢集組。檔案分享權限設定方案出現瓶頸時,這個時候可以考慮購買昂貴的存放裝置 。如NAS等,也可考慮自行設計或是採用成熟的Distributed File System。
第九步:資料讀寫分離與廉價的儲存
如伺服器增加太多了,資料庫連接相當激烈,讀寫比相當高,這時可構件大型資料庫叢集或資料讀寫分離。資料讀寫分離可選擇的方案或程式級的同步方案,在實現讀寫分離的時候要同步改造DAL,以適應新的演變。廉價的儲存方面有Google的Bigtable、新浪的 Memcachedb等。應具備的知識儲備:資料庫自行複製、同步方案及實現原理(如Oracle的Standby、MySQL的Replication等);資料延遲以及不一直的解決方案。讀寫分離規則判斷。
第十步:大型分布式應用時代
l 拆分成分布式後一個很明顯的需求就是高效、穩定的通訊和調用架構。
l 管理好大型分布式的應用,涉及到陸遊、以來、版本、錯誤追蹤、檢測和警示等多方面的問題。
l 合理拆分,涉及業務的整理和大型系統架構的把握。
這一步涉及很多知識體系:通訊、分布調用、分散式交易、訊息機制、並行計算、報表、檢測技術、規則策略等。
以上闡述為互連網架構演變的典型過程之一。