分散式億級流量整體架構設計原則

来源:https://www.cnblogs.com/88223100/archive/2023/11/11/Design-principles-for-the-overall-architecture-of-distributed-billion-level-traffic.html
-Advertisement-
Play Games

架構目標 高可用性 整體系統可用性最低99.9%,目標99.99%。全年故障時間整個系統不超過500分鐘,單個系統故障不超過50分鐘。 高可擴展性 系統架構簡單清晰,應用系統間耦合低,容易水平擴展,業務功能增改方便快捷。 低成本 增加服務的重用性,提高開發效率,降低人力成本; 最終一致性 服務設計能 ...


架構目標

  1. 高可用性

整體系統可用性最低99.9%,目標99.99%。全年故障時間整個系統不超過500分鐘,單個系統故障不超過50分鐘。

  1. 高可擴展性 系統架構簡單清晰,應用系統間耦合低,容易水平擴展,業務功能增改方便快捷。

  2. 低成本 增加服務的重用性,提高開發效率,降低人力成本;

  3. 最終一致性

服務設計能滿足數據最終一致性,能方便、快捷的滿足三方、或者對方對賬需求。

  1. 質量要求

我們要求在系統設計時候要兼顧下麵的各個質量要求

圖片

架構總體原則

圖片

DID原則解釋

Design(D)設計20倍的容量;Implement(I)實施3倍的容量;Deploy(D)部署1.5倍的容量

原因:DID為產品擴展提供了經濟,有效,及時的方法

要點:在早期考慮可擴展性可以幫助團隊節省時間和金錢。在需求發生大約一個月前實施(寫代碼),在客戶蜂擁而至的幾天前部署。

例子:“什麼時候該在可擴展性上投入”有些輕率的回答是,最好在需要的前一天投入和部署。如果你能夠多做到達需要改善可擴展性方案的前一天部署,那麼 這筆投資的時機最佳,而且有助於實現公司財務和股東利益的最大化。 讓我們面對現實,及時投入和部署根本就不可能,即使可能,也無法確定具體的時間,而且會帶來很多風險。

DID(設計-實施-部署):思考問題和設計方案,為方案構建系統和編寫代碼;實際安裝或者部署方案。

設計(Design):DID方法的設計(D)階段聚集在擴展到20倍和無限大之間,通過如今可擴展性大會,把領導者和工程師團隊聚集在一起,共同討論產品的擴展瓶頸,這是在DID設計階段發現和確定需要擴展部分的一個好辦法。

實施(I,Implement):我們把規模需求的範圍縮小到更接近現實,例如當前規模的3~20倍。

部署(D,Deploy):在部署階段資產的成本較高,如果是一家適度高增長的公司,也許我們可以把最大產能提高到1.5倍;如果是一家超高增長的公司,也許我們可以把最大產能提高到5倍。擴展具有彈性,它既可以擴張也可以收縮,因此靈活性是關鍵,因為你需要響應客戶的請求,隨著規模的收縮和擴張,在系統之間調整容量

架構設計原則

  1. 業務平臺化
  • 業務平臺化,相互獨立。 如交易平臺、倉儲平臺、物流平臺、支付平臺、廣告平臺等
  • 基礎業務下沉,可復用。如用戶、商品、類目、促銷、訂單等 (參考目前核心系統)。
  1. 核心業務、非核心業務分離

核心業務與非核心業務分離,核心業務精簡(利於穩定),非核心業務多樣化。

  1. 隔離不同類型的業務
  • 交易業務是簽訂買家和賣家之間的交易合同,需要優先保證高可用性,讓用戶能快速下單
  • 對高併發要求很高的業務,應該跟普通業務隔離
  1. 區分主流程、輔流程

分清哪些是主流程。運行時,優先保證主流程的順利完成,輔流程可以採用後臺非同步的方式。避免輔流程的失敗導致主流程的回滾。

應用架構設計要點

  1. 穩定性原則
  • 一切以穩定為中心
  • 架構儘可能簡單、清晰
  • 不過度設計
  1. 解耦、拆分
  • 穩定部分與易變部分分離
  • 核心業務與非核心業務分離
  • 主業務與輔業務分離
  • 應用與數據分離
  • 服務與實現細節分離
  1. 抽象化
  • 應用抽象化:應用只依賴服務抽象,不依賴服務實現細節、位置
  • 資料庫抽象化:應用只依賴邏輯資料庫,不需要關心物理庫的位置和分片
  • 伺服器抽象化:應用虛擬化部署,不需要關心實體機配置,動態調配資源
  1. 松耦合
  • 同步調用時,需要設置超時時間、對調用異常時候的failover處理。
  • 非核心業務儘量非同步化:核心、非核心業務之間,儘量非同步解耦。
  • 跨業務線(比如分期樂、桔子、鼎盛間)調用需要採用HTTP介面方式,避免底層業務邏輯耦合和依賴。
  1. 容錯設計
  • 服務自治:服務能彼此獨立修改、部署、發佈和管理,避免一個服務發生災害引發連鎖反應(一定要對mq、rpc、db、redis的異常容錯處理、異常包括超時、業務異常、系統異常等)。
  • 集群容錯:應用系統集群,避免單點。
  • 多機房容災:多機房部署,多活。

