Golang Go语言中迫于 250,来自荐两个库

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中迫于 250,来自荐两个库

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

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


更多关于Golang Go语言中迫于 250,来自荐两个库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

老哥 想问问 有没有 qq 或者 tg 群啊 不然咋个交流呢… 想基于 arpc 写一个应用

更多关于Golang Go语言中迫于 250,来自荐两个库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


github 是非常方便和足够交流的,技术群会消耗我大量的社交时间,所以暂时不打算建群。有需要的在 github 上提 issue 就可以了,习惯了 github 对大家提升水平也有帮助。

针对您提到的“Golang Go语言中迫于250”这一表述(尽管略显含糊,我理解为在Go语言开发中遇到的一些挑战或需求),我自荐两个非常实用的Golang库:

  1. Gorm

    • 简介:Gorm是Golang中极为重要且声名远扬的库之一,是Go语言最好的对象关系映射(ORM)库。
    • 功能:支持多种数据库(如MySQL、PostgreSQL、SQLite等),提供日志记录、事务支持、自动迁移等特性。其SQL构建器灵活且能与REST API无缝集成,助力快速开发。
    • 推荐理由:简化数据库操作,提高开发效率。
  2. Vegeta

    • 简介:Vegeta是一个用于HTTP负载测试的重要工具。
    • 功能:以恒定的请求速率构建,用于测试HTTP服务的性能。支持线性负载生成,并能将结果以图表等方式直观展示。
    • 推荐理由:帮助开发者评估和改善服务性能,尤其是在高并发场景下。

这两个库分别针对Go语言开发中的数据库操作和性能优化两大核心需求,提供了强大的支持。希望它们能在您的Go语言开发之旅中发挥重要作用。

回到顶部