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

相关文章
|
8月前
|
安全 Java 数据库
SpingSecurity框架重要知识点(理解)
SpingSecurity框架重要知识点(理解)
77 1
|
开发框架 移动开发 小程序
强烈推荐:绝对是好用的小程序开源框架
强烈推荐:绝对是好用的小程序开源框架
199 0
|
6月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
74 6
|
Java 数据库连接 数据库
SSM 框架原理简介及解析
SSM 框架原理简介及解析
|
消息中间件 网络协议 Java
eventMesh源码学习
eventMesh源码学习
218 0
|
NoSQL Java 数据库连接
web开发简介|学习笔记
快速学习web开发简介
web开发简介|学习笔记
|
安全 Java
ReentranLock源码学习
线程的三大特性:原子性、可见性、有序性。也就是说满足这个三个特性的操作都是可以保证安全的,如Atomic包、volatile、通过happensBefore原则可以进行线程的安全的判断,这个依据通常是为了避免jvm指令重排。比如通常我们知道的配置信息,如果有多个线程去进行配置信息的修改,则需要进行上锁。或者多个线程修改一个变量时,此时就需要进行上锁了,或者读写分离时,可以考虑ReentrantReadWriteLock等。其本质是解决并行中的问题,将并行转成串行问题进行解决。那怎么上锁才有用呢?锁的状态大部分情况下是互斥的。当然也有特例:ReentrantReadWriteLock的读读是不会
100 0
ReentranLock源码学习
|
前端开发 Java Apache
框架介绍 | 学习笔记
快速学习框架介绍,介绍了框架介绍系统机制, 以及在实际应用过程中如何使用。
框架介绍 | 学习笔记
|
存储 人工智能 安全
C++学习必备——文章中含有源码
C++学习必备——文章中含有源码
125 0
C++学习必备——文章中含有源码
|
Java 开发者
框架开始 | 学习笔记
快速学习框架开始,介绍了框架开始系统机制, 以及在实际应用过程中如何使用。