迫於 250,來自薦兩個 golang 庫

lesismal發表於2021-08-08

迫於 250,來自薦兩個 golang 庫

自己兩個庫,star 數量 250 了,不想 250,並且全程用愛發電、花了很多時間肝程式碼,所以厚著臉皮,來推廣一波求破

專案地址:

  1. ARPC
  2. NBIO

其中:

  • ARPC 是去年無心插柳隨手寫著玩的,有幸被鳥窩老師最近做 RPC benchmark 的文章收錄。
  • NBIO 去年也是寫著玩的,今年花了很多時間肝,支援了更多功能,實現難度比 ARPC 大很多。

一、ARPC

  • More effective network communication, two-way calling, notify and broadcast supported.

ARPC 效能

感謝鳥窩老師出品的 2021 年 Go 生態圈 rpc 框架 benchmark 收錄了 ARPC。

對比了一些其他常見的 RPC 框架,我和朋友們的測試環境覆蓋 4c8t-8c16t 的機器,跑出來的結果是 ARPC 各項指標均領先其他框架。但可能不同的人測試環境、測試過程中的軟硬體穩定性存在差異,所以其他一些框架作者公佈的測試結果會有差別。從實證主義觸發,有興趣的同學可以用上面帖子中的測試程式碼自行跑下來看實際效果。

ARPC 特性特點

  1. 支援多種 transport,如 tcp/kcp/quic/websocket...,使用者也可以自己選擇或者實現 Listener 介面來自主定製協議載體
  2. 支援多種 Codec,如 json/protobuf/messagepack...,使用者也可以自己選擇或者實現 Codec 介面來自主定製編解碼器
  3. 多維度的非同步支援,如 全部 handler 非同步響應、按路由非同步響應、同路由內使用者根據業務自行選擇非同步響應、非同步 Call
  4. 支援服務端主動推送、廣播
  5. 支援路由中介軟體,就像 gin/echo 那些 web 框架那樣,很容易定製你自己的 Logger、Recover 等各種功能
  6. 編碼中介軟體,方便使用者自行擴充套件編解碼,比如對於鏈路追蹤,ARPC 已經提供了 opentracing 的實現樣例
  7. 前端 js client 支援,通過 websocket 進行 rpc 互動,demo 看 這裡
  8. 微服務治理:ARPC 提供了基於 etcd 的服務註冊與發現基礎擴充套件。另外,其實 RPC 和 微服務 之間的從屬關係,應該是 RPC 作為 微服務 的一項基礎設施,而不是像一些 RPC 框架宣傳的那樣 RPC 框架包括了微服務的各種功能,比如服務註冊與發現,只要實現配置設定、配置更新、連線管理等基礎功能就可以了

ARPC 業務場景支援

  • 其實 ARPC 本身的定位不止於 RPC,而是提供相對全面的網路互動模式。基於上面的特性特點介紹,ARPC 能夠支援更豐富的業務場景,如:
  1. RPC
  2. 推送服務
  3. IM 服務
  4. 遊戲服務
  5. 其它

二、NBIO

  • High-performance, non-blocking, event-driven, easy-to-use networking framework written in Go, support tls/http1.x/websocket.

NBIO 效能

golang 標準庫方案通常是一個連線對應一個或者多個 goroutine,在海量併發場景下,大量 goroutine 帶來的記憶體、gc、排程成本太高,服務響應效能、穩定性降低。

NBIO 主要針對海量併發場景,實現了自定義 poller、tls/http1x/websocket 的非同步流解析,用於提高同等硬體的承載能力和穩定性。

在 10w tls+websokcet 連線數的測試中: | 測試環境 | 標準庫方案 | NBIO 方案 | | --- |---| --- | | os:vmware ubuntu
cpu:i7 8700 4c8t
mem:8g | 記憶體佔用:3.3g
qps:平均約 6-8w
穩定性:1-12w 波動,不穩定 | 記憶體佔用:1.3g
qps:11-12w 範圍
穩定性:執行穩定 |

NBIO 特性特點

  1. 跨平臺支援 windows/linux/mac(bsd):其他非同步網路庫多數都只支援 linux/mac(bsd),NBIO 在 linux 下使用 epoll、mac(bsd) 下使用 kqueue,windows 下使用標準庫、方便日常功能開發除錯
  2. 相比於其他非同步網路庫,NBIO 實現了 net.Conn,更方便業務層的相容、擴充套件
  3. 完整支援 tls/http1.x/websocket 的非同步流解析,並且 websocket 已經通過了 Autobahn Test Suite,這是其他非同步網路庫所不具備的
  4. NBIO 的 http 基本相容標準庫,可以很方便地把其他基於標準庫的框架用跟 nbio 搭配使用、來提高海量併發場景的承載能力、穩定性、降低硬體成本。這裡有 gin 和 echo 搭配 NBIO 使用的程式碼示例: > - gin-http-and-websocket-server > - echo-http-and-websocket-server

歡迎有興趣的小夥伴多多交流!

更多原創文章乾貨分享,請關注公眾號
  • 迫於 250,來自薦兩個 golang 庫
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章