這兩天最紅的 Golang github 大概就是這篇 “扛住100亿次请求?我们来试一试”

裡面主要就是根據 2015 春晚上使用的微信要紅包與發紅包的系統裡面提到 “扛住100亿次请求——如何做一个“有把握”的春晚红包系统?”

其實系統要求很低,有興趣可以玩玩看:

  • Server 端:
    • 這篇文章使用相當低的電腦來接受這樣的壓力測試
    • Dell R2950, 8 Core, 16G RAM.
  • Client 端:
    • 透過 esxi 來分成 17 台電腦來發送需求

代碼部分並沒有太多複雜的部分,主要是觀念上把所有的需求切割成數個 goroutine 來服務. 主要的代碼可以參考 github 或是最基本的 gobyexample 提供的 non-blocking channel operation

回過頭來,並不是一般人都有機會來試試看 10 billion 的連線機會.不過比較多的問題都會是怎麼我的電腦連幾萬個 (c1000k) 都撐不住了. 可以參考一下作者另外一篇基本文章: “c1000K 實踐報告”

裡面有提到基本系統設定:

  • 由於連線的時候其實系統本地都會開啟一個檔案來寫,所以需要修改文件開啟上限
    • /etc/security/limits.conf
    • /etc/sysctl.conf
  • TCP/IP 的網路優化,可以修改
    • net.core.somaxconn
    • net.core.tcp_max_syn_backlog

關於 tcp/ip 在 web connection 這邊有關的可以參考 nginx 的優化指南

  • 有些其他跟 tcp 接收有關的如下:
    • tcp_syncookies
    • tcp_max_tw_buckets
    • tcp_tw_recycle
    • timestamps
    • tcp_tw_reuse
    • tcp_fin_timeout
    • tcp_synack_retries
    • tcp_keepalive_time
    • tcp_keepalive_intvl
    • tcp_keepalive_probes

其實一路上要優化的部分還有很多,找時間慢慢紀錄一下.

參考鏈結:


Buy Me A Coffee

Evan

Attitude is everything