延迟和响应时间有什么区别?

What is the difference between latency and response time?

我开始阅读著名的 Martin Fowler 书(企业应用程序架构模式)

我不得不提一下,我正在阅读翻译成我的母语的书,所以这可能是我误解的一个原因。

我找到了他们的定义(反向翻译成英文):

响应时间 - 处理一些外部请求的时间
延迟 - 收到任何响应之前的最短时间。

对我来说也是一样。你能强调一下区别吗?

一种看待这个问题的方法是说 传输延迟 + 处理时间 = 响应时间

传输延迟是 request/response 传输到 to/from 处理组件所花费的时间。然后你需要加上处理请求的时间。

举个例子,假设有 5 个人试图同时打印一张 sheet 的纸,而打印机需要 10 秒来处理(打印)每张 sheet。

打印请求被处理的人第一个看到延迟 0秒和处理 10 秒的时间 - 所以 response 10 秒的时间。

而处理打印请求的人 last 看到 latency 40 秒(他之前的 4 个人)和 处理 10 秒的时间 - 所以 响应 50 秒的时间。

这个 article 是关于差异的好读物,最好用这个简单的等式总结,

Latency + Processing Time = Response Time

哪里

  • 延迟 = 消息在两点之间传输的时间(例如在网络上、通过网关等)
  • 处理时间 = 处理消息所需的时间(例如,格式之间的转换、丰富或其他)
  • 响应时间 = 这些的总和。

如果处理时间相当短(在设计良好的系统中就是这种情况),那么出于实际目的,响应时间和延迟在感知时间流逝方面可能相同.也就是说,准确地说,使用定义的术语,不要混淆或混淆两者。

我用下面的例子来区分这个,

包裹已从 A-B-C 发送至 A-B 用了 10 秒,B(处理)用了 5 秒,B-C 用了 10 秒

延迟 = (10 + 10) 秒 = 20 秒

响应时间 = (10 + 5 + 10) 秒 = 25 秒

延迟 从源发送数据包到目的地接收它的时间

延迟是消息或数据包从其起点传输到目的地所花费的时间。这是一个简单而有用的定义,但它通常隐藏了很多有用的信息——每个系统都包含多个来源或组件,影响了传递消息所需的总时间,了解这些组件是什么很重要是什么决定了他们的表现。

让我们仔细看看 Internet 上典型路由器的一些常见贡献组件,这些组件负责在客户端和服务器之间中继消息:

传播延迟

消息从发送方传输到接收方所需的时间量,它是距离与信号传播速度的函数。

传输延迟

将所有数据包的位推入 link 所需的时间量,它是 link 的数据包长度和数据速率的函数。

处理延迟

处理数据包 header、检查 bit-level 错误并确定数据包的目的地所需的时间。

排队延迟

数据包在 queue 等待处理的时间。

客户端和服务器之间的总延迟是刚刚列出的所有延迟的总和 响应时间 从接收方发送数据包到从接收方接收数据包所花费的总时间

Q : Could you please highlite the difference?

让我开始使用来自 ITU-T(前 CCITT)专业人士的专业知识,他们几十年来在最高水平的专业经验上花费了数千人*年的努力,并开发了一个准确的以及衡量两者的负责任的方法:

为应对这种情况采用了哪些行业标准?

自早年国际行业标准(好吧,早在 60 年代的某个地方),这些行业专业人士就创造了以可重复和可重新检查的方式测试复杂系统的概念。

 System-under-Test (SuT), inter-connected and inter-acting across a mediation service mezzo-system

 SuT-component-[A]
 |
 +------------------------------------------------------------------------------------------------------------[A]-interface-A.0
 |           +------------------------------------------------------------------------------------------------[A]-interface-A.1
 |           |
 |           |                                                                      SuT-component-[B]
 |           |                                                                      |
 |           |                                                                      +-------------------------[B]-interface-B.1
 |           |                                                                      |               +---------[B]-interface-B.0
 |           |                          ????????????????                            |               |
 |           |                          ? mezzo-system ?                            |               |
 +-----------+                          ????????????????                            +---------------+
 |           | ~~~~~~~~~~~~~~~~~~~~~~~~ ??? ...  ... ???  ~~~~~~~~~~~~~~~~~~~~~~~~  |               |
 |           | ~~<channel [A] to ???>~~ ??? ...  ... ???  ~~<channel ??? to [B]>~~  |               |
 |           | ~~~~~~~~~~~~~~~~~~~~~~~~ ??? ...  ... ???  ~~~~~~~~~~~~~~~~~~~~~~~~  |               |
 +-----------+                          ????????????????                            +---------------+
 |            

无论这种方法看起来多么正式,在制定(设计、测试和验证时相同)与 SuT 组件、SuT 接口、SuT-外系统间相互作用的渠道和限制,包括对任何外部(通常是不利的)事件出现的反应的限制。noise/disturbing 事件。

最后,为了清楚起见,可以根据一组明确定义和记录的 REFERENCE_POINT(s)[= 声明预期的 SuT 行为的所有部分58=],标准定义并记录了所有属性。

