主頁 > 軟體設計 > 單體架構,集群架構,SOA架構,分布式微服務架構

單體架構,集群架構,SOA架構,分布式微服務架構

2021-10-28 07:38:03 軟體設計

演變程序

一. 單體應用架構

為什么要用單體架構?

單體架構的特點就是:所有的業務功能都在一個專案里面 邏輯也簡單 還不貴 適合于小型專案,

在以前計算機才剛剛普及的時候,那個時候基本上都是單體專案架構,因為簡單還實用,那個年代能上網的才有多少人無非都是家里有錢的或者是體制內的上個班以前是喝杯茶看看報紙現在是喝杯茶看看電腦,所以能夠真正上的了網的人很少,那么用單體應用架構完全夠了

那么單體架構又是什么呢?

一個典型的單體應用就是將所有的業務處理功能都放在一個工程中,最終經過編譯、打包,部署在一臺服務器上,

通俗點講就是你整個專案都運行在一個web應用服務器上,然后這整個web應用服務器又運行在一個服務器上

在這里插入圖片描述
但是隨著時代的發展計算機的普及 越來越多的人有了可以上網的權力 這個時候 單體架構的弊端出來了
舉個栗子:

某企鵝 在它剛創建的那時候基本上是沒什么人用的大概頂多500應該,后面隨著越來越多人有電腦,在加上我們某馬哥堅持不懈的陪用戶聊天
某企鵝的使用用戶也越來越多了起來,但也隨之帶來的就是單體架構的弊端

用戶越來越多,訪問量越來越大,也就是CPU運行記憶體打滿,服務器回應緩慢,帶寬被用盡,一開始我們是采取的更新服務器硬體配置 和提升帶寬

帶寬是什么?
寬帶是一種相對的描述方式,頻帶的范圍愈大,也就是帶寬愈高時,能夠發送的資料也相對增加,譬如說在無線電通信上,頻率范圍比較窄的帶寬只能發送摩爾斯電碼,發送高質量的音樂就需要較大的帶寬,
比如說你這個服務器最大能接受的帶寬是多少 然后如果訪問量大于你這個臨界點就會404 或者 ○加載中

這個時候我們是怎么解決的呢?
垂直擴容 更新服務器配置和提升帶寬,
好解決完了老板非常開心給獎勵你5000獎金,然后你開開心心的拿著獎金開始摸魚了
但這只是能緩解我們的燃眉之急…
因為當時的服務器硬體配置也就那樣,就算你把服務器升到頂配也還是會有一個天花板 萬一你的訪問量到了天花板呢?超過了服務器所能承受的訪問量呢 假如1000萬人訪問會怎么樣怎么辦…

水平擴容(集群架構)

分流,將很多服務器集中起來一起進行同一種服務,在客戶端看來就像是只有一個服務器,主要是分散壓力,

相當于同一個工程代碼拷貝多份部署到多臺服務器,每臺服務器單獨獨立部署運行,

他是怎么解決我們的前面兩個問題的呢?

設定多臺服務器多臺服務器都擁有自己獨立的ip地址,那這肯定很麻煩如果是按照記ip地址才能訪問的話你肯定要記很多0.0.0.0 — 255.255.255.255
所以我們提供了一個東西叫 ”域名“ ,域名代理了所有服務器的IP地址,提供一個統一的訪問地址給外界進行訪問

但這個時候又有了一個問題所有的用戶都訪問我這一個域名 那我怎么進行分配呢?

負載均衡

負載均衡(Load
Balance)是分布式系統架構設計中必須考慮的因素之一,它通常是指,將請求/資料【均勻】分攤到多個操作單元上執行,負載均衡的關鍵在于【均勻】,

硬負載均衡又分為硬體負載均衡和軟體負載均衡

硬體負載均衡是靠負載均衡器來實作的

負載均衡設備:將用戶訪問的請求,根據負載均衡演算法,分發到集群中的一臺處理服務器,(一種把網路請求分散到一個服務器集群中的可用服務器上去的設備)

軟體負載均衡是靠軟體來的

指在服務器的作業系統上,安裝軟體,來實作負載均衡,如Nginx負載均衡,它的優點是基于特定環境、配置簡單、使用靈活、成本低廉,可以滿足大部分的負載均衡需求,
軟體負載均衡器有:Lvs ,Nginx,Haproxy

在這里插入圖片描述
好解決完了老板非常開心給獎勵你1萬獎金,然后你開開心心的拿著獎金又開始摸魚了

但這個時候又有一個問題出來了假如我有一個億的用戶呢?
難不成還用這思想去解決問題?
那假如我一個億的用戶,市面上好的服務器我們來大概一下一臺好的服務器咱們就算他200萬好吧,一臺好的可以解決五百萬的用戶量,算算多少錢
這應該有幾個小目標了吧,這你 這錢都進老板兜里了難不成還讓他掏出來這他肯定是不愿意的吶對吧,
老板說 這你要搞不好你就可以走人了,怎么辦咱也沒辦法為了不被炒魷魚咱只能想辦法唄

SOA架構

