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模式的

相关文章
|
6月前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
137 3
|
6月前
|
安全 Java 数据库
SpingSecurity框架重要知识点(理解)
SpingSecurity框架重要知识点(理解)
66 1
|
开发框架 移动开发 小程序
强烈推荐:绝对是好用的小程序开源框架
强烈推荐:绝对是好用的小程序开源框架
184 0
|
中间件 PHP 数据安全/隐私保护
【Thinkphp 6】框架基础知识
【Thinkphp 6】框架基础知识
182 1
|
2月前
|
Linux Windows
framelesshelper框架学习
文章介绍了一个名为framelesshelper的框架,它可以创建跨平台的无边框窗口,并解决了窗口大小异常的问题。文中还提供了cmakelist.txt的适配方法和相关代码学习资源。
framelesshelper框架学习
|
4月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
59 6
|
4月前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
45 2
|
6月前
|
开发框架 数据可视化 前端开发
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
682 0
|
Java 数据库连接 数据库
SSM 框架原理简介及解析
SSM 框架原理简介及解析
|
Java API Spring
Spring 6 源码编译和高效阅读源码技巧分享
Spring 6 源码编译和高效阅读源码技巧分享