迫於 250,來自薦兩個 golang 庫
迫於 250,來自薦兩個 golang 庫
自己兩個庫,star 數量 250 了,不想 250,並且全程用愛發電、花了很多時間肝程式碼,所以厚著臉皮,來推廣一波求破
專案地址:
其中:
一、ARPC
- More effective network communication, two-way calling, notify and broadcast supported.
ARPC 效能
感謝鳥窩老師出品的 2021 年 Go 生態圈 rpc 框架 benchmark 收錄了 ARPC。
對比了一些其他常見的 RPC 框架,我和朋友們的測試環境覆蓋 4c8t-8c16t 的機器,跑出來的結果是 ARPC 各項指標均領先其他框架。但可能不同的人測試環境、測試過程中的軟硬體穩定性存在差異,所以其他一些框架作者公佈的測試結果會有差別。從實證主義觸發,有興趣的同學可以用上面帖子中的測試程式碼自行跑下來看實際效果。
ARPC 特性特點
- 支援多種 transport,如 tcp/kcp/quic/websocket...,使用者也可以自己選擇或者實現 Listener 介面來自主定製協議載體
- 支援多種 Codec,如 json/protobuf/messagepack...,使用者也可以自己選擇或者實現 Codec 介面來自主定製編解碼器
- 多維度的非同步支援,如 全部 handler 非同步響應、按路由非同步響應、同路由內使用者根據業務自行選擇非同步響應、非同步 Call
- 支援服務端主動推送、廣播
- 支援路由中介軟體,就像 gin/echo 那些 web 框架那樣,很容易定製你自己的 Logger、Recover 等各種功能
- 編碼中介軟體,方便使用者自行擴充套件編解碼,比如對於鏈路追蹤,ARPC 已經提供了 opentracing 的實現樣例
- 前端 js client 支援,通過 websocket 進行 rpc 互動,demo 看 這裡
- 微服務治理:ARPC 提供了基於 etcd 的服務註冊與發現基礎擴充套件。另外,其實 RPC 和 微服務 之間的從屬關係,應該是 RPC 作為 微服務 的一項基礎設施,而不是像一些 RPC 框架宣傳的那樣 RPC 框架包括了微服務的各種功能,比如服務註冊與發現,只要實現配置設定、配置更新、連線管理等基礎功能就可以了
ARPC 業務場景支援
- 其實 ARPC 本身的定位不止於 RPC,而是提供相對全面的網路互動模式。基於上面的特性特點介紹,ARPC 能夠支援更豐富的業務場景,如:
- RPC
- 推送服務
- IM 服務
- 遊戲服務
- 其它
二、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 特性特點
- 跨平臺支援 windows/linux/mac(bsd):其他非同步網路庫多數都只支援 linux/mac(bsd),NBIO 在 linux 下使用 epoll、mac(bsd) 下使用 kqueue,windows 下使用標準庫、方便日常功能開發除錯
- 相比於其他非同步網路庫,NBIO 實現了 net.Conn,更方便業務層的相容、擴充套件
- 完整支援 tls/http1.x/websocket 的非同步流解析,並且 websocket 已經通過了 Autobahn Test Suite,這是其他非同步網路庫所不具備的
- NBIO 的 http 基本相容標準庫,可以很方便地把其他基於標準庫的框架用跟 nbio 搭配使用、來提高海量併發場景的承載能力、穩定性、降低硬體成本。這裡有 gin 和 echo 搭配 NBIO 使用的程式碼示例: > - gin-http-and-websocket-server > - echo-http-and-websocket-server
歡迎有興趣的小夥伴多多交流!
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- golang開發類庫推薦Golang
- 推薦兩個好用的 React 庫以及使用後的感想React
- 推薦兩個好用的開源庫(圖片和UDP)UDP
- App Store第250億次下載者來自中國青島APP
- 初學 golang 選擇這兩個框架Golang框架
- laravel 250個使用技巧Laravel
- 推薦兩個實用技術
- 兩個系統故障解決薦
- Golang 超大檔案讀取的兩個方案Golang
- golang兩種資料庫連線池實現Golang資料庫
- 強迫症福利--收起.NET程式的dll來
- 再來檢視兩個程式
- 用於gotesting的Golang斷言庫Golang
- PostgreSQL的兩個模板庫SQL
- 推薦一個 session 庫Session
- 兩款免費軟體,合起來可以替代UltraEdit,推薦給大家!薦
- 這兩個小工具,真是推薦了還想推薦。
- phpHiveAdmin開發兩個月記錄薦PHPHive
- 兩個例子(來自Storm實戰 構建大資料實時計算)ORM大資料
- 同步寫兩個資料庫資料庫
- rac 建立兩個資料庫資料庫
- 一個golang並行庫原始碼解析Golang並行原始碼
- Swift自習室招募:兩個月30個DemoSwift
- mx250顯示卡什麼級別能玩什麼遊戲 mx250顯示卡相當於gtx中的哪個檔次遊戲
- 自動檢測兩個資料庫之間物件的儲存過程資料庫物件儲存過程
- 推薦兩個PDF軟體提高辦公效率
- 大家推薦哪個 golang 的日誌框架,說說理由?Golang框架
- 自媒體人看過來:日入過百萬,3個副業平臺推薦
- 來自網路的一封信薦
- 關於NULL的兩個計算Null
- 關於 ulimit 的兩個天坑MIT
- 推薦18個基於HTML5 Canvas 開發的圖表庫HTMLCanvas
- 【GoLang】GoLang 錯誤處理 -- 官方推薦方式 示例Golang
- 個性化推薦系統來了
- 推薦一個Json解析庫JSON
- 推薦15個 JavaScript 和 CSS 庫JavaScriptCSS
- 推薦幾個資訊學題庫
- 管理叢集資料庫的兩個使用者與兩個命令資料庫