`
youyu4
  • 浏览: 451870 次
社区版块
存档分类
最新评论

互联网一致性架构设计 -- 消息时序一致性

 
阅读更多

互联网一致性架构设计 -- 消息时序一致性

 

 

为什么时序难以保证,消息一致性难?

 

 

    原因

 

  • 时钟不一致
  • 多客户端(发送方)
  • 服务集群(多接收方)
  • 网络传输与多线程

 

    时钟不一致

 

       分布式环境下,有多个客户端、有web集群、service集群、db集群,他们都分布在不同的机器上,机器之间都是使用的本地时钟,而没有一个所谓的“全局时钟”,所以不能用“本地时间”来完全决定消息的时序。



 

 

   

    多客户端(发送方)

 

       绝对时序上,APP1先发出msg1,APP2后发出msg2,都发往服务器web1,网络传输是不能保证msg1一定先于msg2到达的,所以即使以一台服务器web1的时间为准,也不能精准描述msg1与msg2的绝对时序。


     
 

 

 

    服务集群(多接收方)

 

       绝对时序上,web1先发出msg1,后发出msg2,由于网络传输及多接收方的存在,无法保证msg1先被接收到先被处理,故也无法保证msg1与msg2的处理时序。



 

 

 

    网络传输与多线程

 

       web1先发出msg1,后发出msg2,即使msg1先到达(网络传输其实还不能保证msg1先到达),由于多线程的存在,也不能保证msg1先被处理完。



 

 

 

    怎么保证绝对时序

 

       可以通过只有一个发送方,一个接收方,上下游连接只有一条连接池,通过阻塞的方式通讯,来保证先发出的消息先处理。但是吞吐量会非常低,而且单发送方单接收方单连接池的假设不太成立,高并发高可用的架构不会允许这样的设计出现。

 

 

 

 

 

优化方案

 

    以客户端或者服务端的时序为准

 

       要“有序”,先得有衡量“有序”的标尺,可以是客户端标尺,可以是服务端标尺。

 

       多客户端、多服务端导致“时序”的标准难以界定,需要一个标尺来衡量时序的先后顺序,可以根据业务场景,以客户端或者服务端的时间为准,例如:

 

  1. 邮件展示顺序,其实是以客户端发送时间为准的,潜台词是,发送方只要将邮件协议里的时间调整为1970年或者2970年,就可以在接收方收到邮件后一直“置顶”或者“置底”
  2. 秒杀活动时间判断,肯定得以服务器的时间为准,不可能让客户端修改本地时间,就能够提前秒杀

 

 

    服务端能够生成单调递增的id

 

       这个是毋庸置疑的,不展开讨论,例如利用单点写db的seq/auto_inc_id肯定能生成单调递增的id,只是说性能及扩展性会成为潜在瓶颈。对于严格时序的业务场景,可以利用服务器的单调递增id来保证时序。

 

 

 

    大部分业务能接受误差不大的趋势递增id

 

       消息发送、帖子发布时间、甚至秒杀时间都没有这么精准时序的要求:

 

  1. 同1s内发布的聊天消息时序乱了
  2. 同1s内发布的帖子排序不对
  3. 用1s内发起的秒杀,由于服务器多台之间时间有误差,落到A服务器的秒杀成功了,落到B服务器的秒杀还没开始,业务上也是可以接受的(用户感知不到)

       所以,大部分业务,长时间趋势递增的时序就能够满足业务需求,非常短时间的时序误差一定程度上能够接受。

 

 

 

    利用单点序列化,可以保证多机相同时序

 

  1. 先在一台机器上序列化操作
  2. 再将操作序列分发到所有的机器,以保证多机的操作序列是一致的,最终数据是一致的

    单点序列化,是一种常见的保证多机时序统一的方法,典型场景有db主从一致,gfs多文件一致。

 

 

    典型场景一:数据库主从同步

 


 

       数据库的主从架构,上游分别发起了op1,op2,op3三个操作,主库master来序列化所有的SQL写操作op3,op1,op2,然后把相同的序列发送给从库slave执行,以保证所有数据库数据的一致性,就是利用“单点序列化”这个思路。

 

 

    典型场景二:GFS中文件的一致性



 

       GFS(Google File System)为了保证文件的可用性,一份文件要存储多份,在多个上游对同一个文件进行写操作时,也是由一个主chunk-server先序列化写操作,再将序列化后的操作发送给其他chunk-server,来保证冗余文件的数据一致性的。

 

 

 

    单对单聊天,怎么保证发送顺序与接收顺序一致

 

       只需保证发出的时序与接收的时序一致,可以利用客户端seq。

 

  1. 如果利用服务器单点序列化时序,可能出现服务端收到消息的时序为msg3,msg1,msg2,与发出序列不一致
  2. 业务上不需要全局消息一致,只需要对于同一个发送方A,ta发给B的消息时序一致就行,常见优化方案,在A往B发出的消息中,加上发送方A本地的一个绝对时序,来表示接收方B的展现时序


 

       潜在问题:如果接收方B先收到msg3,msg3会先展现,后收到msg1和msg2后,会展现在msg3的前面。无论如何,是按照接收方收到时序展现,还是按照服务端收到的时序展现,还是按照发送方发送时序展现,是pm需要思考的点,技术上都能够实现(接收方按照发送时序展现是更合理的)。

 

 

 

    群聊消息,怎么保证各接收方收到顺序一致

 

       只需保证所有接收方消息时序一致,需要利用服务端seq,方法有两种,一种单点绝对时序,另一种id串行化。

 

    方法一:服务器单点

 

  1. sender1发出msg1,sender2发出msg2
  2. msg1和msg2经过接入集群,服务集群
  3. service层到底层拿一个唯一seq,来确定接收方展示时序
  4. service拿到msg2的seq是20,msg1的seq是30
  5. 通过投递服务讲消息给多个群友,群友即使接收到msg1和msg2的时间不同,但可以统一按照seq来展现

     
 

    缺点:这个生成全局递增序列号的服务很容易成为系统瓶颈。

 

 

    方法二:根据id穿行化

 

       service层不再需要去一个统一的后端拿全局seq,而是在service连接池层面做细小的改造,保证一个群的消息落在同一个service上,这个service就可以用本地seq来序列化同一个群的所有消息,保证所有群友看到消息的时序是相同的。



 

 

 

 

总结

 

    1. 分布式环境下,消息的有序性是很难的,原因多种多样:时钟不一致,多发送方,多接收方,多线程,网络传输不确定性等

 

    2. 要“有序”,先得有衡量“有序”的标尺,可以是客户端标尺,可以是服务端标尺

 

    3. 大部分业务能够接受大范围趋势有序,小范围误差;绝对有序的业务,可以借助服务器绝对时序的能力

 

    4. 单点序列化,是一种常见的保证多机时序统一的方法,典型场景有db主从一致,gfs多文件一致

 

    5. 单对单聊天,只需保证发出的时序与接收的时序一致,可以利用客户端seq

 

    6. 群聊,只需保证所有接收方消息时序一致,需要利用服务端seq,方法有两种,一种单点绝对时序,另一种id串行化

  • 大小: 30 KB
  • 大小: 19.2 KB
  • 大小: 20.3 KB
  • 大小: 23 KB
  • 大小: 91.1 KB
  • 大小: 59 KB
  • 大小: 75.4 KB
  • 大小: 154.5 KB
  • 大小: 104.3 KB
分享到:
评论

相关推荐

    实训商业源码-橙色购物中心应用程序移动个人中心页面-毕业设计.zip

    实训商业源码-橙色购物中心应用程序移动个人中心页面-毕业设计.zip

    mamba 讲解说明ppt

    关于mamba的一些内容,起源创新点等等

    全国大学生电子设计竞赛介绍(20190716151135).pdf

    电子设计竞赛相关资源

    基于机器学习的音频情感分析系统Python源码(高分项目)

    基于机器学习的音频情感分析系统Python源码(高分项目),能够从语音中识别出四种基本情感:愤怒、快乐、中性和悲伤。个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统P

    BusHound-v6.0.1

    BusHound_v6.0.1

    实训商业源码-Tudoucms跑腿同学-毕业设计.zip

    实训商业源码-Tudoucms跑腿同学-毕业设计.zip

    Post 3_ Your Channel, PRBS and the Eye.pdf

    Post 3_ Your Channel, PRBS and the Eye.pdf

    【车联网领域】智能网联汽车产业发展行动计划(2025-2030年):技术突破与生态构建推动汽车产业数字化转型

    内容概要:本文介绍了《车联网(智能网联汽车)产业发展行动计划(2025-2030年)》的内容,涵盖发展背景、现状、目标、重点任务及保障措施。全球智能网联汽车成为汽车产业变革的核心方向,中国通过“车路云一体化”试点等初步形成全产业链生态优势。面对技术瓶颈、标准缺失、商业模式不清等挑战,中国设定了到2030年建成全球领先智能网联汽车产业体系的目标,包括L3级自动驾驶规模化商用、智能网联汽车新增产值突破1万亿元等阶段性目标。重点任务涉及技术突破(如AI、通信、芯片等)、基础设施建设(如智能化道路、云控平台等)、标准与法规完善、示范应用与商业化、产业协同与生态构建。保障措施包括政策支持、人才培育、安全保障和宣传推广。最终目标是实现经济效益、社会效益和战略意义,推动中国从“跟跑”向“领跑”跨越。; 适合人群:对智能网联汽车行业感兴趣的各界人士,包括政府决策者、企业管理人员、科研人员、投资者等。; 使用场景及目标:①帮助政府决策者了解智能网联汽车的发展方向和政策措施;②为企业管理人员提供行业趋势和发展机会的参考;③为科研人员明确研究重点和技术突破方向;④为投资者提供投资领域的指导。; 其他说明:本文详细阐述了智能网联汽车产业的发展规划,强调技术创新、生态协同和安全可控,旨在推动中国智能网联汽车产业的全面发展,为全球汽车产业变革贡献中国方案。

    在PYNQ开发板上构建用于交通标志识别的卷积神经网络——附源代码与项目指南(高分作品)

    项目描述:在ZYNQ的PL端部署基于HLS开发的卷积加速器和池化加速器,在PS端利用Python编程调用这些加速器完成交通标志识别。模型使用德国交通标志数据集(GTSRB)训练,精度达到97%。 文件目录说明: - HLS:包含卷积加速器和池化加速器的C语言代码。 - Train:包含训练所用的Python代码和最终模型参数文件。 - jupyter_notebooks:包含上传到PYNQ开发板上的Python代码文件和模型参数bin文件。上传后可使用Jupyter Notebook运行‘Traffic-Signs-Recognition.ipynb’进行测试,也可直接运行其他相关文件。。内容来源于网络分享,如有侵权请联系我删除。

    Maxwell永磁同步电机电磁振动噪声仿真分析及优化策略

    内容概要:本文详细探讨了Maxwell永磁同步电机的电磁振动噪声问题,利用Maxwell软件进行仿真分析,涵盖电磁场分布、电磁振动特性和噪声水平等方面的数据采集与分析。基于仿真结果,提出了通过调整设计参数(如线圈匝数、电流大小)和改进结构、材料等方法来优化电磁力和降低噪声的具体策略。并通过实际案例展示了优化效果,最终提升了电机的性能、运行平稳性和市场竞争力。 适合人群:从事电机设计、制造及相关领域的工程师和技术人员,尤其是对电磁振动噪声有研究兴趣的专业人士。 使用场景及目标:适用于需要深入了解Maxwell永磁同步电机电磁振动噪声机制及其优化方法的研究项目或产品开发阶段,旨在提高电机性能、降低能耗和减少噪声污染。 其他说明:本文不仅提供了理论分析,还结合具体实例进行了详细的优化实践,对于理解和解决类似问题具有重要参考价值。

    商用车P2并联混合动力系统HCU控制策略解析与建模指南

    内容概要:本文详细介绍了商用车P2并联混合动力系统的HCU(整车控制器)控制策略及其建模方法。首先探讨了模式切换策略,针对不同工况如车辆速度、电池电量等因素进行模式选择。接着深入讲解了扭矩分配策略,考虑到了温度变化以及坡道情况对扭矩分配的影响。此外,还讨论了能量回收策略,利用预测性制动提高能量利用率。最后提及了故障降级策略,确保系统在出现故障时能够快速响应。文中提供了多个具体代码片段来辅助理解和实施这些策略。 适合人群:从事汽车电子控制系统开发的技术人员,尤其是专注于混合动力系统的研究人员和工程师。 使用场景及目标:帮助开发者将理论性的功能规范转化为实际可用的控制模型,适用于商用车P2并联混合动力系统的开发过程中,旨在提升系统的效率和平顺性。 其他说明:建议读者在实践中不断调整和完善模型参数,以适应不同的应用场景和技术要求。同时,在构建模型时应注意保持良好的可追溯性和验证性,以便后续维护和改进。

    信捷PLC与触摸屏程序助力STC四轴机械手实现高效冲压自动化上下料

    内容概要:本文介绍了信捷标准化PLC程序与信捷触摸屏程序在STC四轴机械手中的应用,详细解析了程序结构及其功能特点。PLC程序包括初始化、主程序和子程序,确保机械手动作精准协调;触摸屏程序提供人机交互界面,便于监控和控制机械手的操作。两者结合使机械手在冲压上下料环节替代人工,提高生产效率和质量,适用于大批量、重复性强的作业环境。文中强调了程序的清晰注释、库文件加密的安全措施,以及机械手的定位精度、稳定性、可靠性等优点。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和机械手应用感兴趣的读者。 使用场景及目标:适用于需要提升冲压生产线自动化水平的企业,旨在减少人工干预,提高生产效率和产品一致性,降低故障率并保障生产安全。 其他说明:尽管库文件已加密,但不影响程序的正常编写和运行,确保了系统的安全性与稳定性。

    STM32运动控制:四轴联动、插补与电机控制全解析

    内容概要:本文详细介绍了基于STM32的四轴联动运动控制系统。系统不仅支持直线插补和圆弧插补功能,还实现了对四轴电机的精确控制,包括加减速控制和位置环控制。文中提供了详细的原理图和注释齐全的源代码,以及经过严格测试和优化的量产工控机代码,确保了系统的稳定性和高性能。此外,系统采用了高精度的编码器进行实时反馈,进一步提升了电机的位置控制精度。 适合人群:从事嵌入式系统开发、运动控制领域的工程师和技术爱好者。 使用场景及目标:适用于需要开发复杂运动控制系统的项目,如工业自动化设备、机器人等领域。目标是帮助读者理解和掌握四轴联动运动控制系统的原理和实现方法,从而能够独立开发类似的控制系统。 其他说明:本文提供的资料具有很高的实用性和参考价值,读者可以通过研究和实践,深入理解STM32在运动控制中的应用,并根据自身需求进行二次开发和定制。

    实训商业源码-分期付款应用程序手机模板-毕业设计.zip

    实训商业源码-分期付款应用程序手机模板-毕业设计.zip

    基于博途软件的PLC自助洗车机控制系统:全仿真程序、画面、接线图及IO分配表

    内容概要:本文介绍了基于PLC(可编程逻辑控制器)的自助洗车机控制系统的设计与实现。系统采用博途软件编写,实现了从启动到结束的完整洗车流程,包括喷水、刷洗、喷洒清洁剂、吹干等步骤。文中详细描述了洗车机的动作流程、原点复位设计、系统架构、代码与控制逻辑分析,并提供了人机界面、接线图和IO分配表等辅助资料。此外,还强调了系统的稳定性和优质售后服务。 适合人群:从事自动化控制领域的工程师和技术人员,特别是对PLC编程和洗车机控制系统感兴趣的读者。 使用场景及目标:适用于需要了解或开发自助洗车机控制系统的场合,旨在帮助读者掌握PLC编程技巧和洗车机的工作原理,提高系统的稳定性和可靠性。 其他说明:本文不仅提供了详细的硬件和软件设计方案,还涵盖了故障处理和售后服务的内容,确保系统的长期稳定运行。

    实训商业源码-无线支付-毕业设计.zip

    实训商业源码-无线支付-毕业设计.zip

    第十四届全国大学生智能汽车竞赛室外光电组的单片机硬件原理图

    内容概要:本文档为《单片机硬件原理图(参考).pdf》,主要提供了用于第十四届全国大学生智能汽车竞赛室外光电组的单片机硬件原理图。文档详细列出了单片机电路的关键组件及其连接方式,包括但不限于复位电路、烧写器接口、舵机接口、电调接口、IIC接口、SCI接口、时钟电路、PWM接口等。此外,还展示了单片机与雷达、电脑之间的USB转串口电路,以及相关的电源管理电路和信号处理电路。文档中多次提及了具体元器件型号和参数,如电容、电阻、晶体管等,并附带了详细的引脚定义和连接关系。文档由北京钢铁侠科技有限公司提供,地址位于北京市海淀区上地信息路12号1层E区E105室。 适合人群:电子工程专业学生、参赛选手及指导教师,特别是对单片机硬件设计有一定基础的人群。 使用场景及目标:①帮助参赛选手理解单片机硬件架构和各模块的功能;②为实际电路板的设计与焊接提供详细的参考依据;③辅助进行故障排查和性能优化。 阅读建议:本原理图较为复杂,建议读者先熟悉各个模块的基本功能,再逐步深入理解具体的电路连接和参数设置。同时,可以结合实际硬件进行对照学习,确保理论与实践相结合。

    基于纳什讨价还价的多微网间合作博弈模型:实现可再生能源灵活消费与成本优化

    内容概要:本文探讨了在日前电力批发市场中,多个微电网通过建立合作联盟,利用纳什讨价还价理论进行合作博弈,从而实现区域内可再生能源的灵活消费并降低成本。文章详细介绍了合作博弈模型的构建及其机制,分析了各微电网如何通过协商确定最优交易力和电价,最终达到利益最大化。研究表明,这种合作模式不仅提高了能源利用效率,还增强了微电网的市场竞争力。 适合人群:从事电力系统研究、分布式能源管理、智能电网规划的专业人士及研究人员。 使用场景及目标:适用于希望深入了解微电网合作博弈机制及其应用的研究者和技术人员,目标是探索如何通过合作博弈优化可再生能源的消费和成本。 其他说明:文章强调了合作博弈对于推动可再生能源市场化的重要性,并提出了未来进一步完善的建议。

    ThreadX 6.4在ARM A7平台(正点原子imx6ull)的移植

    ThreadX 6.4在ARM A7平台(正点原子imx6ull)的移植

    信號完整性小技巧 #5 AMI SIMULATION.pdf

    信號完整性小技巧 #5 AMI SIMULATION.pdf

Global site tag (gtag.js) - Google Analytics