偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

高可用架構(gòu)設(shè)計之無狀態(tài)服務(wù)

開發(fā) 架構(gòu)
本文對負(fù)載均衡的6種算法做了介紹,但是沒有介紹每個算法具體的實現(xiàn)方式,這個留給你下來研究,這些方案在實際使用的時候會有一定難度,服務(wù)不可用的故障原因任何一門都是博大精深的學(xué)問,程序員不僅是寫代碼。

[[386446]]

高可用架構(gòu)設(shè)計之無狀態(tài)服務(wù)

笑談架構(gòu)設(shè)計

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

 

你想知道我在設(shè)計一個高可用系統(tǒng)會考慮哪些內(nèi)容嗎?在架構(gòu)設(shè)計的過程中

  • 考慮方案選型會帶來哪些坑,最差的情況下需要考慮故障發(fā)生的緊急解決方案
  • 需要監(jiān)控系統(tǒng),在故障發(fā)生時、發(fā)生時有所感知
  • 需要自動化恢復(fù)方案,自動化提前處理預(yù)警方案
  • 在代碼層面需要考慮處理速度、代碼性能、報錯處理
  • 還要考慮把故障降低到最?。悍?wù)降級、限流、熔斷
  • 等等

這篇文章主要介紹無狀態(tài)服務(wù)在架構(gòu)層面,如何保證可高用

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

可以從這幾個方面考慮

  • 冗余部署:至少多部署一個節(jié)點,避免單點問題
  • 垂直擴(kuò)展:增加單機(jī)性能
  • 水平擴(kuò)展:流量激增可快速擴(kuò)容

冗余部署

在單點架構(gòu)中,隨著數(shù)據(jù)數(shù)據(jù)量增加,單點負(fù)載壓力過大,容易產(chǎn)生服務(wù)崩潰不可用的情形,對于無狀態(tài)服務(wù),可以考慮部署多個節(jié)點的服務(wù)來分散壓力

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

 

  • 無狀態(tài)服務(wù):不需要存儲數(shù)據(jù)的服務(wù),即使節(jié)點掛掉再重啟,不會發(fā)生數(shù)據(jù)丟失
  • 負(fù)載均衡:把大量請求分散到不同節(jié)點上的一種算法

無狀態(tài)服務(wù)的負(fù)載均衡

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

  • 隨機(jī)均衡算法:已知后端服務(wù)器列表,隨機(jī)請求,數(shù)據(jù)量越大越趨近于均衡
  • 輪詢算法:輪流請求后端服務(wù)器

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

 

  • 加權(quán)輪循算法:按照后端服務(wù)器的抗壓能力,負(fù)載情況分配更高的權(quán)重,更容易命中,減少宕機(jī)風(fēng)險,按權(quán)重順序的分配到后端服務(wù)器上
  • 加權(quán)隨機(jī)法:和加權(quán)輪訓(xùn)算法一樣,不同的是分配是按權(quán)重隨機(jī)的,比如有多臺權(quán)重一致的情況,隨機(jī)訪問,那就和隨機(jī)算法有同樣的問題,數(shù)據(jù)量大時才趨近于均衡,數(shù)據(jù)量小時有可能重復(fù)訪問同一臺權(quán)重一致的機(jī)器
  • [加權(quán)]最小連接數(shù)算法:這是最智能的一種算法,根據(jù)服務(wù)器當(dāng)前的連接數(shù)來選取,更容易命中處理速度快的服務(wù)器

上面的算法使用于無狀態(tài)應(yīng)用,假如要保存通信狀態(tài),需要使用

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

負(fù)載均衡算法如何選擇?

首先拋棄隨機(jī)算法,最簡單的配置可以使用基本的輪訓(xùn)算法,它適用于服務(wù)器配置一致,比如使用虛擬機(jī),可以動態(tài)調(diào)整服務(wù)器配置的場景,同時要保證專用虛擬機(jī),上面不會部署其他應(yīng)用的情況

但是服務(wù)器上往往會安裝多個應(yīng)用,那就要考慮在加權(quán)輪訓(xùn)和最小連接數(shù)中做選擇

加權(quán)輪訓(xùn)適用于短連接場景,比如HTTP服務(wù),在k8s中因為每個pod都是獨立的,默認(rèn)service策略是非加權(quán)輪訓(xùn)

 

  • 最小連接數(shù)適用于長連接,比如FTP等

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

建議:

  • 如果上了容器直接交給k8s來做調(diào)度,使用cookie做會話保持,算法使用默認(rèn)輪訓(xùn),具體調(diào)度未來k8s文章里會做詳細(xì)介紹
  • 使用長連接的應(yīng)用(FTP、socket,或者用于下載連接),選擇加權(quán)最小連接數(shù)
  • 短連接應(yīng)用(靜態(tài)網(wǎng)站、微服務(wù)組件等),選擇加權(quán)輪訓(xùn),用cookie來做會話保持,減少session的設(shè)計,不僅會提高代碼復(fù)雜度,也會增加服務(wù)端負(fù)載情況,不利于分布式應(yīng)用

高并發(fā)應(yīng)用的識別

主要指標(biāo)QPS每秒處理響應(yīng)數(shù),比如每天有10w的pv

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

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

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

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

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

