IM 去中心化概念模型与架构设计

币图_教你什么是IM 去中心化概念模型与架构设计 IM 去中心化概念模型与架构设计 今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的。 站在这个角度而言,实际上并非所有的业务都能做去中心化设计,对于一致性要求越高的业务去中心化越难做。比如电商领域的库存就是一个对一致性要求很高的业务,不能超卖也不能少卖,这在单中心容易实现,但多中心纯从技术层面感觉无解,可能需要从业务和技术层面一起去做个折衷。 反过来看 IM 的业务场景是非常适合做去中心化设计的,因 阅读详情

今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的。

站在这个角度而言,实际上并非所有的业务都能做去中心化设计,对于一致性要求越高的业务去中心化越难做。比如电商领域的库存就是一个对一致性要求很高的业务,不能超卖也不能少卖,这在单中心容易实现,但多中心纯从技术层面感觉无解,可能需要从业务和技术层面一起去做个折衷。

反过来看 IM 的业务场景是非常适合做去中心化设计的,因为其业务场景都是弱一致性需求。打开你的微信或 QQ 仔细观察下,对大部分人来说与你联系最频繁的实际多是在地域上离你最近的人,人与人之间的心理距离和物理距离会随着时间渐趋保持一致。所以根据这个特点,按地域来分布数据中心和聚合人群是比较合适的。

在进入去中心化 IM 架构模型之前,我们先看看中心化架构是怎样的,分析其关键设计再来看如果要去中心化需要做哪些变化?

中心化

IM 的中心化架构并不意味着只有一个数据中心,它也可以是多数据中心的,如下图。

之所以说它是中心化架构,关键特征是其存在共享的数据存储。部署在两个数据中心的应用需要共享访问统一的数据存储,而这种共享访问实际是依赖数据中心之间的专线连通,这样的架构也限制了能选取的数据中心地理位置的距离。而实现去中心架构的关键点就在于规避跨数据中心的共享存储访问,使得应用在其自身数据中心实现访问闭环。

我们这里只分析下实现 IM 消息互通这个最重要场景下共享数据存储里需要存些什么数据呢?一个是用户上线后的「座标」,主要指用户本次在线接入了哪台机器的哪根连接,这个「座标」用于在线消息投递。而另一方面若用户离线时,别人给它发消息,这些消息也需要存储下来,一般称为用户的「离线消息」,下次用户上线就可以自动收取自己的离线消息。

中心化架构实际能做到的极致就是把读实现自有数据中心闭环,而写依然需要向主数据中心所在的存储写入。而 IM 的写入场景还不算是一个低频操作,那么要实现去中心化架构关键点就在如何解决写的问题上。

去中心化

在设计 IM 的去中心化架构之前,希望去实现这个架构并编写代码时,不需要去考虑最终部署到底是去中心的还是中心的。编码时就像开发中心化架构一样去实现场景的功能,而去中心化的能力做为纯基础的技术能力,通过附加的方式来获得,先看看架构图的变化,如下。

这里的变化是为「座标」增加一个「数据中心」纬度,当按通用的方式去本地存储定位用户时,发现一个非本地的座标时消息该怎么投递?这里可以在每个本地数据中心额外添加一个消息网关程序,注册到本地存储中,并负责接收所有非本地座标的消息,这有点像路由网络中的边界网关。

消息网关统一接收应当发往其他数据中心的消息,以实现跨数据中心的消息流转。这里有个疑问是其他数据中心的「座标」是怎么跑到本地来的?离线消息的场景又该如何处理呢?关于这两个问题,就涉及到我们解决跨数据中心同步数据的关键技术了。

关键技术

结合 IM 的业务场景,实际它对同步的延时具有一定的容忍度。所以我觉得基于 Gossip 协议的小道消息传播特性就能很好的满足这个同步场景。

关于 Gossip 我是在新近的 NoSQL 数据库 Cassandra 上听说的,后来 Redis Cluster 也利用了该协议来实现无中心化集群架构。但 Gossip 协议可不是什么新东西,实际关于它的诞生可以追溯到好几十年前的施乐研究中心,就是为了解决数据库同步问题被我们的前前前辈想出来的。

这个协议的灵感来自于办公室小道消息的传播路径,当一个人知道了一条小道消息,他碰到一个朋友并随口告诉了他,朋友又告诉了朋友的朋友,没多久整个办公室都知道了,也就完成了信息的同步。借用这个模型,实际上我们需要同步的信息就是用户的在线「座标」和「离线消息」。

