阅读更多

0顶
1踩

互联网

转载新闻 IM 去中心化概念模型与架构设计

2016-08-11 09:46 by 副主编 mengyidan1988 评论(3) 有7014人浏览
IM
本文转自微信公众号:mindwind 瞬息之间

今天打算写写关于 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 的共享存储似乎没有找到特别适合的产品,要是自己做一个呢就会产生一种今天只想出去兜兜风,却要先自己动手造辆车的感觉。
  • 大小: 58.7 KB
  • 大小: 77.3 KB
  • 大小: 107.3 KB
0
1
评论 共 3 条 请登录后发表评论
3 楼 枕梁一梦 2016-08-17 11:12
希望能再通俗易通一些
2 楼 pig0045 2016-08-12 18:57
还是没搞明白,这和中心 有什么区别,你离线消息还是在网关里,网关又成为中心了。
1 楼 huber7654 2016-08-12 10:39
“搜易达SEO工具,http://www.souyida.com,”收录和排名统计分析:
对于站内的数据,SEO人员最起码需要统计网站各频道及各类型页面的收录情况,“搜易达发帖软件,http://www.souyida.com/bbs/forum.php,”通过SITE,INURL指令及百度站长平台的索引量查询工具可以获得相关数据,虽然SITE和inurl所得到数据并不准确,但是体现在
时间轴上的大趋势应该是正确的,这些数据的趋势可以让SEO人员随时了解网站各方面内容的收录情况的变动,一旦网站的收录量出现导演,可以方便地追查到具体是哪方面的内容或哪些类型的页面出现了问
题,是内容问题,模版问题还是链接问题,“搜易达SEO外链,http://www.souyida.com/soft.php,”这些都很容易进行分析。
和搜索引擎收录量相对应,SEO人员也应该掌握网站各频道及各类型页面的实际数量,“搜易达发帖软件,http://www.souyida.com/case.php,”和搜索引擎的收录量进行对比,可以发现网站页面的收录比例有多大,这个收录比例在时间轴上的趋势可以反映出相应
时间段内网站内容的质量有所提升还是下降。前面GOOGLE WEBMASTER的介绍中,介绍了索引状态工具,这个工具就有这方面的作用,百度站长平台还没有类似工具的推出,所以只有靠站长和SEO人员自己来
进行数据统计“搜易达外贸SEO,http://www.souyida.com/bbs/forum.php,”和分析了。
除了以上数据的跟踪统计外,SEO人员还应该了解到网站每天新增内容的搜索引擎收录比例是多少,如果网站每天所产生的新页面并不是太多,完全可以让技术人员写个脚本指地在搜索引擎中查询这些新页
面的URL,查看是否收录及收录比例,也可以使用站长工具介绍章节中所提到的“指查询URL百度收录情况”的工具进行查询和统计,如果每天新增大量的内容,但是搜索引擎并不收录,就有点儿悲催了,收
录比例突然出现异常,也可能是网站出了某些问题,都需要根据实际情况进行分析,比如分析每天的新内容是否都被搜索引擎所抓取,未被收录的内容和已被收录的内容页面之间有什么区别等,来指导SEO工
作的方向。

针对关键词排名方面,“搜易达SEO工具,http://www.souyida.com/video.php,”人员应该跟踪统计网站所有核心关键词的排名变化情况。同时也利用流量统计工具统计每天的搜索词数量,以及搜索流量中的着陆页数量,这些数据的单日数据可能并不能反映太多
问题,但是在时间轴上建立趋势图就可以反映出很多问题了,比如搜索流量中的着陆页数量,“搜易达SEO软件,http://www.souyida.com,”代表了网站内有多少搜索有效页面,这个数值占网站总网页数的比例越大,代表网站的“无效页面”越少,搜索
引擎越认可网站的内容,如果这个数值占网站总网页数的比例很小,“搜易达SEO工具,http://www.souyida.com/case.php,”代表网站中大部分网页是不能从搜索引擎上带来流量的,如果网站没有发展其他推广方式,这些页面甚至都可以被当成垃圾页面了,这个
比例在时间轴上的趋势,可以反映出网站在SEO方面是否是良性发展的 ,“搜易达SEO外链,http://www.souyida.com/bbs/forum.php,”当然也要根据网站的类型进行具体分析。

