構建高性能WEB站點筆記三
第10章 分佈式緩存
10.1數據庫的前端緩存區
- 文件系統內核緩衝區,位於物理內存的內核地址空間,除了使用O_DIRECT標記打開的文件之外,全部對磁盤文件的讀寫操做都要通過它,因此也可看作是磁盤的前端設備。又稱做 頁高速緩衝
- 讀緩衝區 保存最近系統從磁盤上讀取的數據。
- 寫緩衝區 主要在於減小磁盤的物理寫操做。經過將屢次寫操做的指令累積起來,使用一次物理磁頭的移動來完成。
10.2 使用memcached
分佈式緩存系統前端
- key-value memcached使用物理內存做爲緩衝區,啓動時候指定分配給緩衝區的內存大小。使用key-value的方式存儲數據,單索引的結構化數據組織形式。
- 數據項過時時間 一旦緩衝區沒有足夠的空間,基於LRU(Least Recently Used)算法。將最近不常訪問的數據項淘汰掉。固然也能夠設置過時時間。
- 網絡併發模型
- 做爲分佈式緩存系統,memcached能夠運行在獨立的服務器上,動態內容經過TCP Socket來訪問。
- 對象序列化
- 基於序列化的機制,咱們能夠將更高層的抽象數據類型轉化爲二進制字符串,以便經過網絡進入緩存服務器,同時,讀取這些數據的時候,二級制字符串又能夠轉換回原有的數據類型。
10.3 讀操做緩存
均可使用memcached緩存,而且memcacd提供原子遞增操做。mysql
第11章 數據庫性能優化
11.1 狀態報告
show status;
web
show innodb status;
算法
mysqlreport
sql
11.2 正確使用索引
11.3 鎖定與等待
查詢的時間開銷包括:查詢自己的計算時間和查詢開始前的等待時間,索引影響的是前者,鎖機制影響的是後者。後端
- 減小表鎖定時間
- MySQL爲MyISAM類型提供了表級別的鎖定。容許多個線程同時讀數據,好比select,它們之間不須要等待,但對於更新操做(update),排斥對當前表的全部其餘查詢,包括select查詢。除此以外,更新操做有着默認的高優先級。
- 適合大部分查詢爲讀取操做,混合一小部分快速的更新操做。
- 行鎖定
- MySQL爲Innodb提供了行鎖的支持。
- 在select和update混合的狀況下,行鎖定能夠很巧妙的解決讀和寫互斥的問題。
- 行鎖定只是一種邏輯層面的約束,即使是同時擁有updating的狀態,也不能加速update操做的總時間,由於磁盤的物理寫操做最終仍是以此進行的。
11.4 事物性表的性能
MySQL的Innodb除了支持行鎖定外,還支持事務,這也是使用Innodb的另外一個緣由。緩存
固然Innodb還有其餘特性,好比行鎖定、外鍵以及易於修復。性能優化
11.5 使用查詢緩存
將select查詢的結果緩存在內存中,以供下次直接獲取。MySQL採起的機制是,當一個數據表有更新操做,那麼涉及這個表的全部查詢緩存都會失效。服務器
11.6 臨時表
MySQL將臨時表建立在磁盤、內存、以及臨時文件中。
11.7 線程池
MySQL採用多線程處理併發的鏈接,經過mysqlreport中的threads部分,能夠看到線程建立的統計結果。
11.8 反範式設計
11.9 放棄關係型數據庫
第12章 Web負載均衡
12.2 HTTP重定向
轉移HTTP請求,在Web開發中常用它來完成自動跳轉。eg. 用戶登陸成功後跳轉到相應的管理頁面。
順序調度的性能老是比不上隨機調度的性能。
12.3 DNS負載均衡
- 多個A記錄
- 指定域名對應的IP地址。
- DNS的負載均衡實現依賴於DNS服務器的設置。
- 擴展能力和可管理性
- 智能解析
- 根據用戶IP來進行智能解析,DNS服務器在全部可用的A記錄中挑選一個離用戶最近的服務器。
- 故障轉移
- 在檢測到某臺實際服務器發生故障之後,即可以經過動態DNS協議來迅速修復DNS記錄。
- DNS記錄的修改須要必定時間才能生效,例如一個DNS記錄的TTL爲3600秒,那麼對它的更新最多要過一個小時纔會生效。
- 動態DNS,容許DNS服務器開放特定的服務,爲咱們自動化修改DNS記錄提供了可能。
12.4 反向代理負載均衡
反向代理服務器的核心工做即是轉發HTTP請求,在TCP七層協議的第七層。
- 按照權重分配任務——按能力分配請求到不一樣的服務器
- 調度器的併發處理能力
- 粘滯會話
- 同一用戶對同一內容的屢次請求,可能被轉發到不一樣的後端服務器。
- 調整策略,讓用戶在一次會話週期內的全部請求始終轉發到一臺特定的後端服務器。這種機制也稱爲粘滯會話。——將用戶的IP地址進行Hash計算並散列到不一樣的後端服務器。
- 利用Cookie機制設計持久化算法。eg. 調度器將某個後端服務器的編號追加到寫給用戶的Cookies中,這樣調度器便在該用戶的隨後的請求中知道應該轉發給哪臺後端服務器。
12.5 IP負載均衡
- DNAT 反向NAT,實際服務器部署在內網網絡,而做爲網關的NAT服務器未來自用戶端的數據包轉發給內部網絡的實際服務器。工做在傳輸層
- Netfilter/iptables
- 當網絡數據包到達服務器的網卡而且進入某個進程的地址空間以前,先要經過內核緩衝區,這時候內核中Netfilter便對數據包有着絕對的控制權,能夠修改數據包,改變路由規則。
- iptables,是工做在用戶空間的一個命令行工具,經過它來對Netfilter的過濾表進行插入、修改或者刪除等操做。
12.6 直接路由
工做在數據鏈路層(第二層)。經過修改數據包的mac地址,將數據包轉發到實際服務器上,而且最重要的是,實際服務器的相應數據包將直接發送給用戶端,而不通過調度器。
- 實際服務器必須直接接入外部網絡。
- IP別名
- 爲一個網絡接口(物理網卡,虛擬接口)配置多個IP地址。根據規定,一個網絡接口最多能夠設置256個IP別名。
將實際服務器添加和調度器IP地址相同的IP別名。
12.7 IP隧道
第16章 數據庫擴展
16.1 複製和分離
- 主從複製
- 開啓主服務器上的二進制日誌
- 從主服務器和從服務器上分別進行簡單的配置和受權。
- 從服務器定時向主服務器請求最新日誌,而主服務器經過一個I/O線程來讀取本地二進制文件,並輸送給從服務器。
- 讀寫分離
- 對於全部的更新才作,必須做用於主服務器上
- 讀操做指向從服務器,寫操做指向主服務器。
- 數據庫反向代理
16.3 水平分區
將同一數據表中的記錄經過特定的算法進行分離,分別保存在不一樣的數據表中,從而能夠部署在不一樣的數據庫服務器上。