热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

什么是“太长”?

我只是在重新阅读LeslieLamport的经典论文《时间,时钟和分布式系统中的事件排序》。本文的大部分内容讨论如何管理逻辑时钟而不是物理时钟排序的事件。当然

我只是在重新阅读Leslie Lamport的经典论文《 时间,时钟和分布式系统中的事件排序》 。 本文的大部分内容讨论如何管理逻辑时钟而不是物理时钟排序的事件。 当然,自从撰写本文以来,关于如何充分利用同步良好的物理时钟,也进行了许多有趣的学术和实践工作(显然,所有的魔术都在于定义“良好同步”的含义以及如何实现)。 )。

无论如何,我最震惊的是他在论文结尾处写的一段话:

失败问题是一个棘手的问题,任何详细讨论都超出了本文的范围。 我们将观察到,整个失败的概念仅在物理时间的背景下才有意义。 没有物理时间,就无法将失败的进程与仅在事件之间暂停的进程区分开。 用户只能因为等待响应的时间太长才知道系统“崩溃”。

那段有很多智慧!

从编写串行,同步算法到编写异步,分布式系统的过程中,至关重要的是要了解在简化的界面下可以从哪里抽象出复杂性,以及在什么地方需要接受要处理的根本不同的东西。 按照约定调用本地同步接口时,您会在一定时间内获得成功或失败响应。 当您将消息发送到分布式组件时,它本质上是异步的。 即使存在基础连接的抽象和声称可以保证成功或失败响应的协议,但在物理级别上,您只是在发送和接收离散消息。 最终,您需要准备仅仅由于某些事情花费了“太长时间”而认识到失败。 重要的是,“失败”可能是未能接收到您的消息,未能处理您的消息或仅仅是未能提供响应(这导致了幂等的概念,但这是一个单独的主题)。

但是“太长”是什么?

在这一点上,您似乎只有两种选择-您使用一些超时(根据某些历史数据流进行硬编码,配置或动态计算),或者将有关“过长”的决定传播(平移)到较高级别的系统,通常最终是用户。 然后,用户根据自己的紧迫性,不耐烦或对某些带外信号可能存在​​的系统状态的外部理解,来决定何时放弃或明确重试(也许他们了解到,来自该物业角落的无线信号)总是粗略的)。

我们使用了几种常见的机制来解决这一基本挑战。

最通用的策略是尝试减少系统中不同代理之间的预期响应时间差异。 这不会改变问题的总体形状,但实际上可以使用更紧密的超时范围,并为通过系统提供反馈和持续的进度流提供了机会,以便为具有挑战性的“过长”评估提供输入。

响应时间存在根本差异(例如,您可能要求分布式代理执行一系列非常简单的事情或非常困难的耗时的事情)时,一种常见的技术是使代理做出简单的“得到”响应一旦请求被接受并排队。 那时,分布式代理处于处理该请求的显式可发现状态,并且稍后将移至反映请求完成的显式可发现状态。 以这种方式对交互进行建模的优势在于,它反映了整个系统中正在发生的事情的真实性。 Microsoft为适合Microsoft OneAPI设计模式的REST API开发的指南建议对完成时间差异较大的请求采用这种通用方法。

此技术的一种不太有效的变体是提供有关操作进度的持续反馈(通过移动经过明确的不同状态的反馈,提供一些持续的活动指示或明确的进度百分比)。 在此方法的基础上,您具有相同的基本系统结构-代理在显式系统状态中移动。

我的经验是,最好使用第一种技术对系统进行显式建模。 您专注于对系统本身建模,而不是对系统上执行的操作进度进行建模。 它通常需要更多的初始基础架构,但会导致系统组件之间的耦合松散。 尤其是在我们的多设备环境中,随着来来往往的代理以及具有间歇性和变化连接性的代理,将系统建模为不​​同的可发现状态,而不是使用显式的1–1通讯和反馈通道来使系统更加健壮和灵活。

仅在物理时间的上下文中故障才有意义的这种观点是我们构建的系统的真正“物理”发挥作用的那些关键位置之一。 我们生活在爱因斯坦的宇宙中,我们建立的系统需要反映这一点。

From: https://hackernoon.com/what-is-too-long-4e15418f10ce



推荐阅读
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • VPX611是北京青翼科技推出的一款采用6U VPX架构的高性能数据存储板。该板卡搭载两片Xilinx Kintex-7系列FPGA作为主控单元,内置RAID控制器,支持多达8个mSATA盘,最大存储容量可达8TB,持续写入带宽高达3.2GB/s。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • 本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ... [详细]
author-avatar
梦天使悠然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有