6 數據的一致性原則

  • 小規模分佈或不分佈的業務確保可用、數據可靠、一致,即A & C兼顧;
  • 中型分佈系統需要考慮【BASE-最終一致性】,如果涉及到訂單、交易、清結算等數據敏感場景,保持數據最終一致性是最基本原則;
  • 大規模分散式系統在不涉及訂單、交易、清結算等數據敏感場景上可以考慮【有損服務】;。

架構分解原則

圖片

架構依賴原則

  1. 依賴穩定部分
  • 穩定部分不依賴易變部分
  • 易變部分可以依賴穩定部分
  • 要求:避免迴圈依賴
  1. 跨域弱依賴

跨業務域調用時,儘可能非同步弱依賴

  1. 基本服務依賴
  • 基本服務不能向上依賴流程服務
  • 組合服務、流程服務可以向下依賴基本服務
  • 條件:基本服務穩定
  1. 平臺服務依賴
  • 平臺服務不依賴上層應用
  • 上層應用可依賴平臺服務
  • 條件:平臺服務穩定
  1. 核心服務依賴
  • 核心服務不依賴非核心服務
  • 非核心服務可依賴核心服務
  • 條件:核心服務穩定

 

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Design-principles-for-the-overall-architecture-of-distributed-billion-level-traffic.html


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

-Advertisement-
Play Games
更多相關文章
  • 1、編輯距離 編輯距離:是衡量兩個字元串之間差異的度量,它表示將一個字元串轉換為另一個字元串所需的最少編輯操作次數(插入、刪除、替換)。 2、相似度 計算方法可以有多種,其中一種常見的方法是將編輯距離歸一化為0到1之間的範圍(歸一化編輯距離(Normalized Edit Distance)),將編 ...
  • 之前講了「如何配置普通的 RSA2 密鑰」,今天來捋一下如何配置證書~ 依照慣例先放一下官方文檔:[如何生成及配置公鑰證書],小伙伴們也可以直接按照文檔來~ 前期準備:證書的適用範圍 目前支付寶的所有產品都支持證書密鑰去進行調用。 其中「單筆轉賬」和「現金紅包」 只能使用 證書 進行介面調用。 詳情 ...
  • SciPy的linalg模塊是SciPy庫中的一個子模塊,它提供了許多用於線性代數運算的函數和工具,如矩陣求逆、特征值、行列式、線性方程組求解等。 相比於NumPy的linalg模塊,SciPy的linalg模塊包含更多的高級功能,並且在處理一些特定的數值計算問題時,可能會表現出更好的性能。 1. ...
  • 深入理解CAS 什麼是CAS 為什麼要學CAS:大廠你必須深入研究底層!有所突破! java層面的cas >compareAndSet compareAndSet(int expectedValue, int newValue) 期望並更新,達到期望值就更新、否則就不更新! package org. ...
  • 思想 DAO(Data Access Object)數據訪問對象,是我們在做結構化資料庫訪問的時候傳輸的對象,通過這個對象我們可以與資料庫中的表建立映射關係 DTO(Data Transfer Object)是我們在與前端進行數據交換時傳遞的對象 為什麼需要設置這這兩種對象呢? 為了數據安全 如果我 ...
  • 前言: 繼上篇:Taurus .Net Core 微服務開源框架:Admin 插件【4-3】 - 配置管理 - Mvc【Plugin-MicroService 微服務】 本篇繼續介紹下一個內容: 系統配置節點:Mvc - Plugin - CORS 跨域界面: 界面如下: 跨域功能相關配置說明如下: ...
  • 前言 由於業務需要,需要多台雲伺服器,但是公有雲的帶寬價格不菲,所以不可能給所有的雲伺服器都配上公網IP,一方面是成本的問題,另一方面也是公網安全的問題。 所以通過其它的方式使用無公網的雲伺服器來來實現對外資源的訪問。 一、操作步驟 至少需要有一臺具有公網IP的雲伺服器! 1、開啟ECS的路由轉發功 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 眾所周知,vue路由模式常見的有 history 和 hash 模式,但其實還有一種方式-abstract模式(瞭解一哈~) 別急,本文我們將重點逐步瞭解: 路由 + 幾種路由模式 + 使用場景 + 思考 + freestyle 路由概念 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...