迫于 250,来自荐两个 golang 库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
lesismal
V2EX    Go 编程语言

迫于 250,来自荐两个 golang 库

  •  1
     
  •   lesismal
    lesismal 2021-08-08 18:18:35 +08:00 3675 次点击
    这是一个创建于 1525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    迫于 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 使用的代码示例:

    欢迎有兴趣的小伙伴多多交流!

    4 条回复    2021-09-24 12:38:49 +08:00
    shoaly
        1
    shoaly  
       2021-08-18 18:26:22 +08:00
    老哥 想问问 有没有 qq 或者 tg 群啊 不然咋个交流呢... 想基于 arpc 写一个应用
    lesismal
        2
    lesismal  
    OP
       2021-08-21 11:16:23 +08:00
    @shoaly github 是非常方便和足够交流的,技术群会消耗我大量的社交时间,所以暂时不打算建群。有需要的在 github 上提 issue 就可以了,习惯了 github 对大家提升水平也有帮助。
    pzzrudlf
        3
    pzzrudlf  
       2021-09-21 00:39:19 +08:00 via iPhone
    膜拜大佬
    lesismal
        4
    lesismal  
    OP
       2021-09-24 12:38:49 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2686 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 14:11 PVG 22:11 LAX 07:11 JFK 10:11
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86