经验法则:

LATENCY,通常表示为TRANSPORT-LATENCY(在一对[=74=之间]s ) 与跨某种渠道的琐碎/原始事件传播的持续时间有关,其中事件处理不会转换传播事件的内容。 (参考内存访问延迟 - 不重新处理数据,而只是传送数据,需要一些时间 "make it" )

PROCESSING 是指在 SuT 组件内以某种非凡的方式转换事件。

响应时间(在同一 SuT 组件的 REFERENCE_POINT(s) 上观察到)意味着某种相当复杂的结果持续时间,End端到端的事务处理,这既不是跨通道的微不足道的 TRANSPORT LATENCY,也不是简单的 in-SuT 组件 PROCESSING,而是一个几个(可能很多)这种相互作用的步骤的某种组合,沿着因果链工作(在需要时添加随机刺激,以表示 noise/errors 干扰)。 (参考数据库引擎响应时间随着工作负载的增加而增加,这是由于某些处理资源的并发使用增加,这些资源在交付结果之前需要进行此类请求的信息内部检索,内部重新处理和最终交付重新处理"answer" 给请求方)

 |
 |            SuT_[A.0]: REFERENCE_POINT: receives an { external | internal } <sourceEvent>
 |           /
 |          /         _SuT-[A]-<sourceEvent>-processing ( in SuT-[A] ) DURATION
 |         /         /
 |        /         /                          _an known-<channel>-transport-LATENCY from REFERENCE_POINT SuT-[A.1] to <mezzo-system> exosystem ( not a part of SuT, yet a part of the ecosystem, in which the SuT has to operate )
 |       /         /                          /
 |      /         /                          /                  _a mezzo-system-(sum of all)-unknown-{ transport-LATENCY | processing-DURATION } duration(s)
 |     /         /                          /                  /
 |    /         /                          /                  /                         _SuT_[B.1]: REFERENCE_POINT: receives a propagated <sourceEvent>
 |   /         /                          /                  /                         /
 |  /         /                          /                  /                         /                _SuT_[B.0]: REFERENCE_POINT: delivers a result == a re-processed <sourceEvent>
 | /         /                          /                  /                       | /              | /
 |/         /|                         /................  /                        |/               |/
 o<_________>o ~~< chnl from [A.1] >~~? ??? ...  ... ??? ?~~<chnl to [B.1]>~~~~~~? o<______________>o
 |           |\                                                                   \                \
 |           | \                                                                   \                \_SuT-[B]-<propagated<sourceEvent>>-processing ( in SuT-[B] ) DURATION
 |           |  \                                                                   \
 |           |   \_SuT_[A.1]: REFERENCE_POINT: receives                              \_an known-<channel>-transport-LATENCY from <mezzo-system to REFERENCE_POINT SuT_[B.1]
 |           |
 |           |                                                                     |                |
 o<--------->o-----SuT-test( A.0:A.1 )                                             |                |
 |           |                                                                     |                |
 |           |                                                                     o<-------------->o---SuT-test( B.1:B.0 )
 |           |                                                                     |                |
 |           o<----may-test( A.1:B.1 )-------------------------------------------->o                |
 |           |         exo-system that is outside of your domain of control,       |                |
 |                     indirectly, using REFERENCE_POINT(s) that you control                        |
 |                                                                                                  |
 |                                                                                                  |
 o<-----SuT-End-to-End-test( A.0:B.0 )------------------------------------------------------------->o
 |                                                                                                  |

使用此 ITU-T / CCITT 方法,定义明确的 响应时间 测试的一个示例是完成交易的测试,它将测量交付之间的净持续时间REFERENCE_POINT [A.0] 上的源事件(进入 SuT-component-[A] )并在这里等待,直到整个 SuT 提供来自任何远程部分的答案(如来自 [A] 的交付-to-[B],加上 SuT-component-[B] 内部的处理和从 [B]-back-to-[A] 的答案传递)直到在给定的 [=74= 上收到预期的响应](无论是同一个 [A.0] 还是另一个特定用途的 [A.37])。

尽可能明确可以避免未来潜在的误解(国际行业标准一直在努力避免这种误解)。

所以要求表达如下:

1) RESPONSE_TIME( A.0:A.37 ) 必须在 125 [ms]
下 2) 在每个 BAU

不到 0.1% 的情况下,净 TRANSPORT LATENCY( A.1:B.1 ) 应该超过 30 [ms]

清晰可靠(且易于测量),感兴趣的每个人都可以解释 SuT 设置和测试结果。

满足这些明确的要求 使这样定义的 SuT 行为有资格安全地符合一组预期的行为,或者让专业人员廉价地检测、记录和取消那些,谁不要。

正如 Martin Kleppman 在他的《设计数据密集型应用程序》一书中所说:

延迟 是请求等待处理的持续时间 - 在此期间它是潜伏的,等待服务。用于诊断目的,例如:延迟峰值

响应时间 是客户端发送请求和接收响应之间的时间。它是往返延迟和服务时间的总和。用于描述应用程序的性能。