從讀寫分離到分布式服務:系統架構演進十階段深度解析

第一階段到第四階段:架構進化四階段:探索單體到集群的高可用性能優化之道-CSDN博客https://blog.csdn.net/pinbodeshaonian/article/details/147464084?spm=1001.2014.3001.5502

以下是對從第五階段到第十階段詳細的解釋:

第五階段:數據庫讀寫分離

1.原理
  • 利用數據庫的主從復制機制,將主數據庫(Master)的寫操作記錄通過日志等方式同步到從數據庫(Slave)。主數據庫負責處理所有的寫請求,如 INSERT、UPDATE、DELETE 等操作,確保數據的一致性和完整性。從數據庫則實時復制主數據庫的數據,并提供讀服務,處理 SELECT 等查詢請求。這樣,寫操作和讀操作被分別分配到不同的數據庫服務器上,實現了讀寫分離。
2.作用
  • 提升性能:在高并發場景下,大量的讀請求會占用數據庫的資源,影響寫操作的執行效率。通過讀寫分離,讀請求由從數據庫處理,減輕了主數據庫的負擔,使主數據庫能夠更專注于寫操作,從而提高了整個系統的并發處理能力和響應速度。例如,在一個電商網站中,商品瀏覽等讀操作遠遠多于訂單提交等寫操作,將讀操作分散到從數據庫可以避免主數據庫因大量讀請求而出現性能瓶頸。
  • 增強可靠性:從數據庫作為主數據庫的副本,提供了數據的冗余備份。如果主數據庫出現故障,系統可以快速切換到從數據庫,繼續提供服務,保證數據的可用性和系統的穩定性,降低了因單點故障導致系統癱瘓的風險。

主從數據庫結構特點

1、一般:一主多從,也可也多主多從。

2、主庫操作,從庫操作。

主從復制步驟

1、主庫(Master)更新數據完成前,將操作寫入binlog日志文件。

2、從庫(Slave)打開I/O線程與主庫連接,做binlog dump process,并將事件寫入中繼日志。

3、從庫執行中繼日志事件,保持與主庫一致。

第六階段:使用反向代理和 CDN 加速網站響應

1.反向代理
  • 工作原理:反向代理服務器位于 Web 服務器前端,充當著客戶端與后端服務器之間的中介。當客戶端發送請求到服務器時,請求首先到達反向代理服務器。反向代理服務器根據預設的規則,如根據請求的 URL、服務器的負載情況等,將請求轉發到后端合適的真實服務器上處理。對于客戶端來說,它并不知道自己訪問的是反向代理服務器,以為就是直接訪問到了目標服務器,反向代理服務器對客戶端隱藏了后端服務器的真實架構和細節。
  • 功能作用:除了隱藏后端服務器信息外,反向代理還具有負載均衡的功能。它可以根據后端服務器的性能和負載狀況,將請求均勻地分配到不同的服務器上,避免某臺服務器負載過高而其他服務器閑置的情況,提高了整個系統的資源利用率和可用性。同時,反向代理還可以對請求進行緩存,對于一些經常訪問的靜態資源或動態頁面的部分內容進行緩存,當有相同的請求再次到來時,直接從緩存中返回數據,減少了后端服務器的處理壓力,進一步提高了響應速度。
2.CDN(內容分發網絡)
  • 架構與原理:CDN 是一個由分布在不同地理位置的服務器節點組成的分布式網絡。它通過智能的內容緩存和分發機制,根據用戶的地理位置、網絡狀況以及內容的熱度等因素,將內容緩存到距離用戶最近的節點服務器上。當用戶請求訪問某個網站的內容時,CDN 系統會自動判斷用戶的位置,并將用戶的請求路由到距離用戶最近且擁有該內容緩存的節點服務器上,讓用戶從該節點獲取數據,而不是從網站的源服務器獲取。
  • 加速效果:CDN 主要用于緩存靜態資源,如圖片、腳本、樣式表、視頻等。由于這些資源通常占據了網站加載時間的大部分,通過 CDN 的緩存和就近分發,可以大大減少數據在網絡中的傳輸距離和時間,顯著加快網站的加載速度,提高用戶體驗。例如,對于一個全球范圍內的電商網站,用戶在訪問商品詳情頁面時,圖片等靜態資源可以從距離用戶最近的 CDN 節點獲取,而無需從位于其他地區的源服務器下載,從而大大縮短了頁面的加載時間。

