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