1. 與僅有幾台伺服器的小規模服務的區別
負載平衡 可擴充
保證冗餘
Reduced Operation:減少人工幹預(機器太多 記不過來)
2. 大規模資料處理痛點 記憶體vs磁碟
記憶體比磁碟快百萬倍
3. 大規模資料的技巧
寫程式
盡量都在記憶體完成
使用能應對資料增長的演算法(二叉樹 O(logn) )
使用資料壓縮和搜尋技術
前提知識:底層基礎
作業系統緩衝
分布式為前提 應用rdbms必須要做的事
大規模環境 資料結構和演算法如何使用
4. 作業系統緩衝
虛擬記憶體:進程不直接使用記憶體位址,核心透明化,從0開始訪問;作業系統以頁面為單位分配記憶體
頁面緩衝:進程讀入記憶體的資料不會直接釋放掉,緩衝起來供後面使用
vfs:磁碟緩衝是由頁面緩衝實現的,vfs負責屏蔽底層不同的檔案系統,實現緩衝
對檔案的緩衝:使用LRU,最小單位為頁面大小
降低io負載:記憶體大於資料檔案則能全部緩衝,不能考慮壓縮資料
局部性分布式:根據訪問模式 實施分布式資料
5. 資料庫橫向擴充策略
分布式mysql要點
靈活應用作業系統緩衝
正確設定索引
以橫向擴充為前提設計應用
Mysql分布式
replication:master slave
對更新/寫入擴充:表分割、key-value
6. 特殊用途索引
倒排索引:用於全文檢索索引,可以單獨建立索引伺服器
7, 全文索引的實現
步驟:爬行 儲存 建立索引 搜尋 評分 顯示結果
逆向索引的結構:Directiory+Position
Directory建立:字典+AhoCoraSic 或者 語素分析
8. 可擴充的思路
根據負載調優:可視化負載
考慮機器用途:爬蟲 客戶
9. 保證冗餘
應用server:增加server數量;負載平衡實現失敗轉移和失敗恢複
資料庫server:增加資料量; multi-master,相互replication 切換時有不同步風險,忽視之,出現則人工恢複
儲存伺服器:
系統穩定性
與資源使用率 有個取捨:維持適當餘量
資源增加、記憶體泄露都有可能影響:自動dos判斷 異常重啟 終止耗時查詢
10. 提高效率
虛擬化:可擴充 性價比 高可用。缺點:效能開銷,cpu2% 記憶體10% 網路50% IO5%
有效利用廉價硬體:多核cpu SSD硬碟
11. 網路
分界點:1G bps 500主機 全球化 CDN
受益一生:理解負載平衡的重點:作業系統,緩衝、多線程/多進程、虛擬記憶體、檔案系統
查看單機負載:查看平均負載,確定有無CPU/IO瓶頸
平均負載:top uptime,等待cpu+等待io任務/單位時間
CPU瓶頸:sar vmstat
top/sar確認是使用者進程還是系統進程
ps查看進程狀態和cpu使用時間,確認導致問題的進程
確定進程後使用strace或oprofile剖析,確定問題所在
IO瓶頸: 多因程式請求過多io,或頁面交換導致頻繁訪問磁碟,通過sar或vmstat確認交換區狀態
如果發生頁面交換
ps確認是否消耗大量記憶體
程式原因,改進程式
記憶體確實不夠加記憶體,無法增加 考慮分布式
沒發生交換,io頻繁 可能由於緩衝不足
增加記憶體
不能增加記憶體或還是不夠,考慮分散儲存或增加快取服務器
作業系統調優就是找到瓶頸並解決。
本文出自 “Ying:好記性不如爛筆頭” 部落格,請務必保留此出處http://yingtju.blog.51cto.com/3760152/1299911