日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

服务部署如何做到高可用?这份“三级跳”秘籍送给你

發布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务部署如何做到高可用?这份“三级跳”秘籍送给你 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | 勿忘我

來源 | 公眾號:“京東云”

本文從部署的角度介紹了高可用服務所需具備的規范,案例部分通過對 Yum 源服務架構的演變讓讀者更好的理解高可用服務部署。

一個高可用的服務需要從部署、變更、預案、監控、安全等多方面考慮。如何做到 99.99% 服務高可用的要求,需要各個角色的工程師共同努力。從部署的角度,本文介紹了高可用服務所需具備的規范,案例部分通過對 Yum 源服務架構的演變讓讀者更好的理解高可用服務部署,希望對大家有所幫助。enjoy:

高可用部署要求

圖 1 高可用部署 (* 注:隨著服務滿足高可用要求的增多,服務的高可用能力就越強)

一致性

這里的一致性指的是模塊依賴的方方面面,包括但不限于硬件規格和配置、操作系統、基礎軟件、系統參數,還包括模塊自身的相關信息,如配置文件、版本、上下游依賴組件等的一致性。可以通過配置管理工具(如 Puppet)進行管理和周期性維護,確保配置始終如一。列舉一些不一致的問題,如 CPU 是否開啟超線程、內存是否關閉 SWAP、操作系統版本、JDK 版本、內核各種參數、文件系統類型以及模塊的配置等等,這些均可能對服務可用性造成嚴重影響,并帶來極大的問題定位成本。

消除單點

單點有兩種場景:一種是某個模塊僅部署了一個實例;第二種是某個模塊雖然部署了多個實例,但任意實例故障都會導致服務整體或者大面積不可用。如何識別系統單點?通過排查模塊的實例數量和進行破壞性測試來發現系統中是否存在單點。對于已知的單點,則應該盡量做好預案,減少故障時長。

置放群組

要理解置放群組首先要理解故障域(Fault Domain)的概念。故障域指單個機房內由交換機或電源設備所造成故障的最大影響范圍,通常為一個或一組機架。同一模塊需要盡可能的分散部署在不同的故障域中,避免由單一故障域異常而導致模塊整體不可用。公有云下的置放群組就是為了提高業務的高可用性,在創建時將實例以某種策略強制打散,以降低底層硬件 / 軟件故障給業務帶來的影響。舉例來說,一個模塊的所有實例絕不應該部署在同一個接入交換機下,因為一旦這個接入交換機故障,就會導致該模塊整體故障,而一個機房內,有大量的接入交換機,是完全可以避免這種悲劇的。

流量隔離

流量隔離是搭建多套同質集群根據流量的屬性進行分而治之的管理。常見的隔離策略主要基于流量的來源、重要性和資源消耗進行隔離。舉例來說:

  • 基于地域分為華北、華中、華南區域的用戶;

  • 基于硬件類型分為 PC、APP 等;

  • 基于重要性分為 VIP 用戶和普通用戶;

  • 基于資源消耗分為報表請求和用戶請求。

同城雙活

同城雙活即多 AZ 部署。同城機房之間延遲很低,一般 ping 延遲在 5ms 以內。同城的 AZ 間,基于網絡,供電等的物理隔離,因此能夠避免單個機房故障導致的服務中斷。同城雙活是建立在“系統消除單點”的前提下。多 AZ 間,服務請求應該盡量在一個 AZ 中處理完畢。

N+1 冗余

服務可以根據同城機房數量進行多 AZ 部署。N+1 中的“N”指的是處理請求所需要的資源容量,“1”指的是防止機房故障所做的資源冗余。因此,N+1 中的所有機房應該具備同等的請求處理能力,從而避免某機房故障后,其余機房無法處理所需請求。N+1 會導致一定的資源冗余,合理設置 N 的數量能夠減少成本。舉例來說,2 機房的冗余度就是 50%,而 5 機房的冗余度僅為 20%。

異地多活

異地多活是保證服務高可用的高階方法。目前國內多應用在大型互聯網公司,用以防御單地域整體故障。異地多活的主要問題在于跨地域帶寬、成本問題以及跨地域延時較大。舉例來講,同城的延遲一般在 5ms 以內,而華北到華南的延遲可以達到 50ms 延遲,這還是使用專線的前提下。

?

案例:“Yum 源服務”高可用部署實踐

Yum 源服務是一種提供 Centos 系統的 Yum 倉庫的下載服務。案例以此服務為例,討論如何搭建一個高可用的 Yum 源服務。Yum 源服務最簡單的架構設計如下所示:

圖 2 簡單服務架構

此服務由一臺云主機提供,數據存儲在本地,由 Nginx 提供下載服務。以上架構服務完全可以實現 Yum 源服務的功能。但是若此架構的服務要對外提供服務會面對如下幾個問題:

  • 單機部署,服務器一旦宕機,服務就會故障;

  • 性能瓶頸,一臺機器一次處理的請求數是有上限的,服務器 IO 也會成為性能瓶頸。

我們需要對架構進行調整以達到高可用的服務架構。

高可用服務 2.0v

高可用 2.0v 目的是解決上文中的問題。

首先識別服務中是否模塊都支持多實例部署(消除單點):

  • 對于 Nginx 模塊,Nginx 是無狀態的,可以進行橫向擴容;

  • 數據存儲在本地磁盤也可以進行橫向擴展,但是此時數據一致性將是主要問題。建議使用分布式文件系統解決數據存儲一致性的問題。

服務要滿足一定的并發量的要求,Nginx 具有高并發的能力,并且支持橫向擴展。使用分布式文件系統以達到并發量和解決數據一致性的要求。

我們使用 Puppet 對服務器進行配置管理,保證服務器的配置一致(一致性)。每臺服務器都要求不在同一個故障域中(置放群組)。高可用的服務架構如下:

圖 3 高可用部署架構 2.0v

高可用服務 3.0v

3.0v 的高可用部署考慮同城雙活的場景。我們選擇華北兩個 AZ 進行高可用服務的部署。架構圖如下圖所示。兩個 AZ 部署同配置的服務,通過云解析將流量分配到兩個 AZ 中,達到故障切換和負載均衡。

圖 4 高可用部署架構 3.0v

高可用服務 4.0v

再考慮異地多活的架構,上文提到異地多活難點是數據同步。對于此服務來說,其對數據一致性并不是強依賴,短時間的數據不一致可以接受。基于地域對流量進行隔離,從而實現分而治之的目的(流量隔離)。我們選擇在華南兩個機房部署一套和華北機器配置一樣的服務。

服務架構如下:

圖 5 高可用部署 4.0V

?

寫在最后

以上僅僅是高可用部署的一次簡單實踐。實際情況下,服務的模塊幾十到幾百個都有,服務的復雜性與高可用是反比例關系。而且,隨著服務的高可用部署特征越多,也會增加服務的復雜度,若做不好故障切換和預案建設,可能還會降低服務的可用性指標。另一方面,服務的高可用部署與成本也有密切關系,跨機房、跨地域服務部署無論在資源成本和技術能力都會產品帶來挑戰。所以說高可用部署需要做到的是與服務復雜度和成本之間的權衡,達到滿足服務當前和未來一段時間內需求的目標。

總結

以上是生活随笔為你收集整理的服务部署如何做到高可用?这份“三级跳”秘籍送给你的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。