什么是SOA架構這東西每個人的理解都不一樣但是每個人的理解都差不多比較抽象
我的理解來說就是
把一個專案按照功能來拆分成對多個獨立的專案,
在根據使用頻繁的業務服務來對其進行集群架構
這里支付用戶訪問量比其他的多的多所以我們就可以使用集群架構
在這里插入圖片描述
但是你把每個實際業務都區分成獨立的專案時候,但各個業務總會有那么一些互動的區域 比如說你 用戶要看他這個用戶的訂單是不是用戶管理就和訂單管理互動起來了,
這些互動的區域相互呼叫非常凌亂,這個時候前輩開發了EJB EJB里面實踐了業務總線這個概念,這個經驗是非常寶貴的他幫助我們把這些互動的區域統一起來了,在EJB1版本到2版本的時候也可以算是不成功的但也又是成功的,不成功是因為性能不好業務總線太過笨重,好是他提供了寶貴的實際經驗,
好了這個時候你解決了集群架構的缺點 老板又又給你獎勵了你又又可以開開心心摸魚了

過了幾天由于業務總線太過于笨重有時候效率和不弄SOA差不多 老板又來找你了
你又開始了你那苦逼的生活…

分布式微服務架構

為了解決前面提到的業務總線過于笨重的問題,分布式微服務架構去掉了業務總線去掉了中心化,

分布式微服務架構也是當前行內開發軟體的思想,指標對現階段互聯網背景下所需要的架構

在這里插入圖片描述
而且相比于前面而言

微服務是真正的分布式的、去中心化的,把所有的“思考”邏輯包括路由、訊息決議等放在服務內部,去掉一個大一統的 ESB,服務間輕通信,是比SOA更徹底的拆分,
分布式微服務架構強調的重點是業務系統需要徹底的組件化和服務化,原有的單個業務系統會拆分為多個可以獨立開發,設計,運行和運維資料的小應用,這些小應用之間通過服務完成互動和集成,

可以分為六個組件

  1. 業務接入層:

(請求的分發):服務間路由和調度網關

  1. 業務服務層:

各個功能模塊服務 比如:支付,用戶,訂單

  1. 服務注冊中心:

提供服務的注冊和發現以及編排和管理的功能,維護一個可用分的服務串列,當你在服務層上線了一個服務后必須要先在服務注冊中心注冊一下 和我們簽到是一個意思 至于為什么后面會講 我在這里就不多說了

  1. RPC:

(遠程工程的呼叫):每個獨立的服務專案之間的呼叫

  1. 配置中心:

將配置的引數統一管理的場所

  1. 訊息中間介:

記錄用戶發起的請求,各個服務可以通過定時任務或者自由訪問訊息中間介中的請求,

服務器雪崩:
服務器雪崩是一個很嚴重的問題,是怎么來的呢?

由于你支付管理的這個服務器,天災人禍了 總而言之就是掛掉了沒了訪問不了,怎么辦你這個支付管掛掉了,那么需要請求支付管理來進行資料互動的時候就請求不到,假如是訂單管理購買個東西肯定有訂單 對吧肯定要支付但是你支付這個時候掛掉了怎么辦?
請求肯定是請求不到了,就和幾個月之前的b站一樣的結果
而然你這個時候還有可能重繪一下 沒有雪中送炭還來了一波補刀 你每重繪一次就多了一個請求在加上不可能就你一個訪問不到而是所有人都訪問不到那么請求就會越來越多越來越多 到最后訂單管理也撐不住了請求堆積太多了 超過了他所能接受的范圍 所以他也掛掉了,然后蝴蝶效應他后面的噼里啪啦也全部掛掉了 爽不爽起不起飛

那么有問題肯定就有解決的辦法,俗話說得好只要思想不滑坡,方法總比困難多 那么到底怎么解決呢?

三大劍客

  1. 熔斷

當他發現了某個服務器掛掉的時候就把他的電路斷開,不要讓他可以繼續訪問,也不讓正常的流程去訪問這個掛掉的服務

  1. 降級

找一個替代品 可以是支付管理的備份,也可以是其他正常的服務

  1. 限流

字面意思 主要是限制訪問數量 輔助前面兩個 來給服務器雪崩提供解決時間

分布式微服務框架

在這里插入圖片描述

CAP理論是什么?為什么想實作可維護串列需要CAP

而也因為分布式微服務架構 是一個真正的分布式架構專案里的功能模塊都是獨立開來的包括資料也是獨立的,這就會造成什么結果資料不同步,假如我
用戶管理修改了年齡但由于我其他的功能模塊是獨立的資料所以就不同步這就是一個很嚴重的問題那么…

咱們就要用到CAP理論了

  • C 資料一致性:

分為強資料一致性和最終資料一致性,強資料一致性就是當你在某個服務中修改了資料 那么其他服務就必須將資料同步(資料同步時會造成短暫的不可訪問狀態),最終一致性 字面意思 就是最終提交的資料我要他是資料同步
不管你前面改了啥 反正我最后提交的時候要資料同步提交

  • A 可用性

提供業務訪問的可用時間,就是你服務是不是可用一直開著可用一直訪問
一般都是999 99999 這樣子 一個禮拜停那么一兩個小時或者一個月停那么一兩個小時 可以率99%

  • P 磁區容錯率(必須滿足)

會容忍某個服務不可用 但是不影響整體服務器的運行

可以看出來 可用性和資料一致性 是互斥的 因為你想要資料一致性就必須要停一會服務 讓他資料同步 這樣就會降低可用性 所以我們一般都是在這兩個選擇一個 然后在選上一個必選的磁區容錯率
對于新手而已 Spring Cloud 他的服務注冊中心是用的Eureka 而Eureka 所選擇的是AP 也就是先可用性和磁區容錯率

我只是把我知道的總結出來當做筆記防止以后不記得了可以看看所以歡迎各位大哥指點小弟哪里寫的不好
有時間會持續更新…

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339103.html

標籤:其他

上一篇:nginx簡介

下一篇:Docker+nginx部署SpringBoot+vue前后端分離專案

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more