天天看點

億級流量多級緩存高并發系統架構實戰

秒殺 假如100w 100商品

前台:

做登入、實名認證、會員等認證、

點選确定按鈕做分流送出

背景:

假如90w資料到背景

第一個nginx(叢集)做負載,直接削峰30w

第二層nginx做反向代理 削峰到幾百

使用redis直接 原子操作 如果是預銷售,那麼就存到kafka等待客戶支付的時候在真正去資料庫減操作

為什麼lua能承受高并發

因為nginx能承受高并發,是以lua能承受

lua的基礎練習

nginx不适合做叢集,适合做高可用

dns

一個域名可以配置多個ip,通過客戶通路dns,dns通過一定政策跳轉到對應的ip,做到第一層分流

lua整合redis

登入redis

redis操作eval

local key=keys[1]

local list=redis.call("get",key);

return list;

[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test02.lua a ? 2>/dev//null

"xiaoke"

讀取redis集合中的資料:

local list=redis.call("lrange",key,0,-1);

[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test01.lua age ? 2>/dev//null

1) "18"

2) "16"

3) "20"

4) "52"

[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test01.lua name ? 2>/dev//null

1) "xiaoke"

2) "xiaowang"

統計點選次數

local msg='count:'

local count = redis.call("get","count")

if not count then

redis.call("set","count",1)

end

redis.call("incr","count")

return msg..count+1

[root@ke01 lua]# redis-cli -h ke01 -p 6379 -a 123456 --eval test03.lua a ? 2>/dev//null

"count:1"

"count:2"

生産環境下部署:

[root@ke01 lua]# redis-cli -a 123456 script load "$(cat test02.lua)"

"43dd2a515754c08fb75f031c56e86986b8659b60"

[root@ke01 lua]# redis-cli -a 123456 evalsha "43dd2a515754c08fb75f031c56e86986b8659b60" 1 a

搭建nginx+lua開發環境(openresty)

測試lua腳本

建立配置檔案lua.conf

擷取nginx uri中的所有變量

openresty關聯redis

繼續閱讀