生活
本地特色
美食养生
求职招聘
特色小吃
家常菜
保健食品
农产品
饮料
蛋糕甜点
火锅
肉类海鲜
新闻
时光记忆
恋恋爱
母婴
测试
科技
电脑
手机
其他
编程
汽车
文化
读书
历史
心得
艺术
高考
跨境电商
跨境交流
跨境市场
跨境百科
跨境头条
玩
NBA
自驾游
徒步骑行
明星八卦
旅了个游
搞笑
游记攻略
美景分享
随手拍
城市风光
英语
英语家园
英语学习
每日一句
有声读物
汽车
搜索
快捷导航
登录
注册
ဆ
热搜词
活动
交友
discuz
本版
文章
帖子
用户
科技
+关注
+发表新主题
即时通讯系统为什么选择GaussDB(for Redis)?
[复制链接]
作者:
堇墨浮华
|
时间: 2024-5-1 17:41:03
|
其他
|
0
178
堇墨浮华
当前离线
积分
6138
窥视卡
雷达卡
堇墨浮华
2046
主题
2046
帖子
6138
积分
研究生
研究生, 积分 6138, 距离下一级还需 862 积分
研究生, 积分 6138, 距离下一级还需 862 积分
积分
6138
发消息
发表于 2024-5-1 17:41:03
|
显示全部楼层
|
阅读模式
每当网络上
爆出
热点新闻
,混迹于各个社交媒体的
小伙伴们
全
都开启了
讨论
模式。
一条
消息的产生是如何在群聊中
传递的呢?让我们
一起
来
探索即时通讯系统
(IM)
的原理。
IM
系统架构
的
原理
当你在群聊
“
相亲
相爱一家人
”
中,发送了一条
“
我
找到女朋友了
,
今天带回家吃饭
”
,你自然是希望
全家人都收到你的喜讯
,
为你女朋友
的到来分头准备
。那么正常的流程应该是这样:遍历群成员、查询每个成员的在线状态、如果小伙伴
们
在线则实时进行推送,如果小伙伴
们不在线
则暂存至离线库待上线后主动拉取。
这种
模式就是
传统
的
IM
架构,由于发送成功的消息不会落入离线库,
因此聊天记录多端漫游无法实现。
如果在线用户推送发生异常,
会导致
个别人员丢失
关键发言,
错失重要信息
。为了保证消息存储的可靠性,
我们对
IM
系统架构进行了优化,
不管成员是否在线都要先把消息和发送对象存储起来,再进行推送。流程变成:遍历群成员、为群聊的每一个人对应的消息队列都存一份消息、查询每个成员的在线状态、对在线成员进行推送。这就是所谓的
写扩散模型
。
这里显然还存在一个问题,我们向每个小伙伴的消息队列中都存储了相同的
“
我
找到女朋友了
,
今天带回家吃饭
”
消息,对磁盘和带宽造成了很大的浪费,这是写扩散的最大弊端。所以我们继续优化,群消息实体存储一份,用户只存消息
ID
索引。流程优化为:遍历群聊的成员、先存一份消息实体、群聊所有人都存一份
ID
引用、查询每个成员的在线状态、对在线成员进行推送。这就是所谓的
读扩散模型
。
简单总结下:
1.
读扩散:读取操作很重,写入操作很轻,资源消耗相对小一些。
2.
写扩散:读取操作很轻,写入操作很重,资源消耗相对大一些。
IM
系统架构优化实践
接下来
,
让我们使用
GaussDB(for Redis)
来实现一个简单的
IM
应用。
§
使用
GaussDB(for Redis)
的
List
类型实现一个消息队列,防止发送端瞬时高流量会压爆消息处理模块
;
§
收到消息后,先生成一个全局唯一
ID
标识该信息,将消息
ID
和消息内容存入
String
类型的消息存储库中,如果消息字段复杂也可以考虑使用
Hash
类型
;
§
对于消息中可索引的信息,将消息的索引信息存入
Zset
类型的消息索引库中,这
样无论是接收者还是发送者,都可以按照一定规则对历史消息进行检索
;
§
通过查询
Set
类型的消息关系群组
库,查询该信息的接收者集合,这个集合可以根据一定的规则动态增删
;
§
将消息
ID
推入
Stream
类型的消息同步库
,
每个
Stream
对象对应一个接收者,接收者可以通过
XRANG
命令获取一个范围内的未读信息
ID
;
§
最后,接收者再通过这组
ID
,从消息存储库中读取消息原始内容,即完成了一次消息传递。
Why GaussDB (for Redis)?
IM
系统有哪些痛点?高斯
Redis
如何解决这些痛点?
1.
开源
Redsi
数据库可靠性差,甚至丢数据,会直接导致
IM
系统瘫痪
。
GaussDB(for Redis)
对数据进行分片,在故障场景下可以自动进行接管,最多可以满足
N-1
个计算节点故障;存储层使用华为自研的企业级存储池
DFV Pool
,基于
分布式、强一致、高性能的先进架构,实现
3AZ6
副本存储,保证了在任何时间点的数据强一致,故障情况下数据不丢失。
2.
大流量、高并发场景如何支持连接管理,按业务况分散压力?
GaussDB(for Redis)
可以满足
IM
系统对可用性的要求,客户端程序通过
ELB
接入
GaussDB(for Redis)
实例,可实现自动
负载均衡。
3.
突发的高流量、大量的历史消息数据如何处理?
GaussDB(for Redis)
采用先进的存算分离架构,在
IM
系统持续运营的过程
中,如果出现突发流量,可以迅速对计算层资源进行秒级扩缩容,快速扛
住流量尖峰;历史消息持续增长时,也可以单独对存储层资源大小进行秒级动态调整,最高可
扩容
至
PB
级。
GaussDB(for Redis)
广泛适用于社交媒体、游戏、电商、推荐系统等领域,在海量并发场景具备极强的高可用能力。
如果你需要一款稳定可靠的高性能企业级
KV
数据库,不妨试试
GaussDB(for Redis)
。
来源:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
英语
汽车
文化
旅游娱乐
生活美食
发表新帖
回复
楼主新帖
声学计量员怎么报考?含金量高吗?有用吗?
ToDesk云电脑超详细体验教程,小白云桌面体验
【物理科普】一幅图读懂量子力学
速盾:高防服务器与 CDN 防御的区别解析
APP 聚合广告变现:开启财富密码
24小时热门
更多>
快速回复
返回列表
返回顶部