2.2.6 字节跳动在 Go 网络库上的实践p1_1.jpg) 何晨 字节跳动 基础架构-研发 ## Netpoll - 面向 RPC 场景的网络库 应用层 RPC 框架 KiteX HTTP 框架 Hertz 网络层 Netpoll Go net ## Netpoll - 性能表现 ||Thrift (echo 1KB)|RPC|Netpoll|Go net| |---|---|---|---|---| ||QPS|2 ||QPS|2.5x|1.0x|| |Environment|TP99|0.34x|1.0x|| CPU: 4 cores Memory: 8GB Go: 1.15.4 ## Netpoll - 业务实测表现  |evio|go net| |---|---|---|---|---|---| |Epoll(ET/LT)|LT|LT|ET/LT|LT|ET| |NIO|✓|✓|✓|✓|| |ZeroCopy Buffer|✓||||| |Multisyscall|✓||||| ## 搭建 Netpoll func go epoll_wait()0 码力 | 42 页 | 3.19 MB | 2 年前3
CloudWeGo 开源项目介绍以及服务的脚手架,可以提供非常便捷的开发体验。 Second Party Pkg,例如 netpoll,netpoll-http2,是 Kitex 底层的网络库,这两个库也开源在 CloudWeGo 组织中。 ’ alt=‘OCR图片’/> 框架特点 高性能 使用自研的高性能网络库 Netpoll,性能相较 go net 具有显著优势。 扩展性 提供了较多的扩展接口以及默认扩展实现,使用 需时间更短,且订单量越大,这种性能差别越明显。总体来看,Kitex在处理大批订单时优势还是非常突出的。 Kitex产生性能优势的原因 CloudWeGo团队来森马做技术支持时讲到对自研网络库 Netpoll做了一些性能优化: 连接利用率; 调度延迟优化; 优化 I/O 调用; 序列化/反序列化优化; 3. Kitex带来ROI更高的的混合云部署下的链路追踪方案 案例地址:https://www 在开发过程中,快速写出来正确的代码往往是更重要的。因此,在Hertz在迭代过程中,积极听取用户意见,持续打磨框架,希望为用户提供一个更好的使用体验,帮助用户更快的写出正确的代码。 高性能 Hertz默认使用自研的高性能网络库Netpoll,在一些特殊场景相较于go net,Hertz在 QPS、时延上均具有一定优势。关于性能数据,可参考下图 Echo数据。 关于详细的性能数据,可参考 https://github.com/0 码力 | 37 页 | 89.14 MB | 2 月前3
SOFAMOSN持续演进路径及实践分享技术案例-长连接网关RawEpoll模式 ## 经典Golang netpoll模型 goroutine conn.read  goroutine conn.read 调度切换/就绪通知 Netpoll implemented in Golang runtime 大幅减少goroutine实例数量,从而降低内存、调度开销 1. 链接建立后,向epoll注册oneshot 可读事件监听;并且此时不允许有协程调用conn.read,避免与runtime netpoll冲突。  ## 技术案例-长连接网关RawEpoll模式0 码力 | 29 页 | 7.03 MB | 1 年前3
IPC性能极致优化方案-RPAL落地实践Frugal 高性能 JIT thrift 编解码器 ## 框架 ## Fastpb Hertz golang HTTP 框架 高性能、protobuf序列化反序列化库 基础库 ## Netpoll Sonic 基于JIT+SMID的JSON 序列化反序列化库 ## 编解码 高性能NIO(Non-blocking I/O)网络库 专注于RPC场景 ## Dynamicgo ## 业级云原生微服务架构的中间件集合。 CloudWeGo 项目共同的特点是高性能、高扩展性、高可靠,专注于微服务通信与治理。 CloudWeGo 包括 Kitex、Hertz、Volo、Netpoll、Monoio、Sonic 等多个重点子项目,涵盖 Go 与 Rust 开发语言,上至框架下至网络库、编解码库、序列化库均是自研,各个项目既可独立使用也可搭配使用,并围绕这些项目,构建了完整的上下游生态。0 码力 | 39 页 | 2.98 MB | 2 年前3
Dapr september 2023 security audit report/usr/local/go/src/runtime/netpoll.go:527 +0xf7 fp=0xc000181ab0 sp=0xc000181a78 pc=0x440e17 internal/poll.runtime_pollWait(0x7f211585a218, 0x72) /usr/local/go/src/runtime/netpoll.go:306 +0x89 fp=0xc000181ad00 码力 | 47 页 | 1.05 MB | 2 年前3
2.1.7 企业级 Go HTTP 框架在字节跳动的实践bufio.Reader ’ alt=‘OCR图片’/> Hertz 核心特点 自适应 linked buffer buffer 根据真实请求进行动态扩缩容调整 传输层 LT 触发(*netpoll)+ 数据预拷贝 实施效果 自适应调整,框架使用者完全无感 协议层最大程度做到零拷贝协议解析 ’ alt=‘OCR图片’/> Hertz 核心特点 四个框架的横向比较 三个框架的横向比较0 码力 | 38 页 | 5.20 MB | 1 月前3
2.3 高性能高可用的微服务框架TarsGo的腾讯实践 - 陈明杰修改Go 源码 社区提issue https://github.com/golang/go/issues/25729 internal/poll runtime_pollSetDeadline netpoll.go 2.07s (0.36%) of 206.24s (35.42%) name TCP40neShotTimeout TCP40neShotTimeout-6 SetReadDeadline0 码力 | 24 页 | 7.25 MB | 1 月前3
Go性能优化概览-曹春晖数量太多导致内存占用高 在一些不太重视延迟的场景(例如推送系统,抖一下死不了),可以使用下列库进行优化 • evio • gev • gnet • easygo • gaio • netpoll 一定要用自己的真实业务场景做压测 不要相信 readme 里的压测数据 ## 总结一下 ## • CPU 使用太高 • 应用逻辑导致 JSON 序列化 使用优化的 JSON 库替换标准库0 码力 | 40 页 | 8.69 MB | 2 年前3
共 8 条
- 1













