Goim框架的源码学习笔记

简介: Goim框架的源码学习笔记

B站1000 Wqps生产级IM服务框架

goin是b站公司技术总监毛剑创作,使用go语言开发,用于B站生产线上的IM服架(聊天室):

业务场景:

群聊:网页和移动端的群聊

单聊:一对一单聊,在B站终端的

推送:B站给推送客户推送的广告

官网:https://goim.io/

下面是官方的3590万QPS超高吞吐压测的报告实例和一些的概述

①、高伸缩,可扩展的微服务架构,需要有服务的注册中心,基于golang实现的

discovery。

②、基于谷歌的二进制传输协议性能高 grpc,只是个协议的机制,没有实现服务

的注册和发现

服务端配置:

CPU 内存 操作系统 数量
20核 DDR3 32GB Debian GNU/linux8 1

上面的使用的是独立的服务器更好,云服务器不好,因为如果用云服务器的话是共

用的物理资源

压测参数

①、不同UID同房间在线人数1,000,000

②、持续推送时长:15分钟

③、持续推送数量:40条/秒

④、推送内容:{"test":1}

⑤、推送类型:单房间推送

⑥、到达计算方式:1秒统计一次,一共30次

压力聚焦在网关上面comet

资源使用

①、每台服务端CPU使用:2000%~2300%(20个核心刚好满负载)  

②、每台服务端内存使用:14GB左右

③、GC耗时:504毫秒左右

④、流量使用:Incoming(450MBit/s),Outgoing(4.39GBit/s)

压测结果

推送到达:3590万/秒左右

没有做低性能的比如JWT校验,它是推送直接推送到的Kafka。

预估:如果加上JWT的话1w/qps   预估 2.5w/qps

架构图:

b1ced3bb4324246ddfee754621b180af.png

httpClient:推送消息的的业务系统。

logic:相当于网关的角色,然后经过kafka消息队列的削峰。

job:然后有个聚合的工作,队列缓冲,批量写入的功能,而且具备消息的分发服务。

comet:由分发服务job发给A实例comet,或者B实例comet。

在cap定理里面:ap和cp的是不可调和的,如果要cp的话需要在推送链路上一环一环

的确定好确认,ap是高并发,goim框架是保证ap模式的

相关文章
|
Web App开发 编解码 安全
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
7513 2
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
222445 69
|
4月前
|
弹性计算 测试技术
阿里云服务器按使用流量计费:适用场景、收费标准及费用控制详解
阿里云服务器的按使用流量计费模式,针对公网访问需求具有特定场景适配性,其收费标准因地域而异,同时可通过相关设置控制费用风险,以下为详细说明:
|
10月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
784 8
|
消息中间件 存储 Java
RabbitMQ之延迟队列(手把手教你学习延迟队列)
【1月更文挑战第12天】延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列的。
5900 98
|
SQL 缓存 监控
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
|
安全 物联网 API
API技术之身份认证
【10月更文挑战第17天】身份认证是API安全的核心,确保API可信可控。
API技术之身份认证
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数

热门文章

最新文章