CDN和反向代理都使用了緩存機制?

第七階段:使用分布式文件系統和分布式數據庫系統

1.分布式文件系統
  • 架構與原理:分布式文件系統將文件分割成多個數據塊,并將這些數據塊分散存儲在多個不同的服務器節點上。同時,它通過一個元數據服務器來管理文件的元數據信息,如文件的目錄結構、數據塊的存儲位置等。當用戶請求訪問文件時,首先向元數據服務器查詢文件的元數據,獲取數據塊的存儲位置信息,然后直接從相應的存儲節點讀取數據塊,再將這些數據塊組合成完整的文件返回給用戶。分布式文件系統還具備數據冗余和容錯機制,通過將數據塊復制到多個節點上,確保在某個節點出現故障時,數據不會丟失,可以從其他副本節點獲取數據。
  • 應用場景與優勢:適用于大規模數據存儲和處理的場景,如互聯網公司的日志存儲、視頻網站的視頻文件存儲等。它提供了高可擴展性,可以方便地通過增加節點來擴展存儲容量和性能。同時,多個節點可以并行處理文件的讀寫請求,大大提高了文件系統的吞吐量和讀寫速度。例如,在一個大型數據中心中,分布式文件系統可以管理海量的服務器日志文件,支持快速的日志查詢和分析,并且能夠隨著業務的增長輕松擴展存儲能力。
2.分布式數據庫系統
  • 架構與原理:分布式數據庫系統將數據庫中的數據按照一定的規則分布存儲在多個節點上,這些節點可以是不同的服務器或計算機。數據的分布方式可以基于數據的范圍、哈希值等進行劃分。同時,分布式數據庫系統通過分布式事務處理機制來保證數據在多個節點之間的一致性和完整性。當進行數據操作時,系統會協調各個節點共同完成事務,確保數據的正確性。此外,分布式數據庫系統還具備自動的數據復制和故障轉移功能,以提高系統的可靠性和可用性。
  • 應用場景與優勢:用于處理大規模的結構化數據和高并發的業務請求,如大型電商平臺的訂單數據、社交網絡的用戶關系數據等。它能夠突破單機數據庫在存儲容量和處理能力上的限制,通過增加節點實現性能的線性擴展。例如,當電商平臺的訂單量不斷增長時,分布式數據庫系統可以通過添加節點來輕松應對日益增長的數據量和并發請求,保證系統的穩定運行和快速響應。

第八階段:使用 NoSQL 和搜索引擎

1.NoSQL(非關系型數據庫)
  • 類型與特點:NoSQL 數據庫有多種類型,常見的包括鍵值對數據庫(如 Redis)、文檔數據庫(如 MongoDB)、列存儲數據庫(如 Cassandra)和圖數據庫(如 Neo4j)等。鍵值對數據庫以簡單的鍵值對形式存儲數據,讀寫速度極快,適用于緩存、實時數據處理等場景。文檔數據庫以文檔的形式存儲數據,數據結構更加靈活,適合存儲半結構化的數據,如 JSON 格式的文檔,常用于內容管理系統、移動應用等場景。列存儲數據庫則將數據按列進行存儲,適合處理大規模的數據分析和處理任務。圖數據庫用于存儲和處理具有復雜關系的數據,如社交網絡中的人際關系、知識圖譜等。
  • 應用場景:NoSQL 數據庫在處理非結構化或半結構化數據、高并發讀寫以及對數據模型靈活性要求較高的場景中表現出色。例如,在實時通信應用中,使用 Redis 作為緩存來存儲用戶的在線狀態、消息隊列等數據,可以快速響應用戶的請求。在內容管理系統中,MongoDB 可以方便地存儲和管理各種類型的文檔內容,無需事先定義嚴格的表結構。