除了QPS還有服務(wù)響應(yīng)時間、并發(fā)用戶數(shù)指標(biāo)可以參考

在服務(wù)器負(fù)載高的時候,表現(xiàn)在處理速度變慢、網(wǎng)絡(luò)斷連、服務(wù)處理失敗、異常報錯等問題,具體問題要具體分析,不可一概而論

可以通過監(jiān)控,來獲得服務(wù)器性能狀態(tài),動態(tài)調(diào)整、重試,達(dá)到服務(wù)可用性的保證,減少維護(hù)成本,通常單純服務(wù)器壓力大的時候可以考慮垂直擴(kuò)展

垂直擴(kuò)展

垂直擴(kuò)展是增加服務(wù)器單機(jī)的處理能力,主要有三種方式

  • 服務(wù)器升配:集中在CPU、內(nèi)存、swap、磁盤容量或者網(wǎng)卡等
  • 硬件性能:磁盤SSD、調(diào)整系統(tǒng)參數(shù)等
  • 架構(gòu)調(diào)整:軟件層面使用異步、緩存、無鎖結(jié)構(gòu)等

 

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

水平自動伸縮

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

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

對于私有云部署來說可以手動實現(xiàn)調(diào)度器,檢測系統(tǒng)狀態(tài),連通iaas層實現(xiàn)伸縮

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

對于容器而言,可以在iaas層彈性伸縮的情況下或者有充足node節(jié)點的情況下,配置自動伸縮和調(diào)度的策略,預(yù)防單機(jī)故障

名詞解釋:iaas 基礎(chǔ)設(shè)施即服務(wù),代表對服務(wù)器、存儲、網(wǎng)絡(luò)等硬件資源管理的服務(wù)”注意:彈性伸縮針對的業(yè)務(wù)場景是無狀態(tài)服務(wù)

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

對于有狀態(tài)服務(wù)壓力分散在后續(xù)的文章會有所介紹

CDN和OSS

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

 

在這一層面可以考慮使用CDN內(nèi)容分發(fā)網(wǎng)絡(luò)的方式,詳見[xxx],把前端靜態(tài)數(shù)據(jù)緩存到邊緣服務(wù)器上

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

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

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

常見的視頻網(wǎng)站大多會用到oss,微博n年以前的數(shù)據(jù)應(yīng)該就是歸檔到對象存儲中了

總結(jié)

本文介紹的無狀態(tài)服務(wù)常見的高可用架構(gòu)設(shè)計,他們是

  • 冗余部署
  • 負(fù)載均衡的6種算法與算法選擇
  • 垂直擴(kuò)展的好處與弊端
  • 水平擴(kuò)展與水平自動伸縮
  • 哪些服務(wù)可以使用CDN和OSS

要注意無狀態(tài)應(yīng)用不應(yīng)該存儲session,也不存儲數(shù)據(jù)

本文對負(fù)載均衡的6種算法做了介紹,但是沒有介紹每個算法具體的實現(xiàn)方式,這個留給你下來研究,這些方案在實際使用的時候會有一定難度,服務(wù)不可用的故障原因任何一門都是博大精深的學(xué)問,程序員不僅是寫代碼

 

這里也僅僅寫了無狀態(tài)服務(wù)的部分高可用方案,不管是什么服務(wù)還是從代碼層級的設(shè)計,你還知道哪些呢?

 

有時候比較苛刻的情況下,沒有更多的服務(wù)器資源,如何在有限服務(wù)器的情況下提高更多的代碼性能呢?

本文轉(zhuǎn)載自微信公眾號「機(jī)智的程序員小熊」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系機(jī)智的程序員小熊公眾號。

 

責(zé)任編輯:武曉燕 來源: 機(jī)智的程序員小熊
相關(guān)推薦

2024-11-18 16:28:20

2017-09-13 13:42:09

微服務(wù)緩存架構(gòu)

2020-04-22 14:25:48

云開發(fā)高可用架構(gòu)

2025-03-03 04:20:00

高可用架構(gòu)冗余法則

2020-07-14 15:10:21

Redis架構(gòu)代碼

2019-06-28 09:27:20

高可用架構(gòu)支付

2020-12-09 09:21:41

微服務(wù)架構(gòu)數(shù)據(jù)

2023-02-06 09:32:17

服務(wù)接口高可用

2017-09-25 12:11:14

高可用微服務(wù)架構(gòu)

2020-07-24 08:50:17

Redis數(shù)據(jù)庫

2023-11-27 17:37:57

高性能云原生數(shù)據(jù)庫

2019-10-31 09:03:12

Java集群微服務(wù)

2016-12-19 11:33:26

2022-05-17 11:06:44

數(shù)據(jù)庫MySQL系統(tǒng)

2021-02-24 10:05:07

架構(gòu)運維技術(shù)

2017-11-27 08:50:29

架構(gòu)數(shù)據(jù)存儲

2013-05-27 10:58:28

Tumblr架構(gòu)設(shè)計雅虎收購

2019-02-12 09:34:00

微博短視頻架構(gòu)

2024-04-30 11:14:19

KubernetesReplicaSet數(shù)量

2021-04-28 08:52:22

高并發(fā)架構(gòu)設(shè)高并發(fā)系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號