淺談分布式系統


目錄

  • 一、單機架構
  • 二、分布式架構
    • 1、應用服務與數據庫分離
    • 2、負載均衡
    • 3、數據庫讀寫分離
    • 4、引入緩存
    • 5、數據庫分庫分表
    • 6、引入微服務


一、單機架構

單機架構,只有一臺服務器,這個服務器負責所有工作。

在這里插入圖片描述

絕大多數公司的產品,都是這種單機架構。現在計算機硬件發展迅速,哪怕只有一臺服務器,但是這臺服務器性能很好,可以支持非常高的并發,非常大的數據存儲。單機架構足以支撐。

二、分布式架構

一臺主機的硬件資源是有上限的,包括不限于:CPU、內存、硬盤、網絡…等等。服務器每次收到一個請求,都是需要消耗上述的一些資源的。如果同一時刻,處理的請求多了就可能會導致某個硬件資源不夠用了。無論是那個方面不夠用了,都可能會導致服務器處理請求的時間變得很長,甚至于處理出錯。而一臺主機上面能增加的硬件資源是有限的,取決于主板的拓展能力。如果一臺主機拓展到了極限還是不夠,就只能引入多臺主機了。一旦引入了多臺主機,系統就可以稱作為“分布式系統”。引入分布式,一定是萬不得已。

1、應用服務與數據庫分離

在這里插入圖片描述

針對不同的服務配備不同的服務器,例如應用服務器里面可能會包含很多的業務邏輯,會占用大量的CPU資源。而數據庫服務器,則需要更大的硬盤空間,更快的數據訪問速度,可以配備更大的硬盤服務器。

2、負載均衡

假設在上述情況下,應用服務器還是沒有抗住,就需要再引入更多的應用服務器來解決上述問題。

在這里插入圖片描述

用戶的請求,會先到達負載均衡器/網關服務器。假設現在有1w個用戶請求,有2個應用服務器,此時按照負載均衡的方式,就可以讓每個應用服務器承擔5k的訪問量。負載均衡器對于請求量的承擔能力,是遠遠超過應用服務器的。負載均衡器是分配工作,不需要執行任務。

3、數據庫讀寫分離

增加應用服務器,確實能夠處理更高的請求量。但是隨之存儲服務器要承擔的請求量也更多了。

在這里插入圖片描述

實際應用場景種,讀的頻率是遠高于寫的頻率。主服務器一般是一個,從服務器要有很多個(一主多從)。從節點的數據,要從主節點這同步過來,以主節點為主。

4、引入緩存

數據庫天然就有個問題,那就是響應速度慢。我們可以把數據區分為“冷熱”數據,熱點數據放到緩存中,緩存的訪問速度往往比數據庫快很多。

在這里插入圖片描述

緩存服務器中會存放一些小部分的熱點數據,熱點數據是會被頻繁訪問到的數據。這里的緩存服務器,就可以用Redis,從數據庫存儲的仍然是全量數據。這時候,緩存服務器就幫數據庫服務器緩解了壓力。

5、數據庫分庫分表

引入分布式系統,不光要能夠去應對更高的請求量(并發量),同時也要能應對更大的數據量。一臺主句存不下,就需要多臺主機來存儲。針對數據庫進行進一步的拆分,分庫分表。引入多個數據庫服務器,每個數據庫服務器存儲一個或者一部分的數據庫。

在這里插入圖片描述

具體如何分庫分表,要結合實際的業務場景來展開。業務至關重要,技術知識給業務提高支持。業務決定了技術。

6、引入微服務

前面的應用服務器通常都是一個服務器程序,其中包含了很多的業務邏輯,這可能導致單個服務器的代碼變得越來越復雜。為了便于代碼的維護,可以將這樣一個復雜的服務器拆分為更多、功能更單一但更小的服務器,這就是所謂的微服務。

在這里插入圖片描述

引入微服務的代價:

  1. 系統的性能會下降:拆除更多的服務,多個功能之間要更依賴網絡通信,網絡通信的速度可能會比硬盤慢。
  2. 系統復雜程度更高,可用性收到影響:服務器更多了,出問題的概率更大了。

引入微服務的優勢:

  1. 解決了人的管理問題。
  2. 使用微服務,可以更方便于功能的復用。
  3. 給不同的服務進行不同的部署。

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

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

相關文章

[論文筆記]REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

引言 今天帶來一篇經典論文REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS的閱讀筆記,論文中文意思是 在語言模型中協同推理和行動。 雖然大型語言模型(LLMs)在語言理解和互動決策任務中展現出強大的能力,但它們在推理(例如思維鏈提示)和…

Rust 中 Mutex 的用法

在 Rust 中,Mutex(互斥鎖)是用于同步并發訪問共享資源的機制。Rust 標準庫中的 Mutex 結構體位于 std::sync::Mutex 中,它提供了線程安全的數據訪問。Mutex 保證了在同一時間只有一個線程可以訪問被鎖定的數據。 以下是 Mutex 的…

畫圖工具之PlantUML插件使用

文章目錄 1 PlantUML插件1.1 引言1.2 什么是PlantUML1.3 PlantUML插件1.3.1 IntelliJ IDEA中插件1.3.2 VS Code中插件1.3.3 使用例子 1.4 PlantUML時序圖語法1.4.1 聲明參與者1.4.2 消息傳遞1.4.2.1 同步消息1.4.2.2 異步消息1.4.2.3 返回消息1.4.2.4 自調用 1.4.3 生命線&…

比特米盒2代刷入ARMBIAN

概述 因為最近在整家庭NAS,類似魔百盒之類的機頂盒無法內置硬盤,所以將目光盯上了比特米盒、私家云以及和逸云,海鮮市場一番對比下來也就比特米盒(CM2-B)的性價比最高,而且還支持雙盤位,所以采…

