erlang 作為長連線閘道器有著天生的優勢:
- 擅長與io密集型業務,也要求將閘道器設計盡量簡單,認證完後,簡單解析報頭,就直接將請求**給後端服務處理
- 網路層有beam c 實現得非常高效 ,erlang **只是簡單流程控制,也就是說**效能很接近優化的很好c程式
- **簡單,易維護,erlang 程序和連線一對一關係,**500行左右
- 基於程序gc,node 記憶體多大也不用擔心stop of word
- 熱公升級,閘道器設計本盡量簡單,減少公升級,但也不可避免,熱公升級保證不斷連線
- 穩定,beam 足夠穩定,即使天天更新的服務,連續一兩年不重啟也正常
- 多語言混合,後端可很容易使用其他語言實現
劣勢:cpu密集型業務,效能差,如果不想用c解包,盡量使用二進位制協議,盡量將包協議標識放在包體固定位置,方便dispatch
- 服務端: r620 2*(e5-2620 6核心12執行緒)/mem:128gb
- 客戶端:r620 2*(e5-2620 6核心12執行緒)/mem:48gb(5臺*5 ip,共25ip)
1. beam 啟動引數
+sbt db 繫結排程器與cpu的親緣性
+p 2000000 程序數限制(合適即可)
+k true 啟用epoll
+sbwt none 關閉beam 排程器 spinlock,降低cpu
+swt low 提高排程器喚醒靈敏度,避免長時間執行睡死問題
參考我另外一篇:erlang cpu 相關引數調整
2. erlang 網路庫:ranch 需要修改
- 配置acceptors 數量1024,backlog 32768
同時系統backlog調整: net.core.somaxconn, net.core.netdev_max_backlog, net.ipv4.tcp_max_syn_backlog 32768
- 刪除新加連線時的 ranch_sup 和 connection monitor,占用記憶體且用處不大,同時單程序熱點問題,也造成backlog 無法及時處理
- acceptor 設定 process_flag(prority, high),否則因為公平排程問題,即使cpu不高,backlog 無法及時得到處理
3. erlang記憶體占用
因為erlang gc 基於程序,每個連線對應乙個程序,每個連線的業務量都很小。那樣就會造成一種現象數百w程序內都有一點垃圾,無法得到gc。
使用hibernate,erlang:hibernate 會清空但前呼叫棧,並強制gc,下次程序收到訊息後,會通過引數mfa繼續執行。
使用gen_server 簡單的在沒有個包處理完後,都加上hibernate, cpu無明顯增加情況下,可將記憶體使用降低到1/3 以下,非常值得使用。
-客戶端在5臺機器,25個ip,開啟 tcp_tw_reuse tcp_tw_recycle 後每個ip穩定跑6w連線還是沒問題的。
- 6k/s 登陸、認證、心跳、退出 操作
- 1w/s 訊息推送、ack
- 執行12 小時
ss -stotal: 1500254 (kernel 1500317)
tcp: 1500090 (estab 1500077, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 74transport total ip ipv6
* 1500317 - -raw 0 0 0udp 0 0 0tcp 1500090 1500090 0inet 1500090 1500090 0frag 0 0 0
閘道器機器:
- cpu 500%
- 網絡卡 6w/s tcp packet in/out
- node mem 12gb (內部memory(total) 顯示實際使用9gb)
- kernel mem 11gb
- 也就是150w連線,使用了23gb記憶體,每個連線占用15kb,約一半是核心使用,erlang 使用記憶體並不多。
- 在如此業務量壓力下,500% cpu表現也不俗,隨無法和c相比,但其多核擴充套件性好。
- 伺服器有24核心,但環境其他服務、客戶端ip數限制,沒有繼續增大壓力,理論上單機200~300w 連線,5w/s 訊息推送 應該不是問題。
erlang c 跨語言呼叫設計
我們的 倉庫裡面存在很多c語言的庫,基於執行效率或工作量的考慮,我們不想 使用erlang重寫相關庫,我們想在erlang中像使用erlang庫一樣方便地使用c庫,vcall erlang版 正是在這種背景下出現的。vcall erlang版本 後面簡稱 vcall。使用vcall時,我們只需要呼叫...
早到的加分150
首先,因為我去青島出差,耽誤了一周的課程向大家道歉,耽誤的課程都會補回來。對於某一專業或學科的興趣,其實是乙個很難回答的問題。有很多人因為各種各樣的原因,最終從事的工作和自己的興趣一點關係都沒有,但是生活就是生活,人必須的生存下去,生存是發展的根本。因此既然選擇了這個專業,就得走下去,除非具有依賴別...
佳能fax l150如何列印 佳能l150說明書
佳能l150傳真機說明書,佳能官方為了保證使用者盡快掌握l150的使用方法專門製作了這份說明書,使用者可以從這份說明書裡學習到驅動安裝 裝置安裝 日常使用 各個功能設定 故障排除和維護的方法和操作,是使用前必須要看的資料。佳能l150傳真機說明書內容介紹 1 驅動安裝指南 這款傳真機的驅動安裝方法 ...