因为 Gossip 自好几十年前已经有很多论文证明并公开发表,而且近年也有 Cassandra 和 Redis 的成功工程实践,所以我就先不用去怀疑其可行性,而是直接利用其结论了。根据其特性,分析 IM 的去中心场景在引入 Gossip 后有些什么可供观察的变化和值得注意的方面。

在一个稍具规模的 IM 场景下,用户总是在上上下下,消息也在不停的在「在线」和「离线」之间变化,所以需要通过 Gossip 同步的信息是时时存在的。所以假设我们在某个时刻去拍一个快照(实际做不到),得到的结果是多个数据中心的数据肯定是不一致的,几乎不存在所谓的全局最终一致性的某一时刻。在这样的客观环境下,对 IM 的业务场景有多大影响?

当用户A在 IDC#1 在线,用户B 在 IDC#2 刚上线,这里存在一个同步时差,那么此时用户A给用户B发消息,在本地没有用户B的座标,所以进入离线消息池。用户B此时不能立刻收到用户A的消息,但离线消息池会在随后通过 Gossip 协议同步到用户B所在的 IDC#2,用户B此时就可以通过离线消息收取用户A的消息。

上面描述了一种临界场景,在这种临界场景下,用户收消息存在延时。而这种临界场景实际上并不是常态,而且 IM 用户实际对这种刚上线的消息延时存在很高的容忍度。这一点我想大家用 QQ 可能体会过,有时一上线都一分钟了,还会收到之前的离线消息,我不知道这是有意的延时还是真有这么长的系统延时。

那么使用 Gossip 协议从理论上来估算下会产生多久的延时?假设我们在全国东西南北中各部署一个数据中心,一共五个。五个数据中心之间无专线,走公网互通,网络延时最大 200 ms。使用 Gossip 完成在五个数据中心的最终一致性同步最大需要多长时间?这里我直接引用 Gossip 论文结论:

Cycles = log(N) + ln(N) + O(1)

当 N=5 时,完成全部同步,需要节点间私下传播的次数,套用公式得到 3.3 次,取整得 4 次。按最大网络延时 200 ms,每次 Gossip 交换信息间隔 100 ms,那么协议本身固有延时大约 4x200 + 4x100 = 1.2s,而再算上程序开销,这个延时很可能在数秒内波动,这个量级的延时对于少数的临界场景是完全可以接受的。

总结

本文的标题是概念模型,但它不像另外一篇《RPC 的概念模型与实现解析》跟了实现解析,说明这只是一个理论推导。因为里面最关键的是如何配合 Gossip 的共享存储似乎没有找到特别适合的产品,要是自己做一个呢就会产生一种今天只想出去兜兜风,却要先自己动手造辆车的感觉。

参考

[1]. Wikipedia. Gossip protocol. 2016.03.29
[2]. ALVARO VIDELA. GOSSIP PROTOCOLS, WHERE TO START. 2015.12.02
[3]. Anne-Marie et al. Gossiping in Distributed Systems. 2007
[4]. Márk Jelasity. Gossip Protocols
[5]. Alberto Montresor. Gossip protocols for large-scale distributed systems. 2010


写点程序世间的文字,画点生活瞬间的画儿。
微信公众号「瞬息之间」,遇见了不妨就关注看看。

IM 架构设计06 微信后台基于时间序的海量数据冷热分级架构设计实践 1. 数据量大:PB 级数据,万亿级键值,并且在源源不断的生成中,然而新生成的数据相较于历史存量数据占比小。下图展示了该集群数据在各时间段的一个占比情况 2. 访问量大:峰值可达每分钟数十亿次访问,尤其是在节日期间,用户高涨的热情更可以转化成平日三至五倍的访问量。同时具有冷热分明、读多写少 (读写比例甚至可达 100:1) 的访问特征,比如节日期间倍增的访问通常是对节日期间生成的新增数据的访问。下图展示了该集群访问在各时间段的一个占比情况;3 阅读详情

相关推荐

Sipeed麦克风阵列板练习

麦克风阵列板 Maix Dock Sipeed

sunshinebigbig的博客 3832

php去中心化算法,如何开发一个去中心化应用?

