業界常見的系統設計技巧|主從式讀寫分離架構

更新於 發佈於 閱讀時間約 3 分鐘

🎯 問題:如何在頻繁查詢的情境下,解決資料庫系統的效能問題?


業界作法百百種,常見的思路是運用「讀寫分離」的技巧,設計一個主從式架構,將傳統資料庫細分為主 (Master) 、從 (Slave) 資料庫。


Master節點專注於於「資料的新增、修改、刪除」,資料正確性以 Master節點為準。Slave節點專注於「同步資料」、及「資料查詢」。


⭐ 讀寫分離好處:分散讀取及寫入的負擔


因為這個架構讓不同單元負責不同的工作,改善系統效能。若是流量真的太高,需要進一步強化讀取效能,只需要增加 Slave 節點數量,讓更多節點一起分擔查詢需求。


⭐ 讀寫分離注意項目:資料一致性


由於資料更新做在Master,以Master節點的資料為主,Slave負責同步,這時候要思考的問題是「用戶對於資料即時性的容忍程度為何」?


理想上能越頻繁同步資料越好,最好是Master節點的資料更新,馬上就會連動到Slave節點,但是過於頻繁的更新,也會造成Master節點的負擔,反而造成資料庫效能變差。原則上如果是對資料即時性要求極高的情境(如金融交易),不適合主從式讀寫分離架構


因此有的系統會以不同情境設計同步頻率,例如不常更新的資料表,Slave節點就不會頻繁更新; 針對經常變動的資料表,Slave節點的更新頻率則可以縮短


有的系統則是利用資料庫系統原生的同步功能,如 PostgreSQL 使用 Streaming Replication+WAL的技術,實現 Master 節點資料改變,Slave 節點異步更新的效果。註:PostgreSQL也支援同步更新的功能,但一般狀況下不會推薦同步更新,因為同步更新會影響 Master 寫入效能。(參考:PostgreSQL正體中文使用手冊。)


⭐ 讀寫分離注意項目:應用層路由


若使用傳統單一資料庫入口,應用系統只要連結單一入口,而讀寫分離架構需要連接不同入口,讓系統在新增、修改、刪除情境能對到 Master 節點,讀取情境對到 Slave 節點


如果要在應用端做得更好,則需要往下繼續考慮問題:

1.Slave 節點的負載均衡問題:當有多的Slave節點時,如何透過隨機分配來降低Slave負載。

2.當Slave節點不可用時,系統是否有Failover機制,將查詢切回Master節點


⭐ 額外選項:Redis可作為暫存資料庫


Redis是一個高性能的記憶體內 Key-Value 儲存系統,具備「極高速度」「過期機制」(超過時間自動回收資料)、「高併發」等好用功能,時常作為Cache資料的選項。


若是要提升系統查詢的效能,可以將時常查詢的資料存於Redis,避免重複查詢資料庫,而且除了Key-Value結構、字串,也支援複雜的Hash結構(如Json格式資料)。


要注意的是,由於Redis是記憶體型儲存,若資料量過大,可能會讓記憶體使用量飆高。另外,也要小心資料一致性的問題,若資料庫更新資料,而Redis未更新,用戶可能會查到舊資料。


⭐ 結論


主從式架構的好處是能夠分散資料庫讀寫的負載。雖然現代已有許多參考的作法,但實際操作還是要確保Slave節點的資料正確性,並且也要考慮若是Slave節點失效,後續的Failover機制。


如何增強資料庫查詢的效能,一直是工程師努力的課題。我在職涯的前兩份工作都有接手主從式架構的資料庫系統設計,此後,我都對這類系統抱持著敬畏的態度,了解到系統的背後,若不是有無數個勤勤懇懇的工程師,就是有強大的東方神秘力量支持著。


raw-image



