從0開始學架構 高效能架構模式

2021-09-10 12:33:42 字數 2806 閱讀 2459

目錄

儲存高效能

關係型資料庫

nosql 快取

計算高效能

單伺服器高效能

集群高效能

讀寫分離

一主多從,一主一從

主從複製延遲解決方案

1.寫操作後的讀操作指定發給資料庫主伺服器

2.讀從機失敗後再讀一次主機

3.關鍵業務讀寫操作全部指向主機,非關鍵業務採用讀寫分離

分庫分表

業務分庫

join操作問題,事務問題,成本問題(分庫後還需要備份機)

單庫可以支援10w使用者量級的業務

分表垂直拆分

引入的複雜性體現在表操作的數量要增量原來一次操作現在需要多次

水平拆分

單錶超過5000w行就必須分表

分表後需要路由,某條資料具體屬於哪個切分後的子表,常見路由演算法

1.範圍路由,1-1w放到a表,1w-2w放到b表,分段一般在100w-2000w之間

2.hash路由,分布均勻,但擴充新錶很麻煩需要重分布

3.配置路由,增加乙個路由表,由user_id找到對應的table_id,但會多一次查詢甚至可能成為瓶頸

join操作,查詢多個表後在業務或中介軟體層做合併

count操作,多個表count相加,增加記錄數表

oderby操作,分別查詢每個子表再進行彙總排序

實現方式

程式**封裝,tddl

中介軟體封裝,mysql-proxy,mysql router,奇虎360的atlas

關係型資料庫儲存的是行記錄,無法儲存資料結構

關聯式資料庫的schema擴充套件很不方便

關聯式資料庫再大資料場景下i/o較高

關聯式資料庫的全文搜尋功能比較弱

常見的nosql方案有

k-v儲存

redis不支援完整的acid事務,只能保證隔離性和一致性

redis的rdb持久化會丟資料,aof最好的aways也會丟一條資料

文件資料庫

為了解決關聯式資料庫schema帶來的問題,文件資料庫應用而生,其特點是no-schema

可以儲存和讀取任意的資料,目前大部分文件資料庫的資料格式是json

優勢1.新增字段簡單

2.歷史資料不會出錯

3.可以很容易儲存複雜資料

文件資料庫的特點適合電商和遊戲業務,因為冰箱和膝上型電腦的屬性差異非常大

文件資料庫缺點是不支援事務,無法實現join操作

電商**中,可以用關聯式資料庫儲存商品庫存資訊,訂單基礎資訊,用文件資料庫儲存商品詳細資訊

列式資料庫

列式資料庫是按照列來儲存資料的資料庫,與之對應的傳統關聯式資料庫被稱為行式資料庫

優勢1.業務同時讀取多個列時效果高,因為這些列都是按行儲存在一起的,一次磁碟操作就可以讀取出來

2.能夠一次性完成對一行中的多個列的寫操作,保證了針對行資料寫操作的元諮詢和一致性

行儲存壓縮比為3:1或5:1,列資料庫壓縮比率為8:1到30:1

全文搜尋引擎

資料庫的缺陷

全文搜素的條件可以隨意排列組合,如果通過索引來滿足,則索參數量會非常多

全文搜尋的模糊匹配方式,索引無法滿足,只能用like查詢,而like查詢是整表掃瞄效率低

基本原理

倒排索引,建立單詞到文件的索引

與資料庫結合

為了讓全文搜尋引擎支援關係型資料庫的全文搜尋,需要做一些轉換操作,即將關係型資料庫轉換為文件資料

elasticsearch是分布式的文件儲存方式,它能儲存和檢索複雜的資料結構--序列化成為json文件,以實時的方式

在elasticsearch中,每個欄位的所有資料都是預設被索引的,即每個欄位都有為了快速檢索設定的專用倒排序,而且不像其他多數的資料庫,它能在相同的查詢中使用所有倒排索引,並以驚人的速度返回結果

雖然能大幅度減輕儲存系統的壓力,但同時也帶來了更多複雜性,架構設計如果沒有針對快取的複雜性進行處理,某些場景下甚至會導致整個系統崩潰

快取穿透

指快取沒有發揮作用,業務查快取沒有結果於是再去儲存系統中查詢資料

1.儲存資料不存在,如黑客攻擊

2.儲存資料生成耗費大量時間或資源,生成快取耗時如果正好過期快取就不起作用

如爬蟲去爬歷史資料,這些資料是不被快取的

快取雪崩

指當緩衝失效後,引起系統效能繼續下降的情況,解決方案

1.更新鎖

2.後台更新

設定快取不過期,後台執行緒定時讀取,但會有一段時間業務讀不到資料情況

訊息佇列通知,業務讀不到資料後觸發訊息佇列,後台執行緒更新快取

快取熱點

對於特別熱點的資料也會導致瓶頸

對於微博粉絲數量超過100w的人,發微博后會生產100份快取,通過快取的key裡面加上編號進行區分,每次讀取快取時都隨機讀取其中某份快取

ppc process per connection

prefork模式,預先建立若干程序

tpc thread per connection

prethread,執行緒池模式

i/o多路復用模式

負載均衡分類

負載均衡架構

整個系統的負載均衡分為三層

地理級別負載均衡通過dns實現

集群級別負載均衡用硬體實現

機器級別負載均衡用軟體實現

負載均衡演算法

任務平均分類,輪詢/加權輪詢

負載均衡類,cpu負載/網路負載

效能最優類,根據響應時間分配

hash類,源位址,目標位址,session_id

《從0開始學架構》 02 高效能架構模式

目錄 讀寫分離 資料庫主從集群 一主一從或一主多從 主負責讀寫 從僅負責讀 適用場景 分散了資料庫讀寫操作的壓力,適用於讀多寫少的情況。兩個設計細節點 主從複製延遲問題和實現方式 1 主從複製延遲 2 實現方式 使用場景 分散了資料庫的儲存壓力。分庫 按業務模組將資料分散到不同資料庫上。帶來的問題 ...

從0開始學架構 推薦

程式設計師的成長繞不開架構設計,有時架構設計就像鴻溝一樣擋在程式設計師晉公升之路上,只要跨過去就可以海闊天空。但不少技術能力很強的程式設計師依然不能完全掌握架構設計,這與架構設計的思維方式和訓練機制與寫 有很大差異有關,加之人們對架構設計存在很多誤區,缺乏一套行之有效的架構設計方 就可能導致在實踐過...

《從0開始學架構》 學習筆記(基礎篇和高效能篇)

4月份在某網訂閱了李運華先生的 從0開始學架構 課程,目前已經更新了22期,其中前21期介紹的是架構基礎知識篇和高效能篇,學習完後對整體的架構知識增進了一些了解,所以把心得整理記錄下來。要說對這個課程的評價如何呢?總體而言還是不錯的,尤其是適用於從0開始未接觸過架構設計的同學們,但如果對於有些架構經...