【Go 夜读】第 73 期趣头条在长链接方面的实践 - qrpc

yangwen13 · · 575 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

>文章来自于:https://reading.developerlearning.cn/reading/73-2019-12-28-qrpc/ 分享者:徐志强@趣头条 ## 观看视频 https://youtu.be/Ug4i4IHhGh4 ## 【Go 夜读】#73 趣头条在长链接方面的实践-qrpc qrpc是一个小而强大的长链接框架,它包含了谷歌grpc的核心特性,但是更加轻量、高效、可扩展,从最早的推送中台长链接,到后来整个的IM中台,以及目前进行中的qfe长链接网关,正在朝着成为趣头条的长链接底座的方向发展。 ## 大纲 1.为何[qrpc](https://github.com/zhiqiangxu/qrpc) 2.[qrpc](https://github.com/zhiqiangxu/qrpc)的特性和生态 3.[qrpc](https://github.com/zhiqiangxu/qrpc)的应用 4.[qrpc](https://github.com/zhiqiangxu/qrpc)核心的优化 5.[qrpc](https://github.com/zhiqiangxu/qrpc)的展望 6.pprof tips ## 分享者自我介绍 徐志强,开源爱好者,Cocos2dx、TiDB、GO contributor。 目前在趣头条的母公司比格基地担任架构师。 负责推送和IM中台,目前已经接入了多个日活500-800w的业务方。 研究兴趣点:网络+存储+高并发。 ## 分享时间 2019-12-28 21:00 UTC+8 ## 分享地址 https://zoom.us/j/6923842137 ## Slides [在线版 qrpc.pptx](https://docs.google.com/presentation/d/18Gk2x2Fi3WdIGs2sfMtkA-NatbcD5wela80qaDwY-WE/edit?usp=sharing) 需翻墙 [离线版 qrpc-夜读.pptx](https://github.com/developer-learning/night-reading-go/files/3971489/qrpc-.pptx) ---- ## 备注 Q:不用epoll怎么保持80W连接? A:其实go内部所有连接都已经用epoll(或者各平台对应物)接管了,自己再做集成的好处,是可以把闲置的协程释放掉 Q:IM优雅重启时老进程不退出的原因? A:老进程关闭所有端口后做Shutdown,前面有个bug,导致无法退出(较低概率出现),相关的commit是这个:https://github.com/zhiqiangxu/qrpc/commit/951759ff4f03b4c34d76092f634817444bbc2d35 Q:3个协程如何优化成2个? A:通过抢占锁的方式,抢到的一方再把其他的写请求接管过来,最后通过writev批量写,最终结果是内存和性能都有收获 Q:没有任何监听端口时的调试工具? A:delve,谷歌官方推荐 Q:qrpc是基于http2还是tcp? A:tcp,没有http2的历史包袱 Q:用qrpc写聊天工具是不是只要写ui就好了? A:对,长链接部分会非常简单,不过由于IM涉及的接口繁多,还是需要开发很多的restful接口做存储 Q:串行、并行的区别 A:串行的话,前面的包处理完,后面的才会处理;并行的话,不会等前面的处理完就会开始执行 Q:TLS可以集成吗? A:规划中,也可以使用TLS proxy分担出去。 Q:并行模式下,包的顺序如何保证? A:并行模式下,包的顺序没保证,可能后面的请求先返回了,请求/响应是通过8字节的RequestID进行关联 Q:socket断了如何保证消息不丢? A:IM的消息都会做存储,客户端是推拉结合,重连后会跟server端进行同步 Q:如何维持心跳,是否需要重发机制? A:qrpc内部做了tcp层的心跳,业务层也可以做,通过周期地请求某个CMD即可实现。tcp本身已经保证了可靠性,所以基于tcp做上层应用不需要考虑重发,除非连接断开了,那么下次重连会同步。 Q:push的时候如何去重? A:这个是客户端根据消息ID做的幂等处理 Q:路由怎么做? A:一致性哈希或者路由表存起来,前者成本比较低,目前用一致性哈希 Q:目前遇到的主要挑战是? A:正准备上聊天室,一天一亿条消息,并且聊天室里成员众多,实际写放大会很大,对长链会是个考验 Q:优雅重启时新老进程如何通信? A:推荐 https://github.com/cloudflare/tableflip ---

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

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

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