摘要:以集群部署的方式提供服務,確保高可用。無狀態服務,一樣可以通過負載均衡加心跳檢測等手段去部署集群,確保故障轉移來做到高可用。初步原理的一致性可用性分區容錯性。高可用開發流程服務發布通過切流量的方式一臺臺灰度發布。用于預發布驗證。
架構和架構師,可以說是大部分技術人的目標或追求吧。 但架構類比于內功或修為,它不是一門武功,不能學一招走天下。 同一個架構方案在不同公司甚至不同團隊都不一定能適用,所以更多是經驗和思考。 因此,一直覺得應該寫下來,不定期的更新和總結,亦或分理論學習篇和實戰篇來寫都好。 剛好最近在讀基本架構書籍,所以就從讀書筆記開始,點滴記錄好了。 此篇筆記主要來自于,《大型網站技術架構》。1、高可用的定義
什么是高可用?百科的解釋是:通常來描述一個系統經過專門的設計,從而減少停工時間,而保持其服務的高度可用性。一般會用可用時間占比來度量,如99.9%、99.99%,甚至99.999%等。講完了什么是高可用后,作者從典型的“應用、服務、數據”三層架構,分別展開來講不通層次的架構。
2、高可用應用作者把應用層的特點歸為高可用、業務層等。分有狀態和無狀態兩種。
無狀態的服務:這種相對來講比較之間,基本都可以橫向擴容,通過Nginx、Haproxy等負載均衡代理層來進行流量轉發和失效轉移即可。以集群部署的方式提供服務,確保高可用。
有狀態的服務:書里舉例是Session的狀態以及如何管理Session的狀態,但除了應用層的session,實戰中還有很多服務也可能被設計為有狀態的。例如:某個服務每個實例負責處理不通的號碼段,A服務處理id:1-10000號的用戶,B服務處理id:10001-20000...。
回到書里,關于Session管理的手段:
seesion復制:僅適用于小型網站。缺點是集群規模一旦稍微大點,大量的session通信會占用不少資源。
session綁定:利用負載均衡的hash算法,使同一用戶請求落到同一臺機器上。缺點很明顯一旦出現某臺機器宕機,該機器上用戶的session信息都會丟失。
利用cookies來記錄session:來回傳;簡單但大小受限。不過,還是許多網站采用了這種方案。
session服務:利用如分布式緩存等技術服務開發搭建session服務。集中化管理,特別是實現SSO單點登錄的場景。
作者將通過提供Rpc調用的基礎服務歸為此類,實際上我覺得跟應用層差別不大。
無狀態服務,一樣可以通過負載均衡加心跳檢測等手段去部署集群,確保故障轉移來做到高可用。
這一節主要的幾點筆記:
分級管理:有點水,講的是核心服務分配更好的硬件以及隔離部署。其實實戰中,核心服務或大型活動都應該隔離部署,這樣可以避免故障引起連鎖反應。比如同一臺機器混布,cpu等資源被其他服務占滿。同理,機房帶寬等資源也有類似的可能。
超時設置:繼續水。講應用層調用服務層應該設置超時,避免服務層掛了請求還在那長時間占用資源。其實實戰中不管怎么分層,也不管是同層還是跨層調用,只要發起一個Rpc調用都應該有超時機制。
異步調用:主要講運用消息隊列將非強依賴的邏輯異步化,如注冊過程的發郵件或歡迎短信等操作,可以優先保證核心流程,至于發送郵件等可以丟個消息隊列異步執行即可。其實,異步化在實戰中很常用,但我個人覺得跟高可用沒啥直接相關,更多是業務解耦。
服務降級:分拒絕服務和關閉服務。拒絕服務又分按優先級拒絕或隨機拒絕,實戰中隨機較容易,只要設置好服務的閾值,達到閾值的時候丟棄請求即可。而關閉服務,則比較果斷,比如秒殺的時候關閉評論、追評或者確認收貨;又比如大型直播結束后,關閉一些原本日常會進行的相關興趣推薦等。
冪等性設計:請求可多次提交或叫做可重放,服務能保證最終結果正確性。有些修改是天然的冪等性:資料設置。反之,加減金額、獎勵發放等就不是天然冪等的,這類服務就小心對待這個問題。實戰中常見手段是,利用一些流水號等方式,目的其實都是校驗唯一性。
作者對數據層的介紹就是CAP、數據備份和失效轉移。
CAP:初步CAP原理的Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性)。以及說大型網站一般保證AP,然后在某種程度上放棄C(一致性);然后再將數據一致性分為:數據強一致、數據用戶一致和數據最終一致。并提到數據不一致通常出現在系統高并發寫操作或集群狀態不穩(故障恢復或集群擴容)的情況。
我個人覺得實戰中,大多數時候采用的方案就是保證最終一致。除了上面提到的集群狀態不穩定外,獎勵、訂單等涉及多個分布式服務時都可能出現不一致,因此糾錯、對賬、補償都是很常用的手段。
數據備份:定時冷備、異步熱備、同步熱備。
失效轉移:失效確認、訪問轉移、最后再數據恢復后當好備胎。
服務發布:通過切流量的方式一臺臺灰度發布。
自動化測試:推薦Web的自動化測試工具ThoughtWorks。
預發布環境:搭建一套與現網一致,甚至與現網打通,但只能配置host內部訪問的環境。用于預發布驗證。
代碼控制:主干發布、分支開發的模式。還是推薦Git。
自動化發布:這個感覺有點難。。
灰度發布:按Set灰度、按機器灰度、按號碼段灰度,還可以做A/B Test。
開源性能監控工具:Ganglia
監控數據采集:1、用戶行為采集 2、服務&服務器性能操作采集 3、定期數據報告
監控管理:1、系統告警 2、失效轉移 3、自動降級
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11896.html
摘要:云函數,就是模式的具體實現。比如一個廣告微服務,至少可以拆分出實時競價展示計數報表查詢等云函數。也就是說,云函數和微服務中的是同一粒度的。但不同于,每個云函數都是獨立部署,按需執行??梢杂眠m合用,需要衡量改造的代價云函數帶來的收益。 可訪問誰明浪子心-ShiYis Blog,獲得更好的閱讀體驗。 什么是云函數 云函數提供了一種直接在云上運行,無狀態的、短暫的、由事件觸發的代碼的能力。 ...
摘要:每個服務由多個進程組成,為首的進程名為。服務使用字節長的內部事務標識符,即時發生重疊后仍然繼續使用,這會導致問題,所以需要定期進行操作。操作被認為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時候可以重建索引。 簡介和認知 發音 post-gres-q-l 服務(server) 一個操作系統中可以啟動多個postgres服務。每個服務由多個進程組成,為首的進程名為p...
閱讀 1270·2021-11-15 18:14
閱讀 3125·2021-08-25 09:38
閱讀 2663·2019-08-30 10:55
閱讀 2672·2019-08-29 16:39
閱讀 1304·2019-08-29 15:07
閱讀 2445·2019-08-29 14:14
閱讀 810·2019-08-29 12:36
閱讀 909·2019-08-29 11:21