迫於 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
- 初學 golang 選擇這兩個框架Golang框架
- 兩秒完成250頁豆瓣電影PPT
- golang兩種資料庫連線池實現Golang資料庫
- laravel 250個使用技巧Laravel
- 用於gotesting的Golang斷言庫Golang
- Golang 超大檔案讀取的兩個方案Golang
- 推薦一個 session 庫Session
- 強迫症福利--收起.NET程式的dll來
- PostgreSQL的兩個模板庫SQL
- 推薦一個Json解析庫JSON
- 再來兩個小問題
- 迫於 l5-repository 太難用,我自己寫了一個 laravel-repositoryLaravel
- 推薦15個 JavaScript 和 CSS 庫JavaScriptCSS
- 推薦兩個Python開發相關崗位Python
- 推薦兩個PDF軟體提高辦公效率
- Swift自習室招募:兩個月30個DemoSwift
- 基於GitLab CI搭建Golang自動構建環境GitlabGolang
- Golang | IO庫Golang
- 關於 ulimit 的兩個天坑MIT
- 五個Svelte UI介面庫包推薦UI
- 自媒體人看過來:日入過百萬,3個副業平臺推薦
- Golang 推薦的命名規範Golang
- 來自開發同事推薦的免費好用apiAPI
- 來自一個小白的祝福
- 一個基於 golang 的爬蟲電影站Golang爬蟲
- 【推薦】5個常用的Python標準庫!Python
- 如何找到某個 ABAP structure 某欄位的源頭來自哪個資料庫表Struct資料庫
- 一個關於php兩個陣列compare實踐PHP陣列
- 升級 PHP 7.4 帶來的兩個大坑PHP
- 來自 APISpace 的API介面推薦,含免費次數API
- 推薦兩款 GTD 工具
- immer 和useImmer兩個庫有啥區別
- 如何在Hibernate/JPA中配置具有兩個連線池的兩個資料來源
- golang連線達夢資料庫的一個坑Golang資料庫
- 語言的力量主要來自於社群
- mx250顯示卡什麼級別能玩什麼遊戲 mx250顯示卡相當於gtx中的哪個檔次遊戲