分散式架構的演進

来源:https://www.cnblogs.com/yumingxing/archive/2018/08/21/9511948.html
-Advertisement-
Play Games

一、什麼是分散式系統 分散式系統是建立在網路之上的系統。分散式系統背後是由一系列的電腦組成的,但用戶感知不到背後的邏輯,就像訪問單個電腦一樣。 特征: 最開始一臺伺服器上存儲著文件,數據,應用程式。隨著流量的增多,瓶頸出現,應用程式需要更快CPU,資料庫伺服器要更大記憶體(緩存)和硬碟,文件伺服器 ...


一、什麼是分散式系統

分散式系統是建立在網路之上的系統。分散式系統背後是由一系列的電腦組成的,但用戶感知不到背後的邏輯,就像訪問單個電腦一樣。

特征:

  1. 最開始一臺伺服器上存儲著文件,數據,應用程式。隨著流量的增多,瓶頸出現,應用程式需要更快CPU,資料庫伺服器要更大記憶體(緩存)和硬碟,文件伺服器要更大硬碟,便將三個功能分離到各自伺服器。

  2. 為了提高速度,將常用數據放到緩存中,緩存又分本地緩存和分散式緩存。

  3. 緩解伺服器壓力,採用集群,並通過負載均衡伺服器調度不同的應用伺服器。

  4. 除了緩存外仍有大量數據直接訪問資料庫伺服器,這時便採用讀寫分離。

  5. 使用CDN,反向代理加速網站響應,CDN可從距離自己最近的網路提供商機房獲取數據,如果反響代理中緩存著用戶請求的資源則直接返回給用戶。

  6. 分散式資料庫,是資料庫拆分的最後手段,按照不同業務拆分

  7. 業務越來越複雜採用分散式服務,傳統的SOA架構。

 

二、分散式架構的演進

1. 單體應用-All in one

特征:應用程式、資料庫、文件等所有的資源都在一臺伺服器上。

缺陷:發現隨著系統訪問量的再度增加,webserver機器的壓力在高峰期會上升到比較高,這個時候開始考慮增加一臺webserver。

 

 2. 應用服務和數據服務分離

特征:應用程式、資料庫、文件分別部署在獨立的資源上。

 

 

3. 使用緩存改善性能

特征:資料庫中訪問較集中的一小部分數據存儲在緩存伺服器中,減少資料庫的訪問次數,降低資料庫的訪問壓力。

 

 4. 使用應用伺服器集群

特征:通過Nginx的反向代理,通過負載均衡的調度,可以在一定程度上解決伺服器處理能力的瓶頸;

負載均衡的策略有:

   輪詢:每一次來自網路的請求輪流分配給內部中的伺服器,從1至N然後重新開始。此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。實現簡單,但存在伺服器的處理能力不同的情況;

   權重:根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。

例如:伺服器A的權值被設計   成1,B的權值是3,C的權值是6,則伺服器A、B、C將分別接受到10%、30%、60%的服務請求。

此種均衡演算法能確保高性能的伺服器得到更多的使用率,避免低性能的伺服器負載過重。考慮了伺服器處理能力的不足;

 

5. 資料庫讀寫分離

特征:資料庫讀寫分離。

6. 反向代理CDN加速

特征:採用CDN和反向代理加快系統的訪問速度。

7. 分散式文件系統和分散式資料庫

特征:資料庫採用分散式資料庫,文件系統採用分散式文件系統,加上遠程分散式緩存。

資料庫是系統資料庫拆分的最後方法,只有在單表數據規模非常龐大的時候才使用,更常用的資料庫拆分手段是業務分庫,將不同的業務資料庫部署在不同的物理伺服器上。

 

8. 使用Nosql和搜索引擎

特征:隨著業務越來越複雜,對數據存儲和檢索的需求也越來越複雜,系統需要採用一些非關係型資料庫如NoSQL和分資料庫查詢技術如搜索引擎。

9. 業務拆分

特征:系統上按照業務進行拆分改造,應用伺服器按照業務區分進行分別部署。

為了應對日益複雜的業務場景,通常使用分而治之的手段將整個系統業務分成不同的產品線,應用之間通過超鏈接建立關係,也可以通過消息隊列進行數據分發,

當然更多的還是通過訪問同一個數據存儲系統來構成一個關聯的完整系統。

10. 分散式服務SOA

特征:公共的應用模塊被提取出來,部署在分散式伺服器上供應用伺服器調用。

 

三、分散式存在的問題及微服務的引出

(1) 當服務越來越多時,服務URL配置管理變得非常困難,F5硬體負載均衡器的單點壓力也越來越大。
(2) 當進一步發展,服務間依賴關係變得錯蹤複雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整的描述應用的架構關係。
(3) 接著,服務的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?
(4) 服務多了,溝通成本也開始上升,調某個服務失敗該找誰?服務的參數都有什麼約定? 
(5) 一個服務有多個業務消費者,如何確保服務質量?
(6) 隨著服務的不停升級,總有些意想不到的事發生,比如cache寫錯了導致記憶體溢出,故障不可避免,每次核心服務一掛,影響一大片,人心慌慌,如何控制故障的影響面?服務是否可以功能降級?或者資源劣化? 

由於服務越來越多ESB服務匯流排維護起來越來越麻煩,微服務便由此發展而來!

由於業務間的邏輯越來越複雜,我們就不把這些業務全部雜糅在一起,每個業務都分開來做,這就是微服務。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1:載入DOM在JavaScript中使用window.onload事件作為窗體載入事件(它在頁面所有數據載入完成之後才會執行)在jQuery裡面中使用 $(document).ready(function()) 作為窗體載入事件(在DOM載入完成之後就會執行)2:事件綁定 在文檔載入完成後,可以使 ...
  • 不多說,直接開始吧 // ES6之前常用寫法 for(var i = 0;i<10;i++){ /閉包寫法 (function(j){ var a = document.createElement("div"); a.innerHTML = j + " "; a.addEventListener(" ...
  • IE瀏覽器對於同一個URL只返回相同結果。因為,在預設情況下,IE會緩存ajax的請求結果。對於同一個URL地址,在緩存過期之前,只有第一次請求會真正發送到服務端。大多數情況下,我們使用ajax是希望實現局部刷新的,所以這就牽扯到一個改進的問題。 如果想每次都獲取到最新數據,我們只需保證每次傳入的U ...
  • 在微信開發中,寫過的一個簡單的音樂播放組件,記錄下。 music 音樂播放組件。 屬性 代碼 properties: { // 音樂路徑 music: { type: String, value: '', observer: function (newVal) { this._initMusic(n ...
  • this其實是一個Html 元素。 $this 只是個變數名,加$是為說明其是個jquery對象。 而$(this)是個轉換,將this表示的dom對象轉為jquery對象,這樣就可以使用jquery提供的方法操作。 先來看看JQuery中的 $() 這個符號,實際上這個符號在JQuery中相當於J ...
  • 此文是我的出版書籍[《React Native 精解與實戰》](http://rn.parryqiu.com/)連載分享,此書由機械工業出版社出版,書中詳解了 React Native 框架底層原理、React Native 組件佈局、組件與 API 的介紹與代碼實戰,以及 React Native... ...
  • Element.getBoundingClientRect()返回元素的大小及相對於視窗的位置 語法: rectObject=object.getBoundingClientRect(); 返回值是一個DOMRect對象,即DOMRect={x:scrollLeft,y:scrollY,width: ...
  • 開發環境: 安裝JDK8 安裝STS http://spring.io/tools/sts/ 安裝MySql 伺服器 https://www.mysql.com/downloads/ 客戶端 Navicat Premium 12 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...