迫于 250,来自荐两个golang库

lesismal · · 2626 次点击 · 开始浏览    置顶
# 迫于 250,来自荐两个golang库 自己两个库,star数量250了,不想250,并且全程用爱发电、花了很多时间肝代码,所以厚着脸皮,来推广一波求破 项目地址: 1. [ARPC](https://github.com/lesismal/arpc) 2. [NBIO](https://github.com/lesismal/nbio) 其中: - [ARPC](https://github.com/lesismal/arpc) 是去年无心插柳随手写着玩的,有幸被鸟窝老师最近做 RPC benchmark 的文章收录。 - [NBIO](https://github.com/lesismal/nbio) 去年也是写着玩的,今年花了很多时间肝,支持了更多功能,实现难度比 ARPC 大很多。 ## 一、ARPC - More effective network communication, two-way calling, notify and broadcast supported. ### ARPC性能 感谢鸟窝老师出品的 [2021年Go生态圈rpc框架benchmark](https://colobu.com/2021/08/01/benchmark-of-rpc-frameworks/) 收录了 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看 [这里](https://github.com/lesismal/ARPC/tree/master/examples/webchat) 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<br>cpu:i7 8700 4c8t<br>mem:8g | 内存占用:3.3g<br>qps:平均约6-8w<br>稳定性:1-12w波动,不稳定 | 内存占用:1.3g<br>qps:11-12w范围<br>稳定性:运行稳定| ### 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](https://lesismal.github.io/nbio/websocket),这是其他异步网络库所不具备的 4. NBIO 的 http 基本兼容标准库,可以很方便地把其他基于标准库的框架用跟 nbio 搭配使用、来提高海量并发场景的承载能力、稳定性、降低硬件成本。这里有 gin 和 echo 搭配 NBIO 使用的代码示例: > - [gin-http-and-websocket-server](https://github.com/lesismal/nbio_with_other_frameworks/blob/master/gin_server/gin_server.go) > - [echo-http-and-websocket-server](https://github.com/lesismal/nbio_with_other_frameworks/blob/master/echo_server/echo_server.go) ## 欢迎有兴趣的小伙伴多多交流!

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2626 次点击  
加入收藏 微博
5 回复  |  直到 2021-08-30 15:47:21
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传