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