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

目录
打赏
0
1
1
0
55
分享
相关文章
强化您的应用安全,从app加固开始
作为iOS技术博主,您对应用程序安全性的重要性应该有深刻的认识。随着移动应用市场的不断扩大,应用程序面临的安全威胁也日益增多。因此,采取有效的措施来加固应用程序,保护用户数据和知识产权变得至关重要。在本文中,我们将深入探讨如何通过app加固来提升应用程序的安全性,以及如何应对潜在的安全威胁。
阿里大数据——数据库总结——ADS分析型数据库
阿里大数据——数据库总结——ADS分析型数据库自制脑图
735 1
阿里大数据——数据库总结——ADS分析型数据库
分享一个开源一个新的雪花算法(雪花漂移)
  IdGenerator介绍   用一种全新的雪花漂移算法,让ID更短、生成速度更快。   核心在于缩短ID长度的同时,还能保持每毫秒并发处理量(50W/0.1s),且能保持伸缩能力。   需求来源   1.作为架构设计的你,想要解决数据库主键唯一的问题。   2.你希望这个主键是用最少的存储空间,索引速度更快。   3.你还会考虑在分库分表(合库合表)的时候,主键值能直接使用,并能反映业务时序。
891 0
MCP 是什么?一文看懂模型上下文协议
MCP(模型上下文协议)由Anthropic于2024年推出,旨在解决AI大模型的数据滞后问题,通过连接第三方数据源提升回答的时效性和相关性。传统联网搜索依赖公开信息,难以满足行业内部或定制化需求。MCP提供统一标准,使开发者能安全双向连接数据源与AI工具,简化集成流程。例如,Apifox MCP Server可将API文档作为数据源提供给支持MCP的IDE,助力智能代码生成。未来,MCP有望推动AI工具从封闭系统转向开放协作网络,显著提升开发效率与创新能力。
RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation.
RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation.
2617 0
Golang 搭建 WebSocket 应用(一) - 初识 gorilla/websocket
Golang 搭建 WebSocket 应用(一) - 初识 gorilla/websocket
1008 1
Spring问题之@RequestMapping注解的作用和使用方式是啥
Spring问题之@RequestMapping注解的作用和使用方式是啥
192 3
Go vs Java:在大数据处理领域的性能对比
Go与Java在大数据处理中各有特点。Go启动快,内存占用少,静态类型及并发模型(goroutine和channel)使其在并发性能上有优势。Java虽然启动慢,JVM内存占用高,但拥有丰富的生态系统和并发工具。代码示例展示了Go的goroutine和Java的线程池处理大数据的场景。在性能上,Go可能更优,但Java的跨平台性和生态广度使其仍被广泛应用。
【阿里云云原生专栏】从零到一搭建云原生应用:阿里云云原生应用平台实战教程
【5月更文挑战第24天】本文档是一份阿里云云原生应用平台的实战教程,介绍了如何从零开始搭建云原生应用。内容涵盖云原生应用的特点(容器化、微服务、CI/CD和自动化运维)以及阿里云提供的服务,如容器服务、服务网格和CI/CD工具。教程详细讲解了创建容器集群、编写Dockerfile、构建镜像、部署应用、配置服务网格和设置CI/CD的步骤。通过本文,读者将学会利用阿里云平台开发和管理云原生应用。
1103 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问