說起架構,分為兩塊,一個是軟體層次的代碼架構,另外一個是硬體層次的系統架構。 軟體層次的,模組劃分、代碼重構及業務層的架構為主。 系統層次的,以網路、部署、伺服器集群為主。 軟體層次的架構,在於前期代碼研發。 硬體層次的系統架構,在於後期的伺服器部署上線。 今天的內容主要偏向于遊戲領域的系統架構。
談起系統架構,無外乎就那些技術,什麼負載均衡啊,什麼資料庫垂直、水準分區啊、前端/後端緩存、nosql什麼什麼的。 幾乎任何行業裡面的架構,都離不開這些技術。 今天要說的是遊戲架構,我不想再費勁的介紹那些傳統的架構技術,也沒什麼新鮮感。 要說某個領域的架構,我覺得這個領域相比其他領域的架構有什麼鮮明特點,這才是最有價值的部分。
遊戲架構相比傳統b/s、c/s應用架構,鮮明特點在於:
遊戲架構特有的「分區」概念。
為了解決玩家的延時,傳統IDC機房的遊戲架構,一般分為電信和聯通兩個大的分區。 然後在兩個大分區中,又分類似「北京分區」「上海分區」「江蘇分區」等等。 這種邏輯層次的按照地域的分區,其實在實體層次,是把伺服器對應部署在不同地域的機房中。 這樣部署,也主要是為了解決遊戲玩家的延遲性。 打個比方,北京電信的玩家登陸上海電信的伺服器,延時肯定是很高的。
遊戲分區的架構特性,決定了遊戲的架構一般不是分散式集群的架構(以下簡稱為集群架構)。 身為玩家的你們都知道,比如我是北京電信的玩家,然後登陸上海電信的遊戲伺服器,這個時候,一般你都會發現你的遊戲角色的屬性都會回歸你剛註冊的時候(針對絕大數遊戲,當然有些遊戲也不是這樣設計的,這裡就不做過多介紹)。 從這點我們可以判斷出,不同地域的遊戲部署,應用層和資料庫都是獨立分開部署的。 而我們傳統的分散式集群架構,不管你從北京登陸,還是從上海頓陸,你的使用者資料都是唯一的。 因為這種集群架構,底層資料庫並沒有獨立開。
遊戲分區的架構特性,決定了遊戲架構的擴充性非常好。 所謂的資料庫垂直分區、水準分區,又比如mysql的主從讀寫分離,這種資料庫層次的擴展,是很繁瑣的,一般都是應用於我們的集群架構中。 而我們的遊戲架構呢,簡單點的話,我們只需要一台伺服器部署應用,一台伺服器部署資料庫即可。 如果使用者量增加,比如上海電信的使用者量增加,一台伺服器和一台資料庫扛不住的時候。 這個時候,我們簡單增加一個區即可,再獨立部署一台應用和一台資料庫即可。 因而就有了上海電信一區,上海電信二區這樣的區分了。
傳統IDC 機房部署遊戲,地域之間訪問的延時性,因而就形成了這種很強的地域性分區。 如果我們通過雲來部署,這種分區上有什麼區別呢? 我們知道,雲主機網路都是BGP(多家運營商接入),從而就有效解決了傳統機房部署遇到的問題——不同地域不同運營商的玩家訪問的延時問題。 所以我們通過雲來部署的遊戲應用的分區,就沒有北京電信分區、上海電信分區之說了。 我們就可以簡單的叫為一區、二區、三區等,然後我們還可以為不同區取個好聽的別名。 比如一區之風雲再起,二區之逐鹿中原,三區之雄霸天下。
分區只是遊戲行業一個很突出的特點,幾乎所有類型的遊戲都具有這個特點。 但不同遊戲的類型,在架構及技術上是有所區別的。 遊戲按照應用劃分,主要分為頁游、手游和端游。 但頁游、手游和端游具體在架構及技術上有什麼區別呢?
頁游與手游、端游的架構區別:
頁游是網頁遊戲的簡稱,這類web遊戲應用,都是屬於B/S架構的範疇。 需要注意的是,這裡我說的網頁遊戲,以及本文所介紹的遊戲架構,並不包括單機遊戲的。 如果是單機遊戲的話,根本不用跟服務端進行通信,那就談不上什麼架構不架構的了。
手游是手機遊戲的簡稱,端游也就是用戶端遊戲的簡稱,手游和端游的特點,需要在手機、電腦上安裝用戶端。 所以手游和端游就是典型的C/S架構了。
頁游是B/S架構,手游和端游是C/S架構,說到這裡,可能不需要我再多說。 做過技術的,可能比我還要瞭解B/S與C/S有什麼區別吧。 B/S的架構基於瀏覽器,所以使用者不用關心我們程式的升級。 當我們程式升級,我們只需要在我們伺服器端更新一下,客戶下次瀏覽器訪問,會自動把最新的資料返回。 而我們C/S的架構,每次我們程式升級,可能都需要客戶手動在手機或者電腦上下載最新的用戶端或者升級包進行更新。
頁游、手游、端游的技術區別:
頁游、手游、端游後端的技術的話,可能都相差不多,主要技術區別在於前端。 頁游的話,採用html5、flash等前端技術。 而手游,如果是Android系統的話,採用java技術。 如果是IOS,主要採用object c。 那端游呢,當然C++是首先了。
好了,簡單的介紹這裡,希望大家支援原創文章! 也希望大家多多分享自己的心得和經驗!
原創作者:架構雲肖凱 文章來自:HTTP://game.aliyun.com 轉發請標明出處