2.搜索引擎
  • 工作原理:搜索引擎首先會對網站的文本內容進行抓取和索引。它通過網絡爬蟲程序遍歷網站的頁面,提取其中的文字信息,并對這些信息進行分析和處理,建立索引數據結構。索引中包含了關鍵詞與文檔之間的映射關系,以及文檔的相關元數據。當用戶在搜索框中輸入關鍵詞時,搜索引擎會在索引中快速查找匹配的文檔,并根據相關性和其他因素對搜索結果進行排序,然后將最相關的文檔列表返回給用戶。
  • 應用場景:在各種網站和應用中,搜索引擎用于幫助用戶快速查找所需的信息,如文章、產品、用戶生成的內容等。例如,在電商網站中,用戶可以通過搜索引擎查找特定的商品;在企業內部的知識管理系統中,員工可以使用搜索引擎快速找到相關的文檔和資料,提高信息檢索的效率和準確性,提升用戶體驗。

第九階段:業務拆分

1.概念與方法

業務拆分是將一個龐大復雜的單體應用,按照不同的業務功能、模塊或領域,拆分成多個相對獨立的子系統或微服務。拆分的方法可以根據業務的邊界進行劃分,例如將電商系統拆分成商品管理、訂單管理、用戶管理、支付管理等微服務。每個微服務都有自己獨立的數據庫、業務邏輯和接口,它們之間通過輕量級的通信機制進行交互,如 RESTful API。

2.優勢與挑戰
  • 優勢:首先,降低了系統的復雜度。每個微服務的功能相對單一,代碼規模較小,便于開發、測試和維護。不同的團隊可以專注于不同的微服務開發,提高了開發效率和代碼質量。其次,提高了系統的可擴展性。當某個微服務的業務需求增長時,可以獨立地對該微服務進行擴展,增加服務器資源或添加新的服務實例,而不會影響到其他微服務。此外,業務拆分還增強了系統的靈活性和可維護性。當某個業務功能發生變化時,只需對相應的微服務進行修改和部署,不會對整個系統造成大規模的影響。
  • 挑戰:微服務架構也帶來了一些挑戰,如服務之間的通信和協作變得更加復雜,需要合理設計通信協議和接口,以確保服務之間的高效交互。同時,分布式系統的運維難度增加,需要對多個微服務進行統一的監控、管理和故障排查。

第十階段:分布式服務

1.架構與原理

分布式服務架構是基于微服務架構的進一步發展,將業務功能以服務的形式進行封裝和部署,這些服務分布在不同的服務器上,并通過網絡進行通信和協作。每個服務都有自己獨立的生命周期和運行環境,可以根據業務需求獨立地進行水平擴展,即增加或減少服務實例的數量。分布式服務架構通常采用服務治理框架來管理服務,包括服務的注冊與發現、負載均衡、容錯處理、流量控制等功能。服務提供者將自己的服務注冊到服務注冊中心,服務消費者通過服務注冊中心查找所需的服務,并通過負載均衡算法選擇合適的服務實例進行調用。

2.特點與應用
  • 特點:分布式服務架構具有高度的靈活性和可擴展性。它可以根據不同的業務場景和流量變化,動態地調整服務的部署和資源分配,實現資源的高效利用。同時,它提供了強大的容錯機制,當某個服務實例出現故障時,服務治理框架可以自動將請求轉發到其他健康的服務實例上,保證系統的高可用性。此外,通過對服務的監控和管理,可以及時發現和解決服務中的問題,提高系統的穩定性和可靠性。
  • 應用:適用于大型復雜的分布式系統,如互聯網電商平臺、金融科技系統等。例如,在電商平臺中,訂單服務、庫存服務、物流服務等可以作為獨立的分布式服務進行部署和管理。在促銷活動等高峰時段,可以根據業務流量動態地擴展訂單服務和庫存服務的實例數量,以應對高并發的請求,保證系統的穩定運行和快速響應。

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

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

