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