高性能架構設計-數據庫(讀寫分離)

一、高性能數據庫簡介

1.高性能數據庫方式

讀寫分離:將訪問壓力分散到集群中的多個節點,沒有分散存儲壓力

分庫分表:既可以分散訪問壓力,又可以分散存儲壓力


?

2.為啥不用表分區

  • 如果SQL不走分區鍵,很容易出現全表鎖;
  • 在分區表實施關聯查詢,就是一個災難;
  • 分庫分表,自己掌控業務場景與訪問模式,可控;分區表,工程師寫了一個SQL,自己無法確定MySQL是怎么玩的,不可控;


?

二、讀寫分離——提升數據庫讀性能

可以緩解訂單系統、賬戶系統、購物車系統等等功能mysql的并發壓力

讀寫分離的基本原理是將數據庫的讀寫操作分散到不同的節點

1.讀寫分離的基本實現

數據庫服務器搭建主從集群,一主一從、或者一主多從,數據庫主機負責讀寫操作,從機只負責讀操作。數據庫主機通過復制將數據同步到從機,每臺數據庫服務器都存儲了所有的業務數據。業務服務器將寫操作發給數據庫主機,將讀操作發給數據庫從機。

需要注意的是,這里用的是“主從集群”,而不是“主備集群”。“從機”的“從”可以理解為“仆從”,仆從是要幫主人干活的,“從機”是需要提供讀數據的功能的;而“備機”一般被認為僅僅提供備份功能,不提供訪問功能。


?

2.讀寫分離引起的復雜性

(1)復制延遲

一般會把從庫落后的時間作為一個重點的數據庫指標做監控和報警,正常的時間是在毫秒級別,一旦落后的時間達到了秒級別就需要告警了。

以 MySQL 為例,主從復制延遲可能達到 1 秒,如果有大量數據同步,延遲 1 分鐘也是有可能的。主從復制延遲會帶來一個問題:如果業務服務器將數據寫入到數據庫主服務器后立刻(1 秒內)進行讀取,此時讀操作訪問的是從機,主機還沒有將數據復制過來,到從機讀取數據是讀不到最新數據的,業務上就可能出現問題。解決主從復制延遲有幾種常見的方法:

  • 寫操作后的讀操作指定發給數據庫主服務器(緩存標記法)。例如,注冊賬號完成后,登錄時讀取賬號的讀操作也發給數據庫主服務器。這種方式和業務強綁定,對業務的侵入和影響較大,如果哪個新來的程序員不知道這樣寫代碼,就會導致一個 bug。可以利用一個緩存記錄必須讀主的數據。當寫請求發生時:
    • 寫主庫
    • 將哪個庫,哪個表,哪個主鍵三個信息拼裝一個key設置到cache里,這條記錄的超時時間,設置為“主從同步時延”
    • 查詢時:
      ?
      • cache里有這個key,說明1s內剛發生過寫請求,數據庫主從同步可能還沒有完成,此時就應該去主庫查詢
      • cache里沒有這個key,說明最近沒有發生過寫請求,此時就可以去從庫查詢


?

  • 讀從機失敗后再讀一次主機。這就是通常所說的“二次讀取”,二次讀取和業務無綁定,只需要對底層數據庫訪問的 API 進行封裝即可,實現代價較小,不足之處在于如果有很多二次讀取,將大大增加主機的讀操作壓力。
  • 關鍵業務讀寫操作全部指向主機,非關鍵業務采用讀寫分離。例如,對于一個用戶管理系統來說,注冊 + 登錄的業務讀寫操作全部訪問主機,用戶的介紹、愛好、等級等業務,可以采用讀寫分離,因為即使用戶改了自己的自我介紹,在查詢時卻看到了自我介紹還是舊的,業務影響與不能登錄相比就小很多,還可以忍受。
  • 寫操作完成后,跳轉到無關頁面,類似訂單支付的“支付完成”頁面,其實這個頁面沒有任何有效的信息,就是告訴你支付成功,然后再放一些廣告什么的。你如果想再看剛剛支付完成的訂單,需要手動點一下,這樣就很好地規避了主從同步延遲的問題。
    ?
(2)分配機制

將讀寫操作區分開來,然后訪問不同的數據庫服務器,一般有兩種方式:程序代碼封裝和中間件封裝。由于數據庫中間件的復雜度要比程序代碼封裝高出一個數量級,一般情況下建議采用程序語言封裝的方式,或者使用成熟的開源數據庫中間件。

  • 程序代碼封裝。程序代碼封裝指在代碼中抽象一個數據訪問層,實現讀寫操作分離和數據庫服務器連接的管理。
  • 中間件封裝。中間件封裝指的是獨立一套系統出來,實現讀寫操作分離和數據庫服務器連接的管理。對于業務服務器來說,訪問中間件和訪問數據庫沒有區別。中間件需要支持多種編程語言,因為數據庫中間件對業務服務器提供的是標準 SQL 接口。數據庫中間件要支持完整的 SQL 語法和數據庫服務器的協議(例如,MySQL 客戶端和服務器的連接協議),實現比較復雜,細節特別多,很容易出現 bug,需要較長的時間才能穩定。數據庫中間件自己不執行真正的讀寫操作,但所有的數據庫操作請求都要經過中間件,中間件的性能要求也很高。