SEO专家热线:13302966002,联系人:彭技术
本文原创首发于:“搜易达SEO工具,http://www.souyida.com/soft.php,”
                版权所有,转载请保留出处,谢谢

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 币图_教你什么是IM 去中心化概念模型与架构设计

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

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

    以太坊开发DApp实战教程——用区块链、星际文件系统... 去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都放在以太坊区块链上,这使 得它成为一个完全去中心化的应用。和淘宝这样中心化的电商平台相

  • 去中心化的 RTC 通信平台架构设计_转

    去中心化的RTC网络无需关心其它媒体服务状态,可快速增加地域媒体服务节点部署,与信令服务无耦合。本文来自融云联合创始人,CTO杨攀在LiveVideoStackCon 2019上海的演讲内容,由LiveVideoStack整理而成。在8月23-24...

  • 去中心化的 RTC 通信平台架构设计

    去中心化的RTC网络无需关心其它媒体服务状态,可快速增加地域媒体服务节点部署,与信令服务无耦合。本文来自融云联合创始人,CTO杨攀在LiveVideoStackCon ...

  • 系统架构设计——互联网金融系统架构设计

    近年来互联网金融蓬勃发展,在借贷、保险、股权等领域涌现出一大批互联网与金融场景相结合的创新产品。同时作为互联网金融的子领域消费金融领域,在国家消费升级战略下,各大平台推出了如花呗、借呗,微粒贷等众多...

  • Java架构II_C1 软件架构设计导论_3 软件架构的风格

    数据流风格架构又可以细分两种具体的架构风格:批处理序列和管道过滤器。 批处理序列 批处理风格通常会由总体协调安排批处理过程,保证其每-处理都是独立的,并且顺序执行。具体来看有以下特点: ●强时间顺序:只有...

  • IM 架构设计03 读扩散 && 写扩散

    任何脱离业务场景的架构设计都是耍流氓。 广义系统通知,有1对1的通知,以及一对多的通知,有相对实时的业务通知,以及能够容忍一定延时的系统通知。结合具体的场景来看下,这样的一些系统通知,究竟是推还是拉?...

  • IM 架构设计01 基本介绍

    携程早期IM架构 四 发送流程 消息的制造者[producer]一般是IM系统的最基本单元UIN[即一个自然人],既然是一个自然人,就认为其发送能力有限,不可能一秒内发出多于一条的消息,即其消息频率最高为: ...

  • MySQL核心技术原理之:数据库基础与SQL语言

    -> 概念模型设计 2.7.2 逻辑设计阶段:概念模型 -> 逻辑模型设计 -> 外键约束设计 2.7.3 物理设计阶段:逻辑模型 -> 物理模型设计 -> 物理数据库设计 2.7.4 测试阶段:数据库设计完成后,启动测试阶段。 3.MySQL概览...

  • 系统架构设计师备考资料(2.第一至四章)

    采购与库存管理是ERP的基本模块,其中采购管理模块是对采购工作——从釆购订 单产生至货物收到的全过程进行组织、实施与控制,库存管理(Inventory Management, IM)模块则是对企业物料的进、出、存进行管理。...

  • 软件架构设计-大型网站技术架构于业务架构融合之道——部分知识点总结【未完】

    软件架构设计-大型网站技术架构于业务架构融合之道 知识点归纳

  • 软件架构设计书籍介绍

     内容简介:本书紧紧围绕“软件架构设计”这一主题,立足实践解析了软件架构的概念、阐述了切实可行的软件架构设计方法、提供了可操作性极强的完整的架构设计过程。另外,本书从思维方式的突破、面向对象设计、UML...

  • 架构设计:系统间通信(34)——被神化的ESB(上)

    从本篇文章开始,我们将花一到两篇的篇幅介绍ESB(企业服务总线)技术的基本概念,为读者们理清多个和ESB技术有关名词。我们还将在其中为读者阐述什么情况下应该使用ESB技术。接下来,为了加深读者对ESB技术的直观...

  • 在线代码编辑器codemirror.js

    codemirror版本:https://codemirror.net/5/doc/releases.html

  • 外国电影演员识别系统源码分享.zip

    外国电影演员识别系统源码分享

  • 佳能 mf3010 打印机驱动管理软件

    mf3010 打印扫描一体机驱动管理软件。

  • 家政服务管理平台 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC

  • chrome-headless-shell-linux64-135.0.7004.0 (Canary).zip

    chrome-headless-shell-linux64-135.0.7004.0 (Canary).zip

  • DeepSeek大模型介绍与展望.pptx

    DeepSeek大模型介绍与展望.pptx

Global site tag (gtag.js) - Google Analytics