相關文章

Webug4.0靶場通關筆記07- 第9關反射XSS和第10關存儲XSS

目錄 第09關 反射型XSS 1.打開靶場 2.源碼分析 3.滲透實戰 第10關 存儲型XSS 1.打開靶場 2.源碼分析 3.滲透實戰 本系列為通過《Webug4.0靶場通關筆記》的滲透集合,本文為反射型和存儲型XSS漏洞關卡的滲透部分,通過對XSS關卡源碼的代碼審計找到漏…

Prometheus的安裝部署

目錄 一、概述 二、Prometheus的安裝 1、二進制方式 1.1、下載系統安裝包?編輯 1.2、解壓 1.3、創建數據目錄,服務運行用戶 1.4、設置為系統服務(創建服務運行腳本) 1.5、啟動服務,并通過瀏覽器訪問驗證 2、容器方式 2…

Jupyter Notebook為什么適合數據分析?

Jupyter Notebook 是一款超實用的 Web 應用程序,在數據科學、編程等諸多領域都發揮著重要作用。它最大的特點就是能讓大家輕松創建和共享文學化程序文檔。這里說的文學化程序文檔,簡單來講,就是把代碼、解釋說明、數學公式以及數據可視化結果…

Python清空Word段落樣式的方法

在 Python 中,你可以使用 python-docx 庫來操作 Word 文檔,包括清空段落樣式。以下是幾種清空段落樣式的方法: 方法一:直接設置段落樣式為"Normal" from docx import Documentdoc Document(your_document.docx) # 打…

macOS 上是否有類似 WinRAR 的壓縮軟件?

對于習慣使用 Windows 的用戶來說,WinRAR 是經典的壓縮/解壓工具,但 macOS 系統原生并不支持 RAR 格式的解壓,更無法直接使用 WinRAR。不過,macOS 平臺上有許多功能相似甚至更強大的替代工具,以下是一些推薦&#xff1…

WebRtc09:網絡基礎P2P/STUN/TURN/ICE