原标题:如何开发一个去中心化应用?今年上半年,以太坊上的很多游戏都爆红过一段时间,从以太猫到Fomo3D,吸引了众多人的参与,不过目前大多数游戏都以投机为主,本文介绍的不是投机内容,而是从代码层面介绍如何建立一个去中心化应用,有兴趣的小伙伴可以尝试一下。以太坊的平台游戏引用了以太坊提供的一个可信、不可篡改平台。与传统游戏不同的是,区块链游戏的规则确定之后,一切都按规则运行,无人可干预,这也是去中心...

weixin_26899659的博客 513

深入解析FPGA中的GTX高速收发器架构与设计原理

本文深入解析了FPGA中GTX高速收发器的核心架构与设计原理。文章将GTX比作数据“高速公路”,详细拆解了其PMA(物理媒介适配层)与PCS(物理编码子层)的双层结构,阐述了串并转换、时钟恢复等关键技术,并提供了时钟源选型(QPLL/CPLL)、上电复位流程及信号完整性调试等实战指南,是掌握高速接口设计的必备知识。

f6g7h8i9j的博客 219

分布式系统设计,中心化和去中心化设计需要知道的内容(2)

上一篇我们主要说了关于分布式系统设计中,中心化的相关内容,本篇我们来研究去中心化设计的一些内容。

yokeyhui的博客 777

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加学生信息等等功能。一共15项。   代码如下: // shujujiegou.cpp : 定义控制台应用程序的入口点。///**本程序采用数组链表形式,原因:数组查询速度快,数组也能实现动态存储

Java 1万+

论文笔记:基于对比学习的半监督分类学习方法

论文阅读笔记_CCSSL

weixin_46224126的博客 3314

高可用架构去中心化重要?

去中心化分析:很明显,我们的注册和订阅都依赖注册中心(Eureka、ZK、Etcd或者其他...),如果这个注册中心挂了,我们连对服务的访问路由地址都无法匹配,请求都没办法发出去。如图,B Region 如果挂了,流量会调度到A Region中,如果A、B均挂了,则会启动Backups Region,当然,数据可能会有一些延迟,但依然能保证系统正常提供服务。比如你的中心服务有20个副本(实例),其中一个副本(实例)出故障,导致执行返回5xx,那么第二次请求的时候大概会有 19/20 的成功概率。

xdpcxq1029的博客 1314

Hadoop生态系统-新手快速入门(含HDFS、HBase系统架构)

Hadoop简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量...

Hadoop环境搭建教程 472

去中心化结构的相关理解

去中心化结构前言一、C/S架构二、去中心化架构总结 前言 去中心化结构可以与C/S(Client/Server)架构,客户机与服务器这种衣服武器为中心的架构进行对比学习。 一、C/S架构 C/S架构如下图所示: 将整个应用托辊到云端或者租用的VPS主机上。 用户通过客户机(client)与web应用(sever)进行交互。其中,客户机包含上图灰色字块。 C/S架构中,总存在一个或者一组的中心化的web服务器,所有客户都在访问这一个或一组中心化服务器。 客户的访问流程为: 1、客户向服务器发出请求

weixin_43900035的博客 5105

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 945

币图网以太坊开发实例_去中心化概念模型与架构设计

以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一) 第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售商品,买家可以自由地购物: 去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都放在以太坊区块链上,这使 得它成为一个完全去中心化的应用。和淘宝这样中心化的电商平台相

bituwang的博客 367

第55篇:数据隐私保护技术盘点——差分隐私、同态加密与它们的坑(踩坑总结)

数据隐私保护是AI工程化中必须严肃对待的课题。差分隐私和同态加密是两把利器,但也都是“重武器”,使用不当反而会伤及自身。差分隐私像“模糊处理”,通过加噪来保证统计安全性,要小心管理隐私预算和效用权衡。同态加密像“保险箱里打算盘”,保证了计算的精确性,但必须承受巨大的性能和工程复杂度代价。我的建议是:从小规模实验开始,先用DP-SGD在MNIST/CIFAR-10等标准数据集上感受噪声与精度的关系;再用TenSEAL等易用的库尝试一个加密逻辑回归,体会密文膨胀和速度延迟。

ai_blue_pm的博客 281

im也去中心化?Startalk(星语)的去中心化设计之路

本文转载自Startalk开发者,期待的搓搓小手,让我们来揭秘去中心化的im如何设计吧!!Startalk目前全套代码已全面开放至Github网站,地址:github.com/qunarcorp/q…Startalk 官网地址:im.qunar.com/new/#/home***************************************************************...

