對(duì)一個(gè)“失敗”項(xiàng)目的審視:架構(gòu)
衡量一個(gè)產(chǎn)品的成敗,往往所站的角度不同理解也就不同。站在一個(gè)開(kāi)發(fā)人員的角度來(lái)看,判斷一個(gè)產(chǎn)品是否成功,往往首先判斷這款產(chǎn)品是否滿足用戶的需求。對(duì)于有性能擴(kuò)展要求的產(chǎn)品,則還要考慮其是否具有較高的性能、是否便于后期擴(kuò)展;對(duì)于具有代碼潔癖的開(kāi)發(fā)者來(lái)說(shuō),則還要看代碼編寫(xiě)是否規(guī)范等等。
今天我們先來(lái)了解一下這款產(chǎn)品的架構(gòu)是如何設(shè)計(jì)的,再說(shuō)說(shuō)它的各服務(wù)器的功能。
首先我簡(jiǎn)單說(shuō)明一下架構(gòu)中需要重點(diǎn)考慮的幾點(diǎn):
1:網(wǎng)吧斷網(wǎng)時(shí)的處理:架構(gòu)設(shè)計(jì)中要考慮到網(wǎng)吧和中心服務(wù)器斷網(wǎng)的情況,所以簡(jiǎn)單的按照MMO游戲的設(shè)計(jì)方式是不可行的(這種情況雖不常見(jiàn),但是經(jīng)常會(huì)由于網(wǎng)絡(luò)不穩(wěn)定而出現(xiàn),有時(shí)也會(huì)因?yàn)橐恍┢渌蚨鴮?dǎo)致,例如某地區(qū)曾出現(xiàn)一整年斷網(wǎng)情況),所以架構(gòu)設(shè)計(jì)時(shí)需要處理:當(dāng)網(wǎng)吧服務(wù)器和中心服務(wù)器斷開(kāi)后,網(wǎng)吧要能進(jìn)行正常的業(yè)務(wù)處理;同時(shí),當(dāng)網(wǎng)吧服務(wù)器和中心服務(wù)器重新建立連接以后,需要將網(wǎng)吧在斷線時(shí)間段內(nèi)所處理的所有數(shù)據(jù)重新的發(fā)送到中心服務(wù)器上,并進(jìn)行繼續(xù)處理。
2:網(wǎng)吧業(yè)務(wù)連續(xù)性:對(duì)于網(wǎng)吧業(yè)務(wù)來(lái)說(shuō)會(huì)存在一定的業(yè)務(wù)連續(xù)性,例如網(wǎng)吧的業(yè)務(wù)一定是先上機(jī),后下機(jī)。這種業(yè)務(wù)如果處理順序錯(cuò)亂,后果不堪設(shè)想。
3:網(wǎng)吧數(shù)據(jù)不準(zhǔn)確:由于可能出現(xiàn)網(wǎng)吧網(wǎng)管勾結(jié)外部人員修改網(wǎng)吧營(yíng)業(yè)數(shù)據(jù)的情況,因此網(wǎng)吧本地的數(shù)據(jù)不存在可信性(這里的數(shù)據(jù)指的是諸如營(yíng)業(yè)流水等數(shù)據(jù)),需要中心服務(wù)器記錄網(wǎng)吧所有的營(yíng)業(yè)情況,并以重新計(jì)算得到的數(shù)據(jù)為準(zhǔn)。
4:網(wǎng)吧數(shù)據(jù)產(chǎn)生的時(shí)段性:去過(guò)網(wǎng)吧的人都知道,網(wǎng)吧在一天之中業(yè)務(wù)數(shù)據(jù)產(chǎn)生的時(shí)間并非都是均勻的,例如在晚上10點(diǎn)以后到第二天7點(diǎn)左右(各網(wǎng)吧情況不同而定)一般是很少產(chǎn)生業(yè)務(wù)數(shù)據(jù)的,因?yàn)檫@段時(shí)間屬于通宵包機(jī)時(shí)間;而在早晨8-9點(diǎn)屬于網(wǎng)吧清場(chǎng)開(kāi)業(yè)時(shí)間,這段時(shí)間會(huì)有數(shù)據(jù)大量產(chǎn)生。同時(shí)在周末的時(shí)候網(wǎng)吧也會(huì)出現(xiàn)業(yè)務(wù)數(shù)據(jù)產(chǎn)生的高峰期?;谝陨系那闆r,架構(gòu)的設(shè)計(jì)要能處理網(wǎng)吧業(yè)務(wù)數(shù)據(jù)瞬間變高的情況。
以上4點(diǎn)是系統(tǒng)設(shè)計(jì)時(shí)所要重點(diǎn)考慮的,尤其是***點(diǎn)(是不是覺(jué)得考慮得很周到?但我要?jiǎng)⊥傅氖?,這種面面俱到的考慮其實(shí)是華麗麗的自虐。這個(gè)問(wèn)題我以后會(huì)詳說(shuō))。
我設(shè)計(jì)的架構(gòu)圖是這樣的:
在這個(gè)架構(gòu)中每個(gè)核心服務(wù)器的功能概要說(shuō)明:
1:網(wǎng)關(guān)服務(wù)器:
(1):用來(lái)接收大量的并發(fā)網(wǎng)吧服務(wù)端連接請(qǐng)求。
(2):接收網(wǎng)吧服務(wù)端的業(yè)務(wù)請(qǐng)求后,根據(jù)請(qǐng)求類(lèi)型進(jìn)行分析,并將請(qǐng)求發(fā)送給相應(yīng)的后端業(yè)務(wù)處理服務(wù)器。
(3):接收后端業(yè)務(wù)處理服務(wù)器返回的業(yè)務(wù)處理數(shù)據(jù),并將此數(shù)據(jù)轉(zhuǎn)發(fā)給相應(yīng)的網(wǎng)吧服務(wù)端。
2:帳號(hào)服務(wù)器:
(1):對(duì)網(wǎng)吧的帳號(hào)信息進(jìn)行合法性驗(yàn)證。
3:上報(bào)服務(wù)器:
(1):接收網(wǎng)吧業(yè)務(wù)中需要上報(bào)的業(yè)務(wù)(例如:用戶上機(jī)、下機(jī)、加錢(qián)、積分轉(zhuǎn)換等等)進(jìn)行業(yè)務(wù)邏輯處理。
(2):由于網(wǎng)吧業(yè)務(wù)存在前后邏輯關(guān)系,因此在處理的時(shí)候需要對(duì)網(wǎng)吧上傳的業(yè)務(wù)進(jìn)行順序性處理。
4:同步服務(wù)器:
(1):檢測(cè)網(wǎng)吧服務(wù)端相關(guān)數(shù)據(jù)是否和中心數(shù)據(jù)庫(kù)中的一致(費(fèi)率數(shù)據(jù)、會(huì)員數(shù)據(jù)、營(yíng)業(yè)流水等等),對(duì)于不一致的數(shù)據(jù),采用同步方式強(qiáng)行讓網(wǎng)吧數(shù)據(jù)和中心數(shù)據(jù)庫(kù)數(shù)據(jù)一致。
外圍服務(wù)器功能概要說(shuō)明:
1:負(fù)載均衡服務(wù)器:
(1):針對(duì)網(wǎng)吧帳號(hào)、所在區(qū)域等等信息對(duì)網(wǎng)吧應(yīng)該連接的反向代理服務(wù)器的IP和端口進(jìn)行指定。
(2):為了防止惡意連接反向代理服務(wù)器,負(fù)載均衡服務(wù)器為每一個(gè)網(wǎng)吧生成具有一定時(shí)效性的session。
(3):接收反向代理服務(wù)器的消息,對(duì)網(wǎng)吧帳號(hào)和session進(jìn)行認(rèn)證。
2:日志服務(wù)器:
(1):記錄所有服務(wù)器的日志信息。
(2):對(duì)所有日志進(jìn)行相關(guān)分析,提取出Error級(jí)別的日志,并將此類(lèi)日志保存在數(shù)據(jù)庫(kù)中。
3:監(jiān)控服務(wù)器:
(1):監(jiān)控所有服務(wù)器的運(yùn)行情況,對(duì)于出現(xiàn)異常而宕掉的服務(wù)器程序進(jìn)行自動(dòng)運(yùn)行,并向相關(guān)負(fù)責(zé)人發(fā)送短信報(bào)警。
(2):定時(shí)從Error日志數(shù)據(jù)庫(kù)中提取相關(guān)日志,并將信息進(jìn)行匯總后以短信(郵件)的方式發(fā)送給相關(guān)責(zé)任人。