<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57811|
      • 收錄網站:279872|

      IT精英團

      高可用性架構設計的無狀態服務

      高可用性架構設計的無狀態服務

      瀏覽次數:
      評論次數:
      編輯: 溫瑜
      信息來源: ITPUB
      更新日期: 2022-05-19 21:44:36
      摘要

      笑談架構設計事故的發生是量的積累的結果,任何事情都沒有表面看起來那么簡單,在軟件運行的過程中,隨著用戶量的增加,不考慮高可用,遲早有一天會發生故障,不得事先考慮高可用設計,而高可用是一門龐大的學問。在

      • 正文開始
      • 相關閱讀
      • 推薦作品

      笑談架構設計

      事故是量的積累的結果,任何事情都沒有看起來那么簡單。在軟件運行的過程中,隨著用戶的增加,高可用是不會考慮的,遲早會出現故障,所以高可用設計不應該提前考慮,高可用是一門龐大的學問。

      設計高可用性系統時需要考慮什么?

      de-bgcolor-16517468130357="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16517468130357="#fff|rgb(255, 255, 255)" data-style="padding-bottom: 15px; max-width: 100%; min-height: 1em; font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif; letter-spacing: 0.544px; white-space: normal; background-color: rgb(255, 255, 255); line-height: 30px; box-sizing: border-box !important; overflow-wrap: break-word !important;" mp-original-font-size="17" mp-original-line-height="30">在架構設計的過程中,考慮方案選型會帶來哪些坑,最差的情況下需要考慮故障發生的緊急解決方案;需要監控系統,在故障發生時、發生時有所感知;需要自動化恢復方案,自動化提前處理預警方案;在代碼層面需要考慮處理速度、代碼性能、報錯處理;還要考慮把故障降低到最?。悍战导?、限流、熔斷等等。

      這篇文章主要介紹無狀態服務在架構層面,如何保證高可用。

      無狀態服務:在任何時候服務都不存儲數據(除緩存),可以任意銷毀創建,用戶數據不會發生丟失,可以任意切換到任何一個副本,不影響用戶”無狀態服務的高可用在任何情況下數據都不丟失,服務都不發生故障,在某些服務發生故障時保證影響最小,并可以快速恢復。

      可以從這幾個方面考慮:

      冗余部署:至少多部署一個節點,避免單點問題

      垂直擴展:增加單機性能

      水平擴展:流量激增可快速擴容


      冗余部署

      在單點架構中,隨著數據數據量增加,單點負載壓力過大,容易產生服務崩潰不可用的情形,對于無狀態服務,可以考慮部署多個節點的服務來分散壓力

      對于如何調度來臨的請求,可以參考負載均衡的方式,盡可能的保證充分的利用服務器的資源

      無狀態服務:不需要存儲數據的服務,即使節點掛掉再重啟,不會發生數據丟失。

      負載均衡:把大量請求分散到不同節點上的一種算法。


      無狀態服務的負載均衡

      可以使用負載均衡中提供的四種算法

      隨機均衡算法:已知后端服務器列表,隨機請求,數據量越大越趨近于均衡

      輪詢算法:輪流請求后端服務器。


      前兩種算法存在的問題是后端服務器在負載壓力不同或服務器配置不同時,不能保證壓力小的多分配,壓力大的小分配,于是引入

      加權輪循算法:按照后端服務器的抗壓能力,負載情況分配更高的權重,更容易命中,減少宕機風險,按權重順序的分配到后端服務器上。

      加權隨機法:和加權輪訓算法一樣,不同的是分配是按權重隨機的,比如有多臺權重一致的情況,隨機訪問,那就和隨機算法有同樣的問題,數據量大時才趨近于均衡,數據量小時有可能重復訪問同一臺權重一致的機器。

      [加權]最小連接數算法:這是最智能的一種算法,根據服務器當前的連接數來選取,更容易命中處理速度快的服務器。

      上面的算法使用于無狀態應用,假如要保存通信狀態,需要使用

      源地址哈希算法:對源地址做hash,可以保證相同的請求最終都是落在同一臺機器上,不需要重復建立連接。


      負載均衡算法如何選擇?

      首先拋棄隨機算法,最簡單的配置可以使用基本的輪訓算法,它適用于服務器配置一致,比如使用虛擬機,可以動態調整服務器配置的場景,同時要保證專用虛擬機,上面不會部署其他應用的情況

      但是服務器上往往會安裝多個應用,那就要考慮在加權輪訓和最小連接數中做選擇

      加權輪訓適用于短連接場景,比如HTTP服務,在k8s中因為每個pod都是獨立的,默認service策略是非加權輪訓

      最小連接數適用于長連接,比如FTP等


      如果系統架構中考慮到無cookie功能的場景,可以用源地址hash算法,把源IP一直映射到同一臺rs上,在k8s中叫會話保持模式,每次轉發到同一個pod上

      建議:

      如果上了容器直接交給k8s來做調度,使用cookie做會話保持,算法使用默認輪訓;

      使用長連接的應用(FTP、socket,或者用于下載連接),選擇加權最小連接數;

      短連接應用(靜態網站、微服務組件等),選擇加權輪訓,用cookie來做會話保持,減少session的設計,不僅會提高代碼復雜度,也會增加服務端負載情況,不利于分布式應用。


      高并發應用的識別

      主要指標QPS每秒處理響應數,比如每天有10w的pv

      1. 公式 (100000 * 80%) / (86400*20%) = 4.62 QPS(峰值QPS) 

      公式原理:每天80%的訪問集中在20%的時間里,這20%時間叫做峰值時間。

      比如我做的系統托管了最高5w臺機器,每臺機器每次分鐘有一次PV,時間比較均勻那就是

      1. ((60*24)*50000)/(86400)=833 QPS 

      一般上百的量級就可以叫高并發了,網上查到的資料微博每天1億多pv的系統一般也就1500QPS,5000QPS峰值。

      除了QPS還有服務響應時間、并發用戶數指標可以參考

      在服務器負載高的時候,表現在處理速度變慢、網絡斷連、服務處理失敗、異常報錯等問題,具體問題要具體分析,不可一概而論

      可以通過監控,來獲得服務器性能狀態,動態調整、重試,達到服務可用性的保證,減少維護成本,通常單純服務器壓力大的時候可以考慮垂直擴展

      垂直擴展

      垂直擴展是增加服務器單機的處理能力,主要有三種方式

      服務器升配:集中在CPU、內存、swap、磁盤容量或者網卡等

      硬件性能:磁盤SSD、調整系統參數等

      架構調整:軟件層面使用異步、緩存、無鎖結構等


      增強單機性能的方式是最快最容易的方式,但是單機性能之中是存在極限,同時單機部署時如果產生故障,對應用來說打擊是致命的,我們應該保證應用時刻處于可用的狀態,也就是俗話說的保證5個9的可靠性

      水平自動伸縮

      知道了單機的局限以后,考慮使用水平伸縮的方式

      水平伸縮就是壓力增加的時候,增加新的節點來分擔壓力,但僅僅多點部署還是不夠的,對于持續增長的業務,始終有一天會突破服務的壓力上限,如果遇到流量激增的場景,人工應對肯定會措手不及,所以需要一種自動伸縮的手段

      對于私有云部署來說可以手動實現調度器,檢測系統狀態,連通iaas層實現伸縮

      也可以直接使用云服務器提供的彈性伸縮服務

      對于容器而言,可以在iaas層彈性伸縮的情況下或者有充足node節點的情況下,配置自動伸縮和調度的策略,預防單機故障

      名詞解釋:iaas 基礎設施即服務,代表對服務器、存儲、網絡等硬件資源管理的服務”注意:彈性伸縮針對的業務場景是無狀態服務

      另外無狀態機器不足以承載請求流量,需要進行水平擴展的閾值一般QPS是千級,同時在這里對數據庫也會有壓力,所以建議水平伸縮的服務器不要部署有狀態服務

      CDN和OSS

      對于一個網站來說,用戶交互頁面,是一個特殊的服務,包含很多靜態資源,比如圖片、視頻、頁面(html/css/js),這些資源在用戶請求的時候需要現場下載,下載速度決定了加載速度,在web服務故障的時候,同樣應該對用戶做出相應

      在這一層面可以考慮使用CDN內容分發網絡的方式,詳見[xxx],把前端靜態數據緩存到邊緣服務器上

      名詞解釋:邊緣服務器(邊緣節點),可以理解為和用戶交互的服務器,也可理解為靠近用戶的服務器節點,因為靠近用戶,減少了網絡傳輸使用的時間”使用了CDN的web服務,可以把https證書綁定到cdn上,在回源策略可以配置回源超時、回源跟隨301/302狀態碼等配置,還可以智能壓縮網頁、自定義錯誤頁面,非常方便

      oss是一種特殊的存儲方案,以對象的形式進行存儲,理論上可以存儲無限的文件

      考慮使用oss對象存儲并結合cdn,把媒體資源存儲在對象存儲上面,也可以把冷數據壓縮歸檔到oss上

      常見的視頻網站大多會用到oss,微博n年以前的數據應該就是歸檔到對象存儲中了。


      原文
      一行Python代碼實現并行
      ? 上一篇 2022-05-19
      大數據平臺核心架構圖解 推薦收藏!
      下一篇 ? 2022-05-19
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 國產核心板全志T507助力消防系統升級
        0閱讀 0條評論 個贊
        9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • MySQL查詢性能優化指數下推的七大武器
        0閱讀 0條評論 個贊
        前面已經講了MySQL的其他查詢性能優化方式,沒看過可以去了解一下:MySQL查詢性能優化七種武器之索引潛水MySQL查詢性能優化七種武器之鏈路追蹤今天要講的是MySQL的另一種查詢性能優化方式—索……
      • 新零售SaaS架構:商品系統架構設計
        0閱讀 0條評論 個贊
        SaaS產品就像一座冰山,冰山以上的部分是功能、數據(可見部分)、用戶界面,冰山以下是系統架構、完整的數據模型、開放體系、非功能性需求(擴展性、可維護性、性能、安全等)。短期內想要快速上線產品,可能只……
      • sql server索引I摘要
        0閱讀 0條評論 個贊
        一、存儲結構在SQLServer中,有許多不同的可用排列規則選項。二進制:按字符的數字表示形式排序(ASCII碼中,用數字32表示空格,用68表示字母"D")。因為所有內容都表示為數字,所以……
      • Velox簡介:一個開源的統一執行引擎
        0閱讀 0條評論 個贊
        ?Meta正在引入Velox,這是一個開源的統一執行引擎(unifiedexecutionengine),旨在加速數據管理系統和簡化其開發。?Velox正在積極開發中,Meta在2022……
      • SQL Server復制:事務發布
        0閱讀 0條評論 個贊
        一、背景在復制的運用場景中,事務發布是使用最為廣泛的,我遇到這樣一個場景:在Task數據庫中有Basic與Group兩個表,需要提供這兩個表的部分字段給其它程序讀取放入緩存,程序需要比較及時的獲取……
      • 金牛座入門 MVC微服務框架開發教程
        0閱讀 0條評論 個贊
        前言:對于Taurus.MVC的微服務的注冊中心而言:什么樣的應用中心,有權利注冊服務?什么樣的網關中心,有權利調取服務列表?在默認沒有進行相關配置時,只要引用Taurus.MVC的框架,都擁有該權限……
      • 拓撲嶺CEO雷鵬:創業不只是技術
        0閱讀 0條評論 個贊
        云計算的出現,加速了企業信息技術的發展。數據庫是最常用的基礎軟件之一,它通常能提供計算和存儲的能力。雖然分布式數據庫也做到了很好的擴展性,但它不能算是「云原生」?!冈圃鷶祿臁沟暮诵?,是要設計一種更……
      • 面試問題:Java序列化和反序列化
        0閱讀 0條評論 個贊
        目錄序列化和反序列化的概念應用場景?序列化實現的方式繼承Serializable接口,普通序列化繼承Externalizable接口,強制自定義序列化serialVersionUID的作用靜態變量不會……
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 全志A40i核心板全國產化 照亮動力設備國產化之路
        1閱讀 0條評論 個贊
        國產化三個字近幾年來在電力行業內很火,新的設備、新的項目都開始有國產化的趨勢,要求自主可控,然而很多人只是泛泛地去看待“國產化”這三個字而沒有去深究它的重要性。自主可控有多重要?今天,我們就來認真地聊……
      • Javascript的異步循環打印主題
        0閱讀 0條評論 個贊
        這道題,我相信很多前端從業者都知道,它本質上來說并不復雜,但是卻可以有很深遠的擴展,最終核心的主題其實就是異步的執行,其中對于題目的解法,還涉及到一些作用域的知識。那么我們以最簡版的題目入手,逐步深入……
      • 圖解架構| SaaS、PaaS、IaaS
        0閱讀 0條評論 個贊
        這是悟空的第164篇原創文章官網:www.passjava.cn你好,我是悟空哥。上次聊到了架構圖如何畫,其中涉及到了云服務的架構圖,里面提到了很重要的三個概念PaaS、IaaS、SaaS,很有必要……
      • 基于Flyway的數據庫版本控制實踐
        0閱讀 0條評論 個贊
        背景大家平時在開發過程中,會用Git來進行我們的代碼管理。如Git這些,使用這些版本控制系統能輕松的幫我們解決不同開發人員之間的代碼沖突處理版本回退實現軟件代碼的CI/CD等那大家考慮過么,針對數據庫……
      • springboot集成docsify實現可移植文檔
        0閱讀 0條評論 個贊
        需求分析文檔可以和項目一起進行版本管理文檔可以在線訪問文檔可以與springboot項目集成,不需要分開部署MarkDown支持文檔跟隨,打包jar也可以訪問技術選型對于網上已有的方案,大致分為如下幾……
      • 你知道信息架構圖和功能架構圖的區別嗎?
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • 網純原生實現時間單位定時任務執行,未依賴第三方組件
        0閱讀 0條評論 個贊
        常用的定時任務組件有Quartz.Net和Hangfire兩種,這兩種是使用人數比較多的定時任務組件,個人以前也是使用的Hangfire,慢慢的發現自己想要的其實只是一個能夠根據Cron……
      • 深入了解春季交易:介紹 使用 原則
        8閱讀 0條評論 個贊
        大家好,我是樹哥。Spring事務是復雜一致性業務必備的知識點,掌握好Spring事務可以讓我們寫出更好地代碼。這篇文章我們將介紹Spring事務的誕生背景,從而讓我們可以更清晰地了解Sp……
      • Python系列入門(四)別傻了 別糊涂了:鏈表、元組、字典、集合的區別
        0閱讀 0條評論 個贊
        總結分析列表、元組、字典、集合的相同與區別之處,只有徹底分清之后,就會在應用的時候,得心應手。四句話總結列表是一個有序且可更改的集合,允許重復成員。元組是一個有序且不可更改的集合,允許重復成員。集合是……
      • sql server系統表的詳細說明
        0閱讀 0條評論 個贊
        sysaltfiles主數據庫保存數據庫的文件syscharsets主數據庫字符集與排序順序sysconfigures主數據庫配置選項syscurconfigs主數據庫當前配置選項sysdatab……
      • 在一本書中閱讀所有的Hive Sql(20 000字的最完整解釋)
        0閱讀 0條評論 個贊
        HiveSql大全本文基本涵蓋了Hive日常使用的所有SQL,因為SQL太多,所以將SQL進行了如下分類:一、DDL語句(數據定義語句):對數據庫的操作:包含創建、修改數據庫對數據表的操作:分……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>