weixin_33884611的博客 2158

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

悟空IM开源项目使用教程

悟空IM是一个高性能的通用通讯服务,支持即时通讯、站内/系统消息、消息中台、物联网通讯、音视频信令、直播弹幕、客服系统、AI通讯和即时社区等多种场景。该项目基于Go语言开发,具有故障自动转移、去中心化设计、节点之间数据互备、支持集群快速自动扩容等特性。 悟空IM是开源中唯一去中心化的分布式IM,唯一单机发送并发超20万的IM,唯一内置自研分布式存储的IM,不依赖任何中间件的分布式IM。 ##

gitblog_00111的博客 1590

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

悟空IM:构建高性能分布式消息系统的终极指南

悟空IM(WuKongIM)是一款高性能的通用通信服务,经过10年(2015-2025)的持续优化,支持即时通讯、应用/系统通知、消息中间件、物联网通信、音视频信令、直播弹幕、客服系统、AI通信、即时社区等多种场景。作为开源领域唯一的去中心化分布式IM系统,悟空IM在单机环境下能够支持20万+的并发发送,内置自主研发的分布式存储,不依赖任何第三方中间件。 ## 🚀 悟空IM的核心优势 悟空I

gitblog_01059的博客 1352

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WICC 2021 融云首席架构师揭秘RTC和IM全球通信网络

7月24日,以“新视界·连未来”为主题的第三届全球互联网通信云大会(WICC 2021)在北京成功举办。作为 WICC 的主办方,全球互联网通信云领导厂商融云在“网络传输与系统架构”的技术分论坛中,发表了《融云构建全球一体化网络的设计解析》的主题演讲。 融云首席架构师李淼为开发者全面解析了融云 RTC 和 IM 全球网络的设计要点和质量监控体系,从架构层面诠释了融云为开发者提供的全球化服务能力。 构建全球网络的问题与难点 李淼首先介绍了融云全球通信网络最大的特点是:因业务场景不同,RTC 实时音视频和IM

weixin_44764152的博客 764

IM、RTC技术两生花,看融云如何打造“IM+RTC+Push”一站式通信云服务

11月9日,融云宣布完成数亿元人民币的D轮融资。从李佳琦和明星扎堆的电商直播,到疫情期间在线教育的全面普及,再到5G技术进入商用,实时音视频技术(Real-Time Communication,以下简称RTC)迎来了全面的爆发,以IM及RTC为基础的通信云赛道持续被资本看好。近日,优快云采访到融云CTO(首席技术官)杨攀、CPO(首席产品官)任杰,对于通信云技术难点、使用场景等问题,他们给出了赛道“参赛者”的回答。 融云CTO杨攀 融云CPO任杰 记者 | 宋慧 受访嘉宾|杨攀、任杰 出品 | C

优快云资讯 2万+

悟空IM分布式通讯系统:构建高性能即时通讯的终极指南

悟空IM是一个革命性的分布式即时通讯系统,采用去中心化架构设计,支持单机发送并发超过20万消息,是业界唯一内置自研分布式存储且不依赖任何中间件的IM解决方案。该系统能够满足从企业内部通讯到大规模社交平台的多样化需求,为开发者提供稳定可靠的通讯基础设施。 ## 为什么选择悟空IM作为您的通讯解决方案 在当今数字化时代,即时通讯已成为各类应用的核心功能。传统IM系统往往面临单点故障、性能瓶颈和复杂

gitblog_00375的博客 1032

tim:去中心化即时通讯引擎

tim:去中心化即时通讯引擎 项目介绍 在当今数字化时代,即时通讯已成为人们日常生活和工作的重要组成部分。tim项目应运而生,它是一款采用去中心化分布式架构的即时通讯引擎。这种架构设计不仅提升了系统的安全性、可靠性和性能,而且有效地解决了大规模分布式系统设计和实现中的问题,为用户带来了全新的通讯体验。 项目技术分析 tim项目的核心技术亮点在于其去中心化分布式架构。这种架构不依赖于中心节点或控制单...

gitblog_00253的博客 809
上一篇: 代码故事:汉德的救赎
下一篇: 技术大会值得参加吗?
mindwind-_-
mindwind-_- 领域专家: 网络协议与安全技术领域 领域专家: 网络协议与安全技术领域
博客等级 码龄22年 4326粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值