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

相关文章
|
中间件 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模式的高可读性和可维护性原则。
44 2
|
4月前
|
Java 测试技术 程序员
基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)(2)
基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)
47 1
|
4月前
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)(1)
基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)
56 1
|
4月前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
【7月更文挑战第11天】页面对象模型(POM)通过Page Factory在Java Selenium测试中被应用,简化了代码维护。在POM中,每个网页对应一个Page Class,其中包含页面元素和相关操作。对比之下,非POM实现直接在测试脚本中处理元素定位和交互,代码可读性和可维护性较低。
36 0
|
6月前
|
开发框架 数据可视化 前端开发
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
678 0
|
Java 数据库连接 数据库
SSM 框架原理简介及解析
SSM 框架原理简介及解析
|
SQL 开发框架 缓存
C# Abp框架入门系列文章(一)(上)
C# Abp框架入门系列文章(一)
370 0