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