背景介紹
游戲經過一段時間的運營,發(fā)現了原來的設計缺陷太多,所以決定重新設計架構。使用到nginx作為核心并通過lua+redis設計實現自己的負載分配方案。先看看下面這張簡單的架構圖吧~
從圖上看,結構是非常簡單的。主要通過編寫lua分配策略使游戲房間內的人數盡量坐滿。
技術實現思路
要編寫lua插件通常需求編譯nginx使其支持,如果嫌麻煩可以直接上手openresty就可以了。我剛開始編譯nginx插件模塊也費了不少時間,現在使用openresty方便多了。
我們的游戲房間是9個人,產品需要優(yōu)先坐滿一個房間才分配下一個房間;玩家通過websocket連接到咱們的服務器上,為了使nginx記住我們的節(jié)點負載情況,我使用redis記錄每一個節(jié)點的連接數量,并設計一套權重策略依據節(jié)點連接數量求9的余數進行排序。當然具體看代碼更加容易理解~~
準備工作
假設已經安裝好了openresty,可以直接在/usr/local/openresty/nginx/conf下面找到nginx.conf文件,增加下面一行(注意如果已經安裝了nginx的其他版本,需要將openresty安裝的nginx進行端口重新配置)
... 30 #keepalive_timeout 0; 31 keepalive_timeout 65; 32 include /usr/local/openresty/nginx/conf.d/*.conf; 33 #gzip on;....