網絡傳輸基本知識 NATSTUN(Session Traversal Utilities for NAT)TURNICE NAT 產生的原因 IPV4地址不夠出于網絡安全的原因 NAT種類 完全錐型NAT(Full Cone NAT)地址限制型NAT(Address Restricted Cone NAT)端口限制型NAT(Port Restricted Cone NAT…

如何添加或刪除極狐GitLab 項目成員?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 項目成員 (BASIC ALL) 成員是有權訪問您的項目的用戶和群組。 每個成員都有一個角色,這決定了他們在項目中可以…

用單目相機和apriltag二維碼aruco實現單目定位

目錄 一、核心流程與代碼框架 1. ?環境準備? 2. ?ArUco定位實現 3. ?AprilTag定位實現(需額外安裝Apriltag庫) 二、關鍵優化點 1?.亞像素角點優化 2? 多標簽聯合定位 三、性能指標(實測) 四、常見問題 ?檢測失敗…

tinyrenderer筆記(透視矯正)

tinyrenderer個人代碼倉庫:tinyrenderer個人練習代碼 引言 還要從上一節知識說起,在上一節中我為了調試代碼,換了一個很簡單的正方形 obj 模型,配上紋理貼圖與法線貼圖進行渲染,得了下面的結果: what&…

MySQL的內置函數與復雜查詢

目錄 前言 一、聚合函數 1.1日期函數 1.2字符串函數 1.3數學函數 1.4其它函數 二、關鍵字周邊 2.1關鍵字的生效順序 2.2數據源 2.3可以使用聚合函數的關鍵字 前言 在前面幾篇文章中,講解了有關MySQL數據庫、數據庫表的創建、數據庫表的數據操作等等。本文我…

見多識廣4:Buffer與Cache,神經網絡加速器的Buffer

目錄 前言傳統意義上的Buffer與Cache一言以蔽之定義與主要功能BufferCache 數據存儲策略二者對比 神經網絡加速器的bufferInput BufferWeight BufferOutput Buffer與傳統buffer的核心區別總結 前言 知識主要由Qwen和Kimi提供,我主要做筆記。 參考文獻: …

內存的位運算

示例:提取和設置標志位 假設我們有一個32位的整數,其中不同的位代表不同的標志。例如: 位0:是否開啟日志(0表示關閉,1表示開啟) 位1:是否啟用調試模式(0表示禁用&#…

linux -shell原理與運用

1---shell的工作方式和功能 shell的工作方式: shell本身也是一個應用程序,存儲在/bin 或者是/user/bin中 登錄的時候 會根據/etc/passwd文件載入shell默認執行 shell啟動后,就會顯示命令提示符,等待用戶輸入命令 命令的邏輯: 首先會判斷時內部命令還是外部命令,如果是內部…

js獲取uniapp獲取webview內容高度

js獲取uniapp獲取webview內容高度 在uni-app中&#xff0c;如果你想要獲取webview的內容高度&#xff0c;可以使用uni-app提供的bindload事件來監聽webview的加載&#xff0c;然后通過調用webview的invokeMethod方法來獲取內容的高度。 以下是一個示例代碼&#xff1a; <te…

Windows系統升級Nodejs版本

什么是nodejs Node.js 是一個免費、開源、跨平臺的 JavaScript 運行時環境, 它讓開發人員能夠創建服務器 Web 應用、命令行工具和腳本。 NodeJs官網 網址&#xff1a;Node.js — 在任何地方運行 JavaScript 可以通過網址下載安裝&#xff0c;通過官網可以看到現在最新版本為22…

Relay算子注冊(在pytorch.py端調用)

1. Relay算子注冊 (C層) (a) 算子屬性注冊 路徑: src/relay/op/nn/nn.cc RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity…

【JavaEE】網絡原理之初識(1.0)

目錄 ?編輯 局域網與廣域網 IP地址和端口號 實現簡單的服務器客戶端交互 簡單理解socket TCP和UDP的差別&#xff08;初識&#xff09; socket面對udp DatagramSocket API DatagramSocket 構造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis數據結構ZipList,QuickList,SkipList

目錄 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding編碼 1.4.ZipList連鎖更新問題 2.QuickList SkipList跳表 RedisObject 五種數據類型 1.ZipList redis中的ZipList是一種緊湊的內存儲存結構&#xff0c;主要可以節省內存空間儲存小規模數據。是一種特殊的雙端鏈表…

laravel 12 監聽syslog消息,并將消息格式化后存入mongodb

在Laravel 12中實現監聽Syslog消息并格式化存儲到MongoDB&#xff0c;需結合日志通道配置、Syslog解析和MongoDB存儲操作。以下是具體實現方案&#xff1a; 一、環境配置 安裝MongoDB擴展包 執行以下命令安裝必要的依賴&#xff1a; composer require jenssegers/mongodb ^4.0確…

【STM32項目實戰】一文了解單片機的SPI驅動外設功能

前言&#xff1a;在前面我有文章介紹了關于單片機的SPI外設CUBEMX配置&#xff0c;但是要想使用好SPI這個外設我們還必須對其原理性的時序有一個詳細的了解&#xff0c;所以這篇文章就補充一下SPI比較偏向底層的時序性的邏輯。 1&#xff0c;SPI簡介 SPI是MCU最常見的對外通信…