版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 面向業(yè)務(wù)的立體化高可用架構(gòu)設(shè)計(jì)摘要:為了實(shí)現(xiàn)阿里九游游戲接入系統(tǒng)的業(yè)務(wù)高可用,技術(shù)人員跳出傳統(tǒng)的面向系統(tǒng)的高可用的思路,轉(zhuǎn)而從業(yè)務(wù)的角度來(lái)整體考慮高可用,最終實(shí)現(xiàn)了一套立體化的高可用架構(gòu),本文逐一展示這套立體化高可用架構(gòu)的一些具體實(shí)踐。通常情況下我們?cè)谡務(wù)摳呖捎眉軜?gòu)設(shè)計(jì)的時(shí)候,主要關(guān)注的是系統(tǒng)結(jié)構(gòu)的高可用,例如主備架構(gòu)、集群架構(gòu)、多中心架構(gòu)。我們做架構(gòu)設(shè)計(jì)的時(shí)候,也主要是從系統(tǒng)結(jié)構(gòu)本身出發(fā),例如我們把單機(jī)改為雙機(jī)、雙機(jī)改為集群、單機(jī)房改為異地多機(jī)房等等。這種以系統(tǒng)結(jié)構(gòu)為目標(biāo)的高可用架構(gòu)設(shè)計(jì),更多的是從技術(shù)角度出發(fā),但其實(shí)我們都知道,無(wú)論技術(shù)多先進(jìn),架構(gòu)多強(qiáng)大,都不可能保證100%不出問(wèn)題的。
2、藍(lán)翔的挖掘機(jī)一鏟子下去,支付寶就要故障2小時(shí);程序員的誤操作,攜程12小時(shí)不能提供業(yè)務(wù);某個(gè)黑客1000臺(tái)肉雞攻過(guò)來(lái),網(wǎng)站可能就拒絕服務(wù)了因此,真正做到高可用,不能單純從系統(tǒng)結(jié)構(gòu)的角度出發(fā)來(lái)考慮問(wèn)題,不能局限于某個(gè)系統(tǒng)的高可用,而應(yīng)該從業(yè)務(wù)的角度出發(fā),全方位的來(lái)考慮高可用的架構(gòu)設(shè)計(jì)。前者我稱之為“面向系統(tǒng)的高可用架構(gòu)”,后者我稱之為“面向業(yè)務(wù)的高可用架構(gòu)”。阿里九游游戲接入系統(tǒng)(以下簡(jiǎn)稱“游戲接入系統(tǒng)”)負(fù)責(zé)所有九游平臺(tái)游戲的接入(包括用戶的登錄、注冊(cè)、支付等業(yè)務(wù),也包括游戲開(kāi)發(fā)商(以下簡(jiǎn)稱“CP”)用戶驗(yàn)證、支付等業(yè)務(wù)),對(duì)可用性的要求非常高,一旦故障,大量用戶就不能愉快的玩游戲,投訴就會(huì)滿
3、天飛,論壇就被報(bào)障的帖子刷爆了,因?yàn)閷?duì)于很多用戶來(lái)說(shuō),不上微信可能問(wèn)題不大,但要是幾小時(shí)不能玩游戲,那就要爆粗口了。如何保證游戲接入系統(tǒng)的高可用,讓用戶能夠愉快的玩游戲,成為了我們的一個(gè)巨大的挑戰(zhàn)。為了實(shí)現(xiàn)游戲接入業(yè)務(wù)的高可用,我們跳出傳統(tǒng)的面向系統(tǒng)的高可用的思路,轉(zhuǎn)而從業(yè)務(wù)的角度來(lái)整體考慮高可用,最終實(shí)現(xiàn)了一套“立體化的高可用架構(gòu)”。接下來(lái)我將逐一展示這套立體化高可用架構(gòu)的一些具體實(shí)踐。一、面向業(yè)務(wù)的高可用目標(biāo)業(yè)界高可用的通用指標(biāo)是幾個(gè)9,例如5個(gè)9代表一年業(yè)務(wù)不可用的時(shí)間是5分鐘,4個(gè)9代表一年業(yè)務(wù)的不可用時(shí)間是50分鐘。我們最初也是使用這個(gè)指標(biāo)來(lái)作為我們高可用的目標(biāo),但是在實(shí)際的操作和討
4、論過(guò)程中,發(fā)現(xiàn)這幾個(gè)指標(biāo)雖然簡(jiǎn)單,但是并不能直觀的理解,而且對(duì)于我們分析問(wèn)題和設(shè)計(jì)方案沒(méi)有很強(qiáng)的指導(dǎo)意義,因此我們決定找更加容易理解和操作的目標(biāo)。但說(shuō)起來(lái)容易做起來(lái)難,高可用本身就是一個(gè)主觀色彩比較強(qiáng)的概念,不同的人理解都不一致,要確定一個(gè)更加容易理解和操作、大家又能達(dá)成一致意見(jiàn)的目標(biāo),竟然成了我們首要面對(duì)的難題。我們先后討論了多次,前后使用了“提高可用性”、“具備XX能力”、“解決存在的可用性問(wèn)題”等多個(gè)目標(biāo),但這些目標(biāo)最后都被否決了,主要原因就是我們的BOSS認(rèn)為這些都 沒(méi)法量化,沒(méi)法評(píng)估,不能認(rèn)為做了事情就一定能夠達(dá)到目標(biāo)。當(dāng)時(shí)研發(fā)團(tuán)隊(duì)和BOSS還有一點(diǎn)小分歧:研發(fā)團(tuán)隊(duì)認(rèn)為除了幾個(gè)9外,
5、高可用沒(méi)法量化;而B(niǎo)OSS認(rèn)為一切都可以量化,只是我們還沒(méi)找到方法。不得已,團(tuán)隊(duì)又繼續(xù)頭腦風(fēng)暴,功夫不負(fù)有心人,終于在一次討論中想出了一個(gè)可量化可衡量的高可用目標(biāo): 3分鐘定位問(wèn)題、5分鐘恢復(fù)業(yè)務(wù)、平均最多2個(gè)月發(fā)生一次問(wèn)題 ,這樣計(jì)算下來(lái)一年不可用的時(shí)間大約就是50分鐘,正好契合4個(gè)9的業(yè)界通用的可用性目標(biāo)。在后來(lái)的項(xiàng)目執(zhí)行過(guò)程中,我們發(fā)現(xiàn)這個(gè)目標(biāo)真的是非常有用,非常具有指導(dǎo)意義,具體表現(xiàn)為:目標(biāo)聚焦于業(yè)務(wù),而不是聚焦于技術(shù),確保最終效果不會(huì)走偏將目標(biāo)自頂向下分解,很容易就得出要做的事情了設(shè)計(jì)和討論方案時(shí),目標(biāo)就是一根準(zhǔn)繩,是否可行,拿這個(gè)目標(biāo)一衡量就很清晰了后來(lái)的項(xiàng)目總結(jié)時(shí),我們都認(rèn)為這個(gè)
6、目標(biāo)是項(xiàng)目成功的第一關(guān)鍵。二、立體化的高可用架構(gòu)設(shè)計(jì)將我們的高可用目標(biāo)分解一下,其實(shí)有3個(gè)子目標(biāo):1. 盡量避免發(fā)生問(wèn)題不出問(wèn)題當(dāng)然是高可用的首要目標(biāo)了,不然的話天天出問(wèn)題,處理再快也沒(méi)意義。2. 快速定位問(wèn)題出了問(wèn)題要能夠快速發(fā)現(xiàn)和定位,不要報(bào)警或者用戶投訴過(guò)來(lái)后還要花半天才能定位問(wèn)題,在問(wèn)題發(fā)生后盡快定位初步的原因所在,盡快處理問(wèn)題,防止問(wèn)題惡化。3. 快速恢復(fù)業(yè)務(wù)特別注意這里我們強(qiáng)調(diào)的是“恢復(fù)業(yè)務(wù)”,而不是“解決問(wèn)題”。很多人在處理生產(chǎn)問(wèn)題或者故障的時(shí)候有一個(gè)誤區(qū):那就是一定要找到問(wèn)題根因,然后解決。實(shí)際上大部分的時(shí)候這樣做都很難的,也很耗費(fèi)時(shí)間。比如說(shuō)某個(gè)機(jī)器響應(yīng)很慢,可能的原因有:機(jī)
7、器磁盤有問(wèn)題、機(jī)器的CPU被耗光了、這臺(tái)機(jī)器上的程序陷入死循環(huán)、jvm垃圾回收時(shí)間較長(zhǎng)要在短短幾分鐘內(nèi)排查這么多可能的原因是很難的,但我們不知道真正的原因也可以恢復(fù)業(yè)務(wù),比如說(shuō)最簡(jiǎn)單的是直接把這臺(tái)機(jī)器立刻下線,讓流量分配到其它的機(jī)器。當(dāng)我們審視這3個(gè)目標(biāo)的時(shí)候,就會(huì)發(fā)現(xiàn)沒(méi)有哪個(gè)系統(tǒng)的架構(gòu)能夠獨(dú)立的滿足這目標(biāo),必須從業(yè)務(wù)的角度全方位、立體化的來(lái)分析和設(shè)計(jì)高可用方案。結(jié)合我們的業(yè)務(wù),最終的架構(gòu)實(shí)現(xiàn)方案如圖1所示。通過(guò)這個(gè)圖我們可以看到,這個(gè)架構(gòu)設(shè)計(jì)方案并不是傳統(tǒng)意義上的軟件架構(gòu),而是一個(gè)高可用的業(yè)務(wù)架構(gòu),真正和傳統(tǒng)系統(tǒng)架構(gòu)相關(guān)的就只有“異地多活”,其它的功能或者系統(tǒng)并不屬于狹義上的架構(gòu)設(shè)計(jì)范疇,但
8、這些功能和系統(tǒng)組合起來(lái),共同保障了業(yè)務(wù)的整體高可用。三、客戶端重試 + HTTP-DNS當(dāng)我們的業(yè)務(wù)發(fā)生問(wèn)題的時(shí)候,用戶側(cè)肯定是感知最快的,如果能夠在用戶側(cè)感知并立刻處理,問(wèn)題的影響將大大降低。用戶側(cè)最簡(jiǎn)單的處理問(wèn)題就是重試,當(dāng)遇到某些錯(cuò)誤的時(shí)候用戶側(cè)再重試一次,錯(cuò)誤可以是通用的錯(cuò)誤,例如HTTP 404/500,也可以是業(yè)務(wù)上的錯(cuò)誤碼,只需要客戶端和服務(wù)端預(yù)先約定即可。用戶側(cè)重試是處理問(wèn)題速度是最快的,但一個(gè)最大的問(wèn)題就是DNS的不可靠性。簡(jiǎn)單來(lái)說(shuō),如果通過(guò)DNS拿到了錯(cuò)誤的主機(jī)地址,即使重試也一樣同樣是錯(cuò)誤的。導(dǎo)致DNS錯(cuò)誤的原因主要有如下幾種:1. 用戶側(cè)DNS被劫持,hosts被篡改如
9、下是我們的域名在用戶機(jī)器上被篡改的實(shí)例,可以看到我們的域名被篡改成了。2. 緩存DNS服務(wù)器污染,返回客戶端錯(cuò)誤IP2014年1月21日下午3點(diǎn),國(guó)內(nèi)頂級(jí)域的根服務(wù)器出現(xiàn)異常,許多知名網(wǎng)站的域名均被劫持到一個(gè)錯(cuò)誤的IP地址上,至少有2/3的國(guó)內(nèi)網(wǎng)站受到影響,用戶無(wú)法正常訪問(wèn)。根服務(wù)器恢復(fù)后,由于DNS緩存問(wèn)題,部分地區(qū)用戶“斷網(wǎng)”現(xiàn)象仍持續(xù)了幾個(gè)小時(shí)。3. DNS緩存時(shí)間較長(zhǎng),短則10分鐘,長(zhǎng)則幾小時(shí)DNS的解析機(jī)制為了提升效率,在很多地方會(huì)有緩存,例如本機(jī)的緩存,DNS服務(wù)器上的緩存。緩存帶來(lái)了效率上的提升,但同時(shí)卻給故障處理帶來(lái)了不小的麻煩,即:當(dāng)我們將故障的機(jī)器下線或者將DNS指向的主機(jī)
10、地址修改以后,用戶并不能立刻感知新的主機(jī)地址,在緩存有效期內(nèi)還是會(huì)繼續(xù)訪問(wèn)舊的主機(jī)。DNS的這幾個(gè)問(wèn)題雖然我們都很清楚,但是也無(wú)能為力,因?yàn)槲覀儾荒芸刂艱NS的設(shè)備,也不能修改DNS的實(shí)現(xiàn)機(jī)制。要想解決這個(gè)問(wèn)題,只能另想辦法,我們的解決方案就是HTTP-DNS。故名思議,HTTP-DNS就是通過(guò)HTTP的方式來(lái)自己實(shí)現(xiàn)一套DNS的功能,簡(jiǎn)單來(lái)說(shuō)就是客戶端通過(guò)HTTP接口來(lái)獲取指定域名對(duì)應(yīng)的主機(jī)地址,而不再通過(guò)傳統(tǒng)的DNS設(shè)備來(lái)獲取主機(jī)地址。相比傳統(tǒng)DNS,HTTP-DNS具備如下優(yōu)勢(shì):1. 自己實(shí)現(xiàn),控制力度強(qiáng),可以根據(jù)業(yè)務(wù)特點(diǎn)靈活實(shí)現(xiàn)可以根據(jù)業(yè)務(wù)進(jìn)行細(xì)粒度的調(diào)度,例如發(fā)現(xiàn)A業(yè)務(wù)某個(gè)集群請(qǐng)求量
11、較多,可以動(dòng)態(tài)的將請(qǐng)求分配到其它集群。2. 更新快,故障處理及時(shí)當(dāng)更新域名對(duì)應(yīng)的主機(jī)信息后,客戶端能夠立刻拿到最新的信息。例如下線一臺(tái)機(jī)器后,客戶端再來(lái)獲取主機(jī)地址就不會(huì)獲取已經(jīng)下線的機(jī)器地址,能夠?qū)崿F(xiàn)秒級(jí)的故障處理速度。當(dāng)然,HTTP-DNS的這些優(yōu)勢(shì)是在特定場(chǎng)景下才能體現(xiàn)的,并不能完全取代傳統(tǒng)的DNS。因?yàn)槿绻看卧L問(wèn)都先通過(guò)HTTP-DNS拿取主機(jī)地址的話,效率和性能都太低,對(duì)于手機(jī)類智能設(shè)備還會(huì)導(dǎo)致耗電和流量增加。因此我們需要結(jié)合傳統(tǒng)DNS和HTTP-DNS的優(yōu)勢(shì),既要保證大部分情況下的性能和效率,也要保證異常情況下的故障快速處理。具體的做法為:正常情況下我們通過(guò)傳統(tǒng)DNS完成業(yè)務(wù)請(qǐng)求
12、,異常重試的時(shí)候通過(guò)HTTP-DNS完成請(qǐng)求。如圖3所示簡(jiǎn)要的說(shuō)明了整體流程。四、功能分離 + 功能降級(jí)我們的高可用目標(biāo)中,首要的目標(biāo)就是“盡量避免發(fā)生問(wèn)題”,但對(duì)于如何避免發(fā)生問(wèn)題,剛開(kāi)始的時(shí)候團(tuán)隊(duì)并沒(méi)有明確的方向,有的同學(xué)從項(xiàng)目管理角度提出“結(jié)對(duì)編程”、“上線評(píng)審”等流程保障機(jī)制;也有同學(xué)從測(cè)試角度提出“加強(qiáng)測(cè)試力度”、“自動(dòng)化測(cè)試”等測(cè)試手段;我們甚至還想到了“提升人員水平”這些人力資源措施但這些措施都強(qiáng)依賴于人的因素,而人的因素往往是最不可控的,相比之下,我們認(rèn)為通過(guò)技術(shù)的手段是更可控的,所以制定了“技術(shù)驅(qū)動(dòng)”的整體策略。通過(guò)對(duì)系統(tǒng)業(yè)務(wù)的仔細(xì)分析,以及對(duì)過(guò)往線上故障的問(wèn)題的分析,我們制
13、定了“功能分離 + 功能降級(jí)”的方案,具體解釋如下;1. 功能分離:劃分核心功能和非核心功能,將核心功能和非核心功能物理隔離這里有兩個(gè)關(guān)鍵點(diǎn):首先要區(qū)分核心功能和非核心功能。例如我們的游戲接入業(yè)務(wù)中,登錄、注冊(cè)、校驗(yàn)是核心功能,消息推送、日志上報(bào)等是非核心功能。核心功能是用戶玩游戲必須的,核心功能一旦有問(wèn)題,玩家就不能玩游戲了;而非核心功能即使有問(wèn)題,暫時(shí)也不會(huì)立刻影響玩家玩游戲,而往往非核心功能的變動(dòng)反而比較頻繁。因此,優(yōu)先保證核心功能正常,是我們首要的目標(biāo)。其次是物理隔離。包括數(shù)據(jù)庫(kù)、服務(wù)器、緩存等都要隔離,因?yàn)橹灰诵墓δ芎头呛诵墓δ艽嬖诠蚕淼馁Y源,就有可能因?yàn)榉呛诵墓δ苡绊懞诵墓δ?。舉
14、個(gè)最簡(jiǎn)單的例子,如果數(shù)據(jù)庫(kù)共用一套,那么非核心功能如果出現(xiàn)了大量的整表查詢,核心功能同樣受到影響。整體的架構(gòu)示意見(jiàn)圖4。2. 功能降級(jí):當(dāng)出現(xiàn)故障的時(shí)候,可以將非核心功能直接降級(jí),保護(hù)核心功能不受影響拆分為核心功能和非核心功能后,雖然物理上兩者隔離了,但有的業(yè)務(wù)還是需要核心功能和非核心功能配合才能完成,這就存在了一定的風(fēng)險(xiǎn)。比如說(shuō)消息下發(fā)(非核心功能)需要獲取用戶的信息(核心功能),如果大量消息下發(fā)的話,就會(huì)給核心業(yè)務(wù)系統(tǒng)產(chǎn)生較大的壓力。這種情況下我們可以通過(guò)將非核心功能停掉,以保證核心功能不受影響。將某個(gè)功能停掉的傳統(tǒng)方式就是打patch,但做過(guò)的同學(xué)都知道,這樣做的效率太低了:研發(fā)改代碼、
15、測(cè)試驗(yàn)證、運(yùn)維部署,一路走下來(lái),至少1小時(shí)以上,還容易出錯(cuò),而且事后還要打另外一個(gè)patch恢復(fù)功能。為了實(shí)現(xiàn)“5分鐘恢復(fù)業(yè)務(wù)”的目標(biāo),我們開(kāi)發(fā)了一個(gè)后臺(tái)管理程序,當(dāng)需要停用某個(gè)功能的時(shí)候,只需要在后臺(tái)上點(diǎn)擊一個(gè)按鈕就能夠完成,花費(fèi)時(shí)間只需要幾秒鐘。五、異地多活通常我們講系統(tǒng)架構(gòu)的時(shí)候,異地多活往往都是最吸引人的,因?yàn)楫惖囟嗷羁雌饋?lái)很美好,一個(gè)機(jī)房故障,其它機(jī)房能夠完全接管業(yè)務(wù),故障處理簡(jiǎn)單快速。但異地多活往往實(shí)現(xiàn)都是很復(fù)雜的,其復(fù)雜性不是體現(xiàn)在業(yè)務(wù)處理層面,而是體現(xiàn)在數(shù)據(jù)處理層面。簡(jiǎn)單來(lái)說(shuō):異地多活需要保證數(shù)據(jù)的一致性和實(shí)時(shí)性,但異地機(jī)房間的距離天然決定了了數(shù)據(jù)的一致性和實(shí)時(shí)性是無(wú)法保證的。
16、目前業(yè)界常見(jiàn)的異地多活方案總體上可以分為兩種:1. 跨城多機(jī)房在不同的城市搭建多個(gè)機(jī)房,機(jī)房間通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)復(fù)制(例如MySQL主備復(fù)制),但由于跨城網(wǎng)絡(luò)時(shí)延的問(wèn)題,業(yè)務(wù)上需要做一定的妥協(xié)和兼容,不需要數(shù)據(jù)的實(shí)時(shí)強(qiáng)一致性,保證最終一致性。例如微博類產(chǎn)品,B用戶關(guān)注了A用戶,A用戶在北京機(jī)房發(fā)布了一條微博,B在廣州機(jī)房不需要立刻看到A用戶發(fā)的微博,等10分鐘看到也可以。這種方式實(shí)現(xiàn)簡(jiǎn)單,但和業(yè)務(wù)有很強(qiáng)的相關(guān)性,例如微博可以這樣做,支付寶就不能這樣做。2. 同城多機(jī)房同一個(gè)城市多個(gè)機(jī)房,距離不會(huì)太遠(yuǎn),可以投入重金,搭建私有的高速網(wǎng)絡(luò),基本上能夠做到和同機(jī)房一樣的效果。這種方式對(duì)業(yè)務(wù)影響很小,但投
17、入較大,如果不是土豪公司,一般是承受不起的;而且遇到極端的地震、2013年汕頭水災(zāi)這樣自然災(zāi)害,同城多機(jī)房也是有很大風(fēng)險(xiǎn)的。我們暫時(shí)還不是土豪,所以同城多機(jī)房就沒(méi)法用了。同時(shí),游戲接入數(shù)據(jù)還要求實(shí)時(shí)強(qiáng)一致性,例如A用戶在北京機(jī)房注冊(cè)成功了,然后到廣州機(jī)房登錄游戲,要求能夠立刻登錄,不可能讓用戶等10分鐘才能登錄,所以跨城多機(jī)房也不能用了。怎么辦?方案似乎陷入了僵局。我們轉(zhuǎn)向了第三種方式:由業(yè)務(wù)層來(lái)控制數(shù)據(jù)的強(qiáng)一致性和最終一致性,而不是由數(shù)據(jù)層來(lái)控制數(shù)據(jù)強(qiáng)一致性和最終一致性。具體來(lái)說(shuō)就是3個(gè)手段:1. 異步分發(fā)一個(gè)機(jī)房生成的數(shù)據(jù),會(huì)通過(guò)程序異步分發(fā)到其它機(jī)房,機(jī)房間沒(méi)有底層的數(shù)據(jù)復(fù)制通道,不存在
18、主數(shù)據(jù)庫(kù)和備數(shù)據(jù)庫(kù)的概念,也就沒(méi)有主機(jī)房和備機(jī)房的概念,每個(gè)機(jī)房都不依賴其它機(jī)房就可以獨(dú)立提供服務(wù)。通過(guò)這種異步分發(fā)的方式,可以保證數(shù)據(jù)的最終一致性。當(dāng)其中一個(gè)機(jī)房宕機(jī)時(shí),除了宕機(jī)時(shí)刻還沒(méi)有分發(fā)的數(shù)據(jù)外,其它數(shù)據(jù)在其它機(jī)房都已經(jīng)有了,其它機(jī)房可以接管宕機(jī)的機(jī)房的業(yè)務(wù)。與傳統(tǒng)的MySQL復(fù)制相比,業(yè)務(wù)層數(shù)據(jù)分發(fā)可以更加靈活,我們可以根據(jù)業(yè)務(wù)來(lái)選擇真正需要分發(fā)的數(shù)據(jù),或者在分發(fā)前做一些預(yù)處理操作。業(yè)務(wù)層分發(fā)性能也可以做到比MySQL更高,因?yàn)槲覀兛梢圆l(fā)的進(jìn)行分發(fā)。2. 二次讀取異步分發(fā)只能保證數(shù)據(jù)的最終一致性,不能保證數(shù)據(jù)的實(shí)時(shí)一致性,因此我們?cè)O(shè)計(jì)了業(yè)務(wù)層二次讀取的機(jī)制。即:A機(jī)房讀取不到用戶的
19、數(shù)據(jù),則到B機(jī)房或者C機(jī)房去讀取。注意這里的跨機(jī)房讀取操作都是通過(guò)接口,而不是通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)完成的。通過(guò)二次讀取的方式,可以保證數(shù)據(jù)的實(shí)時(shí)一致性。3. 重復(fù)生成數(shù)據(jù)對(duì)于全局唯一且又保證必須一致的數(shù)據(jù),我們不是依賴數(shù)據(jù)庫(kù)的自增id,或者zookeeper的全局id之類的機(jī)制,而是通過(guò)算法生成,這樣保證不管在哪個(gè)機(jī)房都可以生成相同的數(shù)據(jù)。當(dāng)其中一個(gè)機(jī)房宕機(jī)時(shí),如果數(shù)據(jù)還沒(méi)有分發(fā)到其它機(jī)房,此時(shí)雖然需要用戶重新操作一次,但由于生成了相同的數(shù)據(jù),業(yè)務(wù)上不會(huì)產(chǎn)生問(wèn)題,用戶能夠繼續(xù)正常使用業(yè)務(wù)。而對(duì)于那些業(yè)務(wù)上可以重復(fù)生成的數(shù)據(jù),例如session、ticket類數(shù)據(jù),處理就更加簡(jiǎn)單了,不同機(jī)房間都不需要
20、同步此類數(shù)據(jù),如果沒(méi)有,直接二次生成即可。雖然要求用戶多登錄一次會(huì)帶來(lái)體驗(yàn)上的不友好,但我們的核心目標(biāo)是不影響用戶玩游戲,相比我們的核心目標(biāo)來(lái)說(shuō),這點(diǎn)影響微不足道。在我們最開(kāi)始設(shè)計(jì)這套架構(gòu)的時(shí)候,有的同學(xué)憂慮地說(shuō)“這也叫架構(gòu)啊,看起來(lái)好像一點(diǎn)都不高大上哦”,但最后實(shí)現(xiàn)的效果大大超出了我們的意料。通過(guò)上述三種手段,我們實(shí)現(xiàn)了即使一個(gè)機(jī)房完全宕機(jī),另外一個(gè)機(jī)房也可以接管全部業(yè)務(wù)的目標(biāo)。自從有了這套異地多活的架構(gòu),運(yùn)維做機(jī)房切換非常簡(jiǎn)單和輕松,有時(shí)候?yàn)榱蓑?yàn)證系統(tǒng)抗壓能力,我們?cè)谡5臅r(shí)候也將某個(gè)機(jī)房的業(yè)務(wù)全部切換到另外一個(gè)機(jī)房,甚至運(yùn)維同學(xué)可以開(kāi)玩笑的說(shuō)“沒(méi)事做的時(shí)候切換一下玩玩也可以”!六、立體化
21、&自動(dòng)化&可視化的監(jiān)控處理過(guò)線上問(wèn)題的朋友可能都有這樣的經(jīng)歷:客戶投訴現(xiàn)在業(yè)務(wù)有問(wèn)題,于是研發(fā)測(cè)試運(yùn)維開(kāi)始投入定位和分析問(wèn)題,一場(chǎng)忙碌但又混亂的活動(dòng)開(kāi)始了。A研發(fā)去查日志,但是線上機(jī)器好多,一臺(tái)一臺(tái)的看,1小時(shí)過(guò)去了;如果想把日志下載下來(lái),一下幾個(gè)G的文件,網(wǎng)速又慢,只能干等B研發(fā)同學(xué)覺(jué)得數(shù)據(jù)庫(kù)可能有問(wèn)題,但是自己又不能直接操作數(shù)據(jù)庫(kù),只能找DBA,但是DBA不在線啊,趕緊打電話,DBA說(shuō)我正好休假呢C運(yùn)維同學(xué)更頭大,一邊要應(yīng)付研發(fā)和測(cè)試的各種問(wèn)題,一邊還要自己查機(jī)器CPU、內(nèi)存、io、網(wǎng)絡(luò)、程序狀態(tài),而且還那么多機(jī)器。這樣的做法肯定達(dá)不到“3分鐘定位問(wèn)題”的要求,怎么辦呢?我們的運(yùn)維大神給出
22、了“立體化、自動(dòng)化、可視化監(jiān)控”的方向:在故障發(fā)生的時(shí)候,定位問(wèn)題的所需要的各種信息都已經(jīng)準(zhǔn)備好了,不需要再到各種各樣的系統(tǒng)中去執(zhí)行各種各樣的命令了;而且這些信息都必須是可視化的,能夠一目了然的看出問(wèn)題所在。具體實(shí)現(xiàn)如下:1. 立體化立體化就是將故障分析和定位時(shí)涉及的所有的相關(guān)信息都要監(jiān)控起來(lái),共分為5層,具體各層和含義如下:業(yè)務(wù)層收集和分析業(yè)務(wù)層的訪問(wèn)量、成功率等指標(biāo)。例如當(dāng)系統(tǒng)被刷的時(shí)候,業(yè)務(wù)層能夠一目了然的看出訪問(wèn)量會(huì)增加很多應(yīng)用服務(wù)層應(yīng)用服務(wù)層指的是以URI為維度的分析,可以看到某個(gè)URI的訪問(wèn)量、HTTP響應(yīng)碼分布、HTTP響應(yīng)時(shí)間等指標(biāo)。應(yīng)用服務(wù)層與業(yè)務(wù)層并不是一 一對(duì)應(yīng)的關(guān)系,一
23、個(gè)業(yè)務(wù)可能對(duì)應(yīng)多個(gè)應(yīng)用服務(wù)層的URI,一個(gè)URI也可能對(duì)應(yīng)多個(gè)業(yè)務(wù)層的業(yè)務(wù)。接口調(diào)用層接口調(diào)用層指的是系統(tǒng)依賴的外部系統(tǒng)接口,收集的信息包括訪問(wèn)情況,包括時(shí)延、錯(cuò)誤碼、次數(shù)等,當(dāng)外部系統(tǒng)故障導(dǎo)致我們的業(yè)務(wù)故障時(shí),通過(guò)接口調(diào)用層就能夠快速的定位具體問(wèn)題?;A(chǔ)組件層基礎(chǔ)組件層指系統(tǒng)依賴的底層組件,例如容器、數(shù)據(jù)庫(kù)、緩存、消息隊(duì)列。不同的組件收集的信息不一樣,例如數(shù)據(jù)庫(kù)MySQL的監(jiān)控指標(biāo)包括連接數(shù)、請(qǐng)求數(shù)、查詢行數(shù)、更新行數(shù)等,而緩存memcached包括使用率、踢出率、命中率等?;A(chǔ)設(shè)施層基礎(chǔ)設(shè)施層指操作系統(tǒng)狀態(tài)、網(wǎng)絡(luò)狀態(tài),收集的信息包括cpu使用率、內(nèi)存使用率、網(wǎng)卡流量、連接數(shù)等。2. 自動(dòng)化自動(dòng)化的含義就是不要再由人工
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玩具主題項(xiàng)目課程設(shè)計(jì)
- 綜合認(rèn)知早教課程設(shè)計(jì)
- 2025年度城市基礎(chǔ)設(shè)施建設(shè)設(shè)備搬運(yùn)合同3篇
- 2025年度地下管網(wǎng)安裝與檢測(cè)服務(wù)合同2篇
- 二零二五年度公租房建設(shè)項(xiàng)目合同終止與解除合同3篇
- 2025年度酒店管理SaaS系統(tǒng)服務(wù)合同模板2篇
- 算力網(wǎng)絡(luò)培訓(xùn)課程設(shè)計(jì)
- 2024木材購(gòu)銷合同范文
- 未來(lái)書(shū)房課程設(shè)計(jì)
- 小記者培訓(xùn)課程設(shè)計(jì)
- 眼鏡學(xué)智慧樹(shù)知到答案2024年溫州醫(yī)科大學(xué)
- 教師課堂提問(wèn)的有效性觀察量表
- 手寫數(shù)字識(shí)別
- 中醫(yī)臨床路徑眼科
- 甲狀腺細(xì)針穿刺細(xì)胞學(xué)檢查
- 一年級(jí)上數(shù)學(xué)教案解決問(wèn)題復(fù)習(xí)課_人教版
- 行進(jìn)間單手低手上籃教案
- 簡(jiǎn)約中國(guó)風(fēng)蘭花信紙背景模板
- 安利培訓(xùn)體系介紹
- 推薦-挖掘機(jī)檢驗(yàn)報(bào)告精品
- 排洪溝工程設(shè)計(jì)說(shuō)明
評(píng)論
0/150
提交評(píng)論