?

(3)區分連接池
  • 數據庫連接池需要區分:讀連接池,寫連接池
  • 如果要保證讀高可用,讀連接池要實現故障自動轉移


?

3.從庫的數量

是不是無限制地增加從庫的數量就可以抵抗大量的并發呢?實際上并不是的。因為隨著從庫數量增加,從庫連接上來的 IO 線程比較多,主庫也需要創建同樣多的 log dump 線程來處理復制的請求,對于主庫資源消耗比較高,同時受限于主庫的網絡帶 寬,所以在實際使用中,一般一個主庫最多掛 3~5 個從庫。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903642.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903642.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903642.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Hive入門】Hive性能優化:執行計劃分析EXPLAIN命令的使用

目錄 1 EXPLAIN命令簡介 1.1 什么是EXPLAIN命令? 1.2 EXPLAIN命令的語法 2 解讀執行計劃中的MapReduce階段 2.1 執行計劃的結構 2.2 Hive查詢執行流程 2.3 MapReduce階段的詳細解讀 3 識別性能瓶頸 3.1 數據傾斜 3.2 Shuffle開銷 3.3 性能瓶頸識別與優化 4 總結 在大…

開源模型應用落地-qwen模型小試-Qwen3-8B-快速體驗(一)

一、前言 阿里云最新推出的 Qwen3-8B 大語言模型,作為國內首個集成“快思考”與“慢思考”能力的混合推理模型,憑借其 80 億參數規模及 128K 超長上下文支持,正在重塑 AI 應用邊界。該模型既可通過輕量化“快思考”實現低算力秒級響應,也能在復雜任務中激活深度推理模式,以…

Kafka Producer的acks參數對消息可靠性有何影響?

1. acks0 可靠性最低生產者發送消息后不等待任何Broker確認可能丟失消息(Broker處理失敗/網絡丟失時無法感知)吞吐量最高,適用于允許數據丟失的場景(如日志收集) 2. acks1 (默認值) Leader副本確認模式生產者等待Le…

虛擬機centos7安裝docker

虛擬機CentOS 7上安裝 Docker流程 1. 更新系統軟件包 需要確保系統軟件包是最新的 sudo yum -y update sudo:以超級用戶權限執行命令。 yum:CentOS的包管理器工具。 -y:自動確認所有提示,直接執行。 2. 安裝 Docker 依賴 在安裝 …

ZYNQ MPSOC之PL與PS數據交互DMA方式

ZYNQ MPSOC之PL與PS數據交互DMA方式 1 摘要 XILINX ZYNQ 以及 ZYNQ MPSOC主要優勢在于異構 ARM+FPGA。其中非常關鍵的一點使用了 AXI 總線進行高速互聯。而且這個 AXI 總線是開放給我們用戶使用的。在前面的文章中我們詳解了使用了AXI-HP方式PL到PS端進行數據交互。本文主要涉…

枚舉法——C++算法【淚光2929】

前言 "打牢基礎,萬事不愁" .C的基礎語法的學習."學以致用,邊學邊用",編程是實踐性很強的技術,在運用中理解,總結. 引入 枚舉在成熟框架中,用得還挺多的.枚舉可以讓程序更容易理解 之前寫過一篇關于枚舉的帖子--- 白話編程---數據篇(4)枚…

HarmonyOS NEXT應用開發-Notification Kit(用戶通知服務)notificationManager.cancelAll

1.notificationManager.cancelAll 支持設備Phone2in1TabletCarWearable cancelAll(callback: AsyncCallback<void>): void 取消當前應用所有已發布的通知。使用callback異步回調。 系統能力&#xff1a;SystemCapability.Notification.Notification 示例&#xff1a; …

Mac 創建QT按鈕以及一些操作

在創建QT項目好 后我們打開mainwindow.cpp&#xff0c;下面所示的代碼都是在這個cpp文件里面因為它是窗口的入口函數 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QPushButton>//按鈕的頭文件MainWindow::MainWindow(QWidget *pa…

開源協議全解析:類型、選擇與法律風險規避指南

[TOC] 在當今開源軟件主導的技術生態中&#xff0c;開源協議&#xff08;Open Source License&#xff09;是決定項目能否被商業使用、二次開發的關鍵法律文件。據統計&#xff0c;GitHub上超過70%的項目使用某種形式的開源協議&#xff0c;但其中近30%存在協議兼容性問題。本…