留言
avatar-img
留言分享你的想法!
avatar-img
EMO先生的沙龍
158會員
64內容數
本專題主要放一些投資理財方面的個人研究,投資理念偏向價值投資,習慣從產業的角度、產品營收佔比分析公司體質,近期研究的主題著重於: (1)半導體產業鏈:IC設計、IC製造、CoWos (2)重電產業鏈:台電強韌電網、智慧電網計畫 (3)營建股追蹤:隆大、新美齊、憶聲、順達、名軒
EMO先生的沙龍的其他內容
2025/04/13
大型語言模型的發展,讓人們思考陪伴型機器人是否能成真,文章探討兩種實現方式:主流的語音轉文字LLM方法和新興的Spoken LLMs方法。作者認為Spoken LLMs的發展,能讓AI更自然地與人互動,實現如哆啦A夢般的陪伴型機器人,並進一步提升AI的陪伴功能。
Thumbnail
2025/04/13
大型語言模型的發展,讓人們思考陪伴型機器人是否能成真,文章探討兩種實現方式:主流的語音轉文字LLM方法和新興的Spoken LLMs方法。作者認為Spoken LLMs的發展,能讓AI更自然地與人互動,實現如哆啦A夢般的陪伴型機器人,並進一步提升AI的陪伴功能。
Thumbnail
2025/02/02
此文章介紹LeetCode中Binary Tree的三種主要遍歷方法:深度優先搜尋(DFS)、廣度優先搜尋(BFS)和中序遍歷(Inorder Traversal),並搭配LeetCode範例題目說明其應用與解題技巧。文末總結各種方法的適用情境,幫助讀者提升解題能力。
Thumbnail
2025/02/02
此文章介紹LeetCode中Binary Tree的三種主要遍歷方法:深度優先搜尋(DFS)、廣度優先搜尋(BFS)和中序遍歷(Inorder Traversal),並搭配LeetCode範例題目說明其應用與解題技巧。文末總結各種方法的適用情境,幫助讀者提升解題能力。
Thumbnail
2025/01/27
本文介紹使用 Golang 解決 LeetCode 題目的技巧,包含運用 map[int]int、slice 實作堆疊、copy 函數高效複製切片、for 迴圈取代 while 迴圈,以及處理鏈結串列的技巧,以提升程式碼效率和可讀性。
Thumbnail
2025/01/27
本文介紹使用 Golang 解決 LeetCode 題目的技巧,包含運用 map[int]int、slice 實作堆疊、copy 函數高效複製切片、for 迴圈取代 while 迴圈,以及處理鏈結串列的技巧,以提升程式碼效率和可讀性。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
Thumbnail
在知識爆炸的時代,有效地吸收與應用閱讀中的信息對學習者來說是一大挑戰。本文探討了三種不同層次的讀書筆記方法,包括局部碎片化的九合一讀書筆記、全局概覽的心智圖筆記及結構內化的閱讀心得文章。這些方法不僅有助於記錄和整理信息,還能促進理解與記憶,幫助學習者將知識內化為智慧,提升學習效果和實用能力。
Thumbnail
在知識爆炸的時代,有效地吸收與應用閱讀中的信息對學習者來說是一大挑戰。本文探討了三種不同層次的讀書筆記方法,包括局部碎片化的九合一讀書筆記、全局概覽的心智圖筆記及結構內化的閱讀心得文章。這些方法不僅有助於記錄和整理信息,還能促進理解與記憶,幫助學習者將知識內化為智慧,提升學習效果和實用能力。
Thumbnail
本文介紹如何結合使用 Readwise 和 Readwise Reader 進行高效的碎片化閱讀與筆記管理。透過 Readwise Reader 閱讀多平台內容並進行高亮和筆記,利用 Readwise 整理和回顧劃線,並匯出至 Heptabase 和 Obsidian,提升學習效率,避免碎片化思考。
Thumbnail
本文介紹如何結合使用 Readwise 和 Readwise Reader 進行高效的碎片化閱讀與筆記管理。透過 Readwise Reader 閱讀多平台內容並進行高亮和筆記,利用 Readwise 整理和回顧劃線,並匯出至 Heptabase 和 Obsidian,提升學習效率,避免碎片化思考。
Thumbnail
在傳統的筆記方法中存在著分類僵化和過度依賴關鍵字的問題。卡片筆記以一張卡片一個知識,確保知識的獨立性,並且建立知識間的多重連接,形成網狀結構。 這本書介紹了用卡片筆記做知識管理的技巧,幫助大家將零散的知識系統化,從而在需要時能夠迅速提取並應用。
Thumbnail
在傳統的筆記方法中存在著分類僵化和過度依賴關鍵字的問題。卡片筆記以一張卡片一個知識,確保知識的獨立性,並且建立知識間的多重連接,形成網狀結構。 這本書介紹了用卡片筆記做知識管理的技巧,幫助大家將零散的知識系統化,從而在需要時能夠迅速提取並應用。
Thumbnail
以前考試最愛買參考書,參考書的編排通常是重點精華+題目+詳解。 不愛讀課本,只看重點精華就去做題目,以為這樣可以節省時間,做題目的時候模模糊糊,A好像也對,C看起來也很像...,根本沒搞清楚基本原理,又要重頭念一次。 才發現重點要自己整理,整理的過程是釐清內容和鞏固記憶最重要的環節。 整理是一
Thumbnail
以前考試最愛買參考書,參考書的編排通常是重點精華+題目+詳解。 不愛讀課本,只看重點精華就去做題目,以為這樣可以節省時間,做題目的時候模模糊糊,A好像也對,C看起來也很像...,根本沒搞清楚基本原理,又要重頭念一次。 才發現重點要自己整理,整理的過程是釐清內容和鞏固記憶最重要的環節。 整理是一
Thumbnail
有些複習方式很沒效率,有些複習方式能協助孩子把知識真正轉化成自己的, 這兩者之間的差異究竟何在?
Thumbnail
有些複習方式很沒效率,有些複習方式能協助孩子把知識真正轉化成自己的, 這兩者之間的差異究竟何在?
Thumbnail
本文介紹了作者如何將書籍章節中重要的知識進行條理化整理,並提出效率化閱讀的方法,適用於任何領域的知識學習。
Thumbnail
本文介紹了作者如何將書籍章節中重要的知識進行條理化整理,並提出效率化閱讀的方法,適用於任何領域的知識學習。
Thumbnail
閱讀是一種享受,但有時候讀書無法專心或閱讀速度變慢,這時候可以嘗試對話式閱讀。透過與書中內容對話,讓閱讀更加有趣且豐富,並且可以讓自己更集中注意力。
Thumbnail
閱讀是一種享受,但有時候讀書無法專心或閱讀速度變慢,這時候可以嘗試對話式閱讀。透過與書中內容對話,讓閱讀更加有趣且豐富,並且可以讓自己更集中注意力。
Thumbnail
在學術寫作中,掌握「關鍵字閱讀」技術至關重要。 對於學術研究者來說, 有效地從大量的學術文獻中提煉出核心資訊是一項挑戰。 關鍵字閱讀不僅可以幫助你避免被不必要的細節所淹沒, 還能讓你更聚焦於與研究主題相關的資訊。 結合「書目卡 Bibcard」的使用, 這種閱讀方式能夠大大提高你的閱讀效
Thumbnail
在學術寫作中,掌握「關鍵字閱讀」技術至關重要。 對於學術研究者來說, 有效地從大量的學術文獻中提煉出核心資訊是一項挑戰。 關鍵字閱讀不僅可以幫助你避免被不必要的細節所淹沒, 還能讓你更聚焦於與研究主題相關的資訊。 結合「書目卡 Bibcard」的使用, 這種閱讀方式能夠大大提高你的閱讀效
Thumbnail
生活中的資訊充盈,獲得並背誦知識並不合哩,將自身經驗進行反思後運用才是有效用的方法。
Thumbnail
生活中的資訊充盈,獲得並背誦知識並不合哩,將自身經驗進行反思後運用才是有效用的方法。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News