【大模型】fineturn Q-wen

github上下載qwen1_5源碼 修改finetun.sh 然后在路徑qwen1_5/examples/sft下修改finetun.sh, 內容如下 #!/bin/bash export CUDA_DEVICE_MAX_CONNECTIONS1 DIRpwd# Guide: # This script supports distributed training on multi-gpu workers (as well as single-worker trai…

批處理--將指定磁盤根目錄所有隱藏的文件(包括文件夾)去除隱藏屬性

如下是實現的腳本:-------------------------------------------------- :loopcd / set /p driverName"請輸入驅動器盤符(例如:C或c):"%driverName%: dir /AH %driverName%: pausefor /f "delims"…

Leetcode刷題2

文章目錄 前言尋找兩個正序數組的中位數1?? 雙指針快速排序2?? 第k小數解法 Z 字形變換1?? 個人解法2??巧妙解法13??巧妙解法2 字符串轉換整數 (atoi)1?? 常規方法2?? 作弊方法😫 整數轉羅馬數字1?? 常規方法:按照給定規則寫出判斷條件即…

前端面試題日常練-day32 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備,答案在文末。 1. 在jQuery中,以下哪個選項用于獲取元素的文本內容? a) text() b) html() c) val() d) attr() 2. jQuery中,以下哪個選項用于在元素上添加一個自定義數據屬性…

感動心靈的聲音——帶情緒的AI配音技術在影視和廣告領域的應用

近年來,隨著人工智能技術的飛速發展,帶情緒的AI配音技術作為其中一項重要應用,正逐漸在影視和廣告行業展現其獨特的魅力和應用價值。傳統的配音工作不僅需要具備優秀的嗓音和表演能力,還要求配音演員能夠準確捕捉并表達角色的情感…

WSL調用docker

WSL(windows subsystem linux)是window系統的原生linux子系統,用于代碼開發很方便。 希望在wsl里面運行docker,首先要安裝docker在WSL中使用,大部分人的第一想法肯定是用以下命令行安裝(個人不推薦&#x…

java的unsafe

在Java中,sun.misc.Unsafe 是一個強大且危險的類,它提供了一些直接操作內存、對象和線程的底層功能。這個類通常不鼓勵普通開發者使用,因為它繞過了Java語言的一些安全性和內存管理機制,可能會導致難以追蹤的錯誤和安全漏洞。 Un…

前端生成二維碼

直接img標簽顯示 npm i use_qrcode npm包地址 <img :src"qrcode" alt"QR Code" /> const txt: any ref(https://baidu.com) const qrcode useQRCode(txt) const qrcodeLogo useQRCode(txt, { logoSrc: https://www.antdv.com/assets/logo.1ef800…

2.go環境配置與開發工具選擇

go 環境配置 下載安裝包 官網(https://go.dev/dl/) 下載地址(國內)(https://golang.google.cn/dl/) 根據自己的操作系統選擇下載即可 下載后安裝 記住地址 比如&#xff1a; D:\work\devtool\go 配置系統環境變量 PATH 指向 go 的安裝 bin 目錄 比如&#xff1a; D:\work…

若依前端vue實現 輸入框下拉選擇加搜索用戶

探索代碼以及詳細的注解 <template><div><el-select v-model"selectedUserId" filterable placeholder"選擇用戶" change"handleChange"><el-optionv-for"user in filteredUsers":key"user.userId":l…

集合框框框地架

這一次來介紹一下常用的集合&#xff1a; 首先是兩種集合的《家庭系譜圖》&#xff1a; 接下來介紹一下集合的種類&#xff1a; Collection Set SetTreeSet&#xff1a;基于紅?樹實現&#xff0c;?持有序性操作&#xff0c;例如&#xff1a;根據?個范圍查找元素的操作。但…

如何使用純原生的ADO.NET技術進行數據讀取

目錄 1. 引用命名空間 2. 創建連接字符串 3. 打開數據庫連接 4. 執行SQL查詢 5. 讀取結果集 6. 處理異常和關閉連接 1. 引用命名空間 在代碼文件中引用幾個關鍵的System.Data.SqlClient命名空間&#xff0c;這些命名空間包含了用于數據庫操作的類。 using System.Data.Sq…

Unity實現TableView

基于Scrollview封裝的TableView&#xff0c;實現對視野外的Cell回收利用&#xff0c;減少創建Cell的開銷。 核心邏輯如下&#xff1a; /***************************************動態使用cell核心邏輯開始 **************************************///計算所有cell的坐標信息 …

利用java8 的 CompletableFuture 優化 Flink 程序,性能提升 50%

你好&#xff0c;我是 shengjk1&#xff0c;多年大廠經驗&#xff0c;努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注&#xff01;你會有如下收益&#xff1a; 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么&#xff0c;評論或者私信告訴我&#xff01; 文章目錄 一…

flume sink 簡介及官方用例

1、HDFS Sink 此sink將事件寫入 Hadoop 分布式文件系統 &#xff08;HDFS&#xff09; 中。它目前支持創建文本和序列文件。它支持兩種文件類型的壓縮。可以根據經過的時間或數據大小或事件數定期滾動文件&#xff08;關閉當前文件并創建一個新文件&#xff09;。它還按事件起…

AI圖書推薦:用100個ChatGPT提示詞掌握Python編程

《用100個ChatGPT提示詞掌握Python編程》&#xff08;ChatGPT:Your Python Coach Mastering the Essentials in 100 Prompts&#xff09; 塞爾吉奧羅哈斯-加萊亞諾&#xff08;Sergio Rojas-Galeano&#xff09;是一位熱情的計算機科學家&#xff0c;對人工智能、機器學習、進化…