Go 开源说第十八期预告:基于 Reactor 模式开发网络服务——gnet

点击蓝字

关注我们

写在前面

GoCN开源说是GoCN推出的一档分享Go开源好项目的直播栏目,通过开源说希望能够帮助到开源作者们实现以下目标:

第一是去推广他们的开源项目

第二说说背后的设计原理和理念,产品优越性等

第三让我们用户可以了解到更多好玩有用的项目,避免自己造轮子重复发明

第四当然也希望通过这些分享让大家学习到每一个开源项目背后的设计理念,拥抱开源,做出自己的产品。

回顾地址:https://github.com/gocn/opentalk

—— 王博锋

outside_default.png

本期开源先锋

outside_default.png

潘建锋

 https://github.com/panjf2000

Go 开源说第十八期预告:基于 Reactor 模式开发网络服务——gnet_第1张图片

公司、职位:

腾讯游戏,后端高级工程师

嘉宾简介

Go 协程池 ants 和高性能 Go 网络库 gnet 作者,Golang、redis、istio、fasthttp、gin 等知名开源项目的活跃贡献者,专注于系统底层原理、高性能网络编程、架构设计、云原生、分布式。

outside_default.png

关于 gnet 

https://github.com/panjf2000/gnet

outside_default.png

Go 语言基于 goroutine 和 GPM 调度器构建了一个简洁而优秀的原生网络模型,让开发者能够用同步的模式去编写异步的逻辑:goroutine-per-connection 模式,极大地降低了开发者编写网络应用时的心智负担,而且借助于 Go Scheduler 对 goroutines 的高效调度,这个原生网络模型足以应对绝大部分的应用场景。

基于同步编程模式的原生 Go 网络库能够满足大部分网络后台系统的开发,且可以有良好的性能。但是,对于某些追求极致性能的场景,如海量连接,原生库会引入庞大的 goroutines 数量,消耗大量的资源,从而影响性能表现,Go 原生网络库在这一类场景下会变得力不从心,在不考虑更换编程语言的前提下,基于 Reactor 模式开发网络服务是主流的解决方案,gnet 正是为此而生。

核心亮点:

高性能:极高的网络通信性能、极低的系统资源损耗;轻量级:API 精简专注,不引入过度复杂且不实用的特性,保证框架的易用性。

功能特性:

  • 高性能 的基于多线程/Go程网络模型的 event-loop 事件驱动

  • 内置 goroutine 池,由开源库 ants 提供支持

  • 内置 bytes 内存池,由开源库 bytebufferpool 提供支持

  • 整个生命周期是无锁的

  • 简单易用的 APIs

  • 高效、可重用而且自动伸缩的环形内存 buffer

  • 支持多种网络协议/IPC 机制:TCP、UDP 和 Unix Domain Socket

  • 支持多种负载均衡算法:Round-Robin(轮询)、Source-Addr-Hash(源地址哈希) 和 Least-Connections(最少连接数)

  • 支持两种事件驱动机制:Linux 里的 epoll 以及 FreeBSD/DragonFly/Darwin 里的 kqueue

  • 支持异步写操作

  • 灵活的事件定时器

  • SO_REUSEPORT 端口重用

  • 内置多种编解码器,支持对 TCP 数据流分包:LineBasedFrameCodec, DelimiterBasedFrameCodec, FixedLengthFrameCodec 和 LengthFieldBasedFrameCodec,参考自 netty codec,而且支持自定制编解码器

  • 实现 gnet 客户端(测试中)

发展状况:

目前 gnet 是性能最高的第三方 Go 语言开源网络库,且应用广泛,目前已经在腾讯、腾讯游戏、爱奇艺、百度、小米等大型互联网公司的生产环境上部署运行,经过大厂们的线上流量考验,gnet 在稳定性方面是有保障的,可以放心试用。

outside_default.png

本期精彩看点

outside_default.png

  • GMP 调度器精要

    讲解 Go 的 GMP 调度器的基本运行原理,使读者对 Go 语言的并发调度有一个整体且较为准确的理解。

  • Go 网络并发模型

    进一步讲解 Go 语言的网络并发模型,理解基于 Go 构建的网络服务在底层是如何运转的。

  • 优化 Go 网络开发

    讲解 gnet 是如何直接基于多路复用技术提升网络通信性能的,以及 gnet 在 Go 原生网络库之外的定位的目标。

outside_default.png

如何提前互动

outside_default.png

请在评论区留下你对于 gnet  项目感兴趣的问题,我们会统一收集在直播中进行答疑~

outside_default.png

如何报名

outside_default.png

查看下列截图你是否在任意的Gopher群里,如果已经加入任一Gopher群,只要在 29 日关注群内动向,我们会在晚上 20:00 准时开启直播

Go 开源说第十八期预告:基于 Reactor 模式开发网络服务——gnet_第2张图片Go 开源说第十八期预告:基于 Reactor 模式开发网络服务——gnet_第3张图片Go 开源说第十八期预告:基于 Reactor 模式开发网络服务——gnet_第4张图片

如果还没找到组织,请扫码入群,届时我们会在群内开启直播,如果群满了请加微信:gopherWang。

直播时间:10 月 14 日晚 20:00

Go 开源说第十八期预告:基于 Reactor 模式开发网络服务——gnet_第5张图片

你可能感兴趣的:(网络,java,python,编程语言,人工智能)