阅读更多

0顶
1踩

互联网

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

2016-08-11 09:46 by 副主编 mengyidan1988 评论(3) 有6958人浏览
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技术的直观...

  • 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

    【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

  • 六一儿童节快乐!(六一儿童节庆祝代码)Vue开发

    六一儿童节快乐!(六一儿童节庆祝代码)Vue开发 like Project setup npm install Compiles and hot-reloads for development npm run serve Compiles and minifies for production npm run build Lints and fixes files npm run lint Customize configuration

  • uniapp聊天工具源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

  • NX二次开发uc1603 函数介绍

    NX二次开发uc1603 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,还是希望提高工作效率的普通用户,NX 二次开发 Ufun 都可以帮助您实现更高效的工作流程。函数覆盖了 NX 软件的各个方面,包括但不限于建模、装配、制图、编程、仿真等。这些 API 函数可以帮助用户轻松地实现自动化、定制化和扩展 NX 软件的功能。例如,用户可以通过 Ufun 编写脚本,自动化完成重复性的设计任务,提高设计效率;或者开发定制化的功能,满足特定的业务需求。语法简单易懂,易于学习和使用。用户可以快速上手并开发出符合自己需求的 NX 功能。本资源内容 提供了丰富的中英文帮助文档,可以帮助用户快速了解和使用 Ufun 的功能。用户可以通过资源中的提示,学习如何使用 Ufun 的 API 函数,以及如何实现特定的功能。

  • 【目标检测数据集】遥感类军用飞机检测数据集3800张20类别VOC+YOLO格式.zip

    【目标检测数据集】遥感类军用飞机检测数据集3800张20类别VOC+YOLO格式.zip 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3821 标注数量(xml文件个数):3821 标注数量(txt文件个数):3821 标注类别数:20 标注类别名称:["A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","A13","A14","A15","A16","A17","A18","A19","A20"] 每个类别标注的框数: A1 框数 = 1646 A2 框数 = 1726 A3 框数 = 1164 A4 框数 = 642 A5 框数 = 1262 A6 框数 = 436 A7 框数 = 680 A8 框数 = 944 A9 框数 = 1073 A10 框数 = 924 A11 框数 = 501 A12 框数 = 702 A13 框数 = 1652 A14 框数 = 177

  • grpcio-1.64.0-cp38-cp38-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics