當前位置:
首頁 > 知識 > openresty使用筆記(一)

openresty使用筆記(一)


背景介紹

遊戲經過一段時間的運營,發現了原來的設計缺陷太多,所以決定重新設計架構。使用到nginx作為核心並通過lua+redis設計實現自己的負載分配方案。先看看下面這張簡單的架構圖吧~

openresty使用筆記(一)

從圖上看,結構是非常簡單的。主要通過編寫lua分配策略使遊戲房間內的人數盡量坐滿。

技術實現思路

要編寫lua插件通常需求編譯nginx使其支持,如果嫌麻煩可以直接上手openresty就可以了。我剛開始編譯nginx插件模塊也費了不少時間,現在使用openresty方便多了。 我們的遊戲房間是9個人,產品需要優先坐滿一個房間才分配下一個房間;玩家通過websocket連接到咱們的伺服器上,為了使nginx記住我們的節點負載情況,我使用redis記錄每一個節點的連接數量,並設計一套權重策略依據節點連接數量求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;
....

為了方便載入個人的配置,我在nginx下面自己建立了一個conf.d文件目錄,存放自己的配置。下面查看nginx具體配置。

server {
listen 9009;
location / {
set $websocket_addr "";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Scheme $scheme;
rewrite_by_lua_file /usr/local/lua/dispatcher.lua;
proxy_pass http://$websocket_addr;
}
}

注意這裡剛開始,我使用的是set_by_lua_file來返回一個websocket_add。那樣容易理解但是不支持redis,與資料庫的訪問。所以這裡使用了rewrite_by_lua_file方式。在開始出聲明了websocket_add全局變數,主要是為了在lua插件裡面進行修改。下面看lua插件簡單版本為了方便管理,我建立了lua代碼目錄在/usr/local/lua。文件名取名為dispatcher.lua

local var = ngx.var
hosts = {
"127.0.0.1:8109",
"127.0.0.1:8108",
}
host = hosts[math.random(#hosts)]
ngx.var.websocket_addr = host

這個時候再打開一個websocket伺服器,例如我跑了兩個tornado的websocket伺服器分別運行了8109/8108埠,(websocket伺服器簡單版在https://github.com/land-pack/tornado-websocket-example/blob/master/app/simple.py)

這時候你最好啟動兩個,分別監聽這兩個埠。下面就可以重新啟動你的openresty版本的nginx了。

通過chrome的websocket客戶端你可以訪問到下面這個地址。

openresty使用筆記(一)

可以看到,我們的請求得到了回復。那麼這次我只是通過lua的隨機數進行的負載分配的,這就是我們的第一步,下一篇我將會介紹如何通過redis來管理分配我們的客戶端連接~~

總結

好久沒寫blog了,最近又學了那麼多新玩意,想記錄一下~~

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

你是否也在學習ES6 Promise時遇到過這個問題?
如何在require中使用VUE
GPUImage的filter 響應處理鏈 的理解筆記
高並發環境下,Redisson實現redis分布式鎖

TAG:達人科技 |

您可能感興趣

Spring Cloud Zuul使用筆記(一)
Spring Cloud Feign使用筆記
讀書筆記:Eating for Cognitive Power
《Relation Networks for Object Detection》論文筆記
【Code筆記本】Valid Parentheses
《The innovators》讀書筆記
論文筆記:Fraternal Dropout
有道雲筆記是如何使用 TensorFlow Lite 的?
論文筆記:Attention is All You Need
The Economist 精讀筆記:Catching the bitcoin bug
論文筆記:Sequence Generative Adversarial Nets with Policy Gradient
讀書筆記《Jessica s ghost》
MyLipsButBetter 口紅筆記
【咖啡筆記】Viennese&Mocha
Chromebook筆記本將支持Assistant助手
筆記應用GoodNotes將推出macOS版本,基於Project Catalyst框架
Machine Learning Yearning 要點筆記
Spring Cloud斷路器Hystrix原理讀書筆記
Economist 23rd Jun 讀書筆記
TensorFlow基礎筆記