一、什麼是可擴充套件性
可擴充套件性表明了當需要增加資源以執行更多工作時系統 能夠獲得划算的等同提公升的能力。
從較高層次上看是能夠通過增加資源來提公升容量的能力。
容量:可以認為是處理負載的能力。
二、擴充套件mysql
2.1規劃可擴充套件性
難點:估算需要承擔的負載到底有多少。
2.2為擴充套件贏得時間
優化效能,購買更強的硬體來爭取一些擴充套件工作的時間
2.3向上擴充套件
意味著花錢公升級硬體。
2.4向外擴充套件
分為三個部分:複製、拆分和資料分片。
1.按功能拆分
不同的伺服器或節點配置不同的應用,每個節點包含這個應用需要的資料即可。
2.資料分片
將資料分成一小片或一塊儲存到不同的節點。
需要從初始就將單一資料儲存結構轉為分片結構。
3.選擇分割槽鍵
盡量選擇那些能夠避免跨分片查詢的,同時也能讓分片足夠小,以免過大的資料片導致問題。
4.多個分割槽鍵
5.跨分片查詢
6.分配資料、分片和節點
分片盡可能的小於節點容量,則可以在單節點上部署多個分片。分片小易於管理,資料的備份和恢復都更容易
7.在節點上部署分片
每個分片使用單一資料庫。
多個分片的表放到同乙個資料庫,每個表明包含分片號。
每個分片使用乙個資料庫,這個資料庫包含所有應用需要的表。
每個分片使用乙個資料庫,並在資料庫名和表名中包含分片號。
每個節點上使用多個mysql例項,每個例項上有乙個或多個分片,使用上述提到的方式的任意組合安排分片。
8.固定分配
資料分配到分片的方式:固定分配和動態分配,種方法都需要使用乙個分割槽函式,使用行的分割槽鍵值作為輸入,返回儲存該行的分片。
固定分配:僅僅依賴分割槽鍵的值。eg:hash函式和取模運算。
優點:簡單,開銷低,可以在應用中硬編碼。
缺點:分片大,數量少,很難平衡不同分片的負載。
無法自定義資料放到哪個分片。修改分配策略較難,因為需要重新分配已有的資料
結論:更傾向於使用動態分配的方式。
動態分配:每個資料單元對映到乙個分片,實際上就是維護一套分片的關係。
增加了資源的開銷,但是可以更好的對資料儲存位置做細粒度的控制。
9.混合固定分配和動態分配
10.顯示分配
適用於新插入的資料,開發中極少使用。如果使用,需要將分片號碼編碼到id中,防止 主-主 複製主鍵衝突。
11.重新均衡分片資料
如有必要,可以通過在分片中移動資料來達到負載均衡。但是也要盡量避免重新均衡分片資料,可能會影響使用者使用,和增加新特性。
12.生成全域性唯一id
講乙個現有系統轉為分片資料儲存時,經常需要在多台機器上生成全域性唯一id。
如下幾個方法可以生成:
使用auto_jncrement_jncrement和auto_jncrement_offset
全域性節點中建立表
使用memcached或redis
批量分配數字
使用復合值
使用guid值
13.分片工具
在設計資料分片應用時,首先要做的是編寫能夠查詢多個資料來源的**。需要設計乙個抽象層。完成以下任務:
連線到正確的分片並查詢
分布式一致性校驗
跨分片結果集聚合
跨分片關聯操作
鎖和事務管理
建立新的資料分片
2.5通過多例項擴充套件
核心實際上是充分利用伺服器的資源,以較低的成本做較高效的設計。
2.6通過集群擴充套件
1.mysql cluster(ndb cluster)
2.clustrix
3.scalebase
4.beniedb
5.akiban
2.7向內擴充套件
僅僅作為爭取時間的短期策略
設計歸檔和清理策略時要考慮下面幾點:
對應用的影響
要歸檔的行
維護資料一致性
避免資料損失
解除歸檔
三、負載均衡
就是盡可能的平均負載量。
負載均衡的目的:
可擴充套件性
高效性可用性
透明性一致性
3.1直接連線
1.複製上的讀寫分離
常見的讀寫分離方法:
基於查詢分離
基於髒資料分離
基於會話分離
基於版本分離
基於全域性版本/會話分離
2.修改應用的配置
通過**來實現負載均衡,**要有健壯性和精確性。
3.修改dns
比較粗糙不太可控
4.轉移ip位址
在伺服器之間轉移虛擬位址。
3.2引入中介軟體
大部分的負載均衡都會引入中介軟體作為網路通訊的**。接受請求和派發請求到不同的伺服器上。
1.負載均衡器
mysql都是正常的tcp/ip連線,所以可以在mysql上使用多用途負載均衡器。但由於缺少mysql專有的特性,因此會有一些限制。
a.無法真正做到負載均衡,不同功能的伺服器的硬體不同就會有差異
b.mysql連線是有狀態的,負載均衡器不知道如何把所有從單個http會話傳送的連線請求「固定」到乙個mysql伺服器上。
c.連線池和長連線可能會阻礙負載均衡器分發連線請求。
d.許多負載均衡器只會對http伺服器做健康和負載檢查。
2.負載均衡演算法
常用的演算法:
隨機輪詢
最少連線數
最快響應
雜湊權重
3.在伺服器池中增加/移除伺服器
3.3一主多備間的負載均衡
這是最常見的複製拓撲結構。
功能區分
過濾和資料分割槽
將部分寫操作轉移到備庫
保證備庫跟上主庫
同步寫操作
第十一章 讀書筆記
第十一章 linux驅動程式中的 併發控制 併發 concurrency 指的是多個執行單元同時 並行被執行。而併發的執行單元對共享資 源 如硬體資摞 程式中的全域性變數 靜態變數等 的訪問很容易導致競態條件 race conditions 自旋鎖並不關心鎖定的 臨界區究竟是怎樣的操作,不管是讀還是...
第十一章讀書筆記
併發 concurrency 指的是多個執行單元同時 並行被執行。而併發的執行單元對共享資 源 如硬體資摞 程式中的全域性變數 靜態變數等 的訪問很容易導致競態條件 race conditions 例如,有乙個裝置檔案。程序 a 向該個裝置檔案寫入 1000 個 a飛而程序 b 向 裝置檔案寫入了 ...
讀書筆記 第十一章 C in depth
思考 11 2 from user in sampledata.allusers select user 轉譯 sampledata.allusers.select user user 範圍變數都可以是隱式型別。cast,oftype將飛型別化序列轉化為強型別。遇到不匹配型別,cast報錯,ofty...