TM1668芯片學習心得一

一、TM1668 是一種帶鍵盤掃描接口的LED&#xff08;發光二極管顯示器&#xff09;驅動控制專用電路&#xff0c;內部集成有MCU 數字接口、數據鎖存器、LED 高壓驅動、鍵盤掃描等電路。本產品性能優良&#xff0c;質量可靠。主要應用于VCR。 學習鏈接 二、 三、顯示寄存器的地址…

時空特征如何融合?LSTM+Resnet有奇效,SOTA方案預測準確率超91%

LSTM有著不錯的時序信息提取能力&#xff0c;ResNet有著不錯的空間特征信息提取能力。如果現在有時空特征融合的創新需求&#xff0c;我們是否能將LSTM和ResNet兩者的優點融合起來呢&#xff1f; 隨著這個思路下去&#xff0c;LSTM ResNet混合模型橫空出世&#xff0c;在各個…

[PRO_A7] SZ501 FPGA開發板簡介

SZ501 FPGA開發板簡介 概述 SZ501 FPGA開發板是專為高性能FPGA設計、快速原型開發和復雜應用調試打造的先進開發平臺。搭載Xilinx Artix-7系列XC7A100T FPGA芯片&#xff0c;SZ501提供卓越的邏輯運算能力和靈活的接口支持&#xff0c;廣泛適用于通信、信號處理、嵌入式系統及…

企業微信jdk 授權 記錄

1、npm install wecom/jssdk 2、index.html 引入 <script src"https://wwcdn.weixin.qq.com/node/open/js/wecom-jssdk-2.0.2.js"></script> 3、創建js import * as ww from "wecom/jssdk"; /*** 獲取企業微信jdk局方法----------------…

Android13增加第三方類實現加入到系統

1、將需要的添加包放在/frameworks/base/core/java/com目錄下&#xff0c;比如devmgr/devicemgr/DeviceMgr.java package com.devmgr.devicemgr; import android.content.Context; public class DeviceMgr {private volatile static DeviceMgr instance null;private Context…

計算機網絡核心知識點全解析(面試通關版)

一、網絡體系結構&#xff1a;從OSI到TCP/IP的分層設計 1.1 七層模型與四層模型對比 OSI七層模型核心功能TCP/IP四層對應典型協議生活類比應用層為應用程序提供服務&#xff08;如文件傳輸、郵件、Web瀏覽&#xff09;應用層HTTP、FTP、SMTP、DNS快遞面單信息&#xff08;收件…

AI圖稿生成訂單管理系統

讓設計生產“零誤差、全自動、秒響應” 一、核心價值&#xff1a;重構設計到生產的效率革命 效率提升70% 告別人工排版&#xff0c;AI自動復用歷史稿件模板&#xff0c;單次設計永久沉淀為可調用資產&#xff1b; 印刷文件生成速度達20萬張/分鐘&#xff0c;滿足電商大促、…

TwinCAT數據類型,%MX,%MD這些特殊符號

在 TwinCAT&#xff08;Beckhoff PLC 編程環境&#xff09;中&#xff0c;%MX、%MD 等符號是 IEC 61131-3 標準的地址表示法&#xff0c;用于直接訪問 PLC 的物理 I/O 或內存區域。這些符號通常用于 變量聲明 或 直接尋址&#xff0c;特別是在 TwinCAT 2 和 傳統 PLC 編程 中較…

基于UNet算法的農業遙感圖像語義分割——補充版

前言 本案例希望建立一個UNET網絡模型&#xff0c;來實現對農業遙感圖像語義分割的任務。本篇博客主要包括對上一篇博客中的相關遺留問題進行解決&#xff0c;并對網絡結構進行優化調整以適應個人的硬件設施——NVIDIA GeForce RTX 3050。 本案例的前兩篇博客直達鏈接基于UNe…

Compose筆記(二十一)--AnimationVisibility

這一節主要了解一下Compose的AnimationVisibility,AnimatedVisibility 是 Jetpack Compose 里用于實現組件可見性動畫效果的組件&#xff0c;借助它能讓組件在顯示和隱藏時帶有平滑的過渡動畫&#xff0c;從而提升用戶體驗。現總結如下: API 1. visible 含義&#xff1a;這是一…

基于 HT 構建 2D 智慧倉儲可視化系統的技術解析

在當今數字化時代&#xff0c;倉儲管理對于企業的運營效率和成本控制愈發關鍵。圖撲軟件&#xff08;Hightopo&#xff09;憑借其強大的 HT for Web 產品&#xff0c;打造出 2D 智慧倉儲可視化平臺&#xff0c;為倉儲管理帶來了全新的技術解決方案。 HT 是一款基于 WebGL、can…