系统设计中的延迟

小夏 科技 更新 2024-01-29

想象一下有水流过的管道。 水流过管道的速度可能会有所不同,即有时它流得很快,有时它流得很慢。 此概念类似于系统设计中的延迟。 延迟决定了数据从系统一端传输到另一端的速度。

延迟是衡量客户端和服务器之间数据传输速度的指标。 它与系统的性能直接相关:更低的延迟意味着更好的性能。

每当发出请求时,浏览器(客户端)都会向服务器发送信号。 服务器处理请求,检索信息,并将其发送回客户端。 因此,延迟是客户端启动请求和服务器将结果返回给客户端之间的时间间隔,即客户端与服务器之间的往返时间。

我们的最终目标是毫不拖延地开发一个系统,但各种瓶颈阻止了我们开发这样一个理想的系统。 核心思想很简单:我们可以尝试将其最小化。 系统延迟越低,处理请求所需的时间就越少。

延迟只不过是客户端在发起请求后必须等待多长时间才能收到结果的估计值。 让我们举个例子来看看它是如何工作的。

假设您正在与电子商务互动,您喜欢某样东西,并将其添加到购物车中。 现在,当您按下“添加到购物车”按钮时,将发生以下事件:

按下“添加到购物车”按钮后,延迟时钟开始滴答作响,浏览器向服务器发起请求。

服务器确认请求并对其进行处理。

服务器响应请求,响应到达您的浏览器,并将产品添加到您的购物车中。

您可以在第一步启动秒表,在最后一步停止秒表。 这种时间差称为延迟。

网络中的延迟取决于各种参数。 导致延迟的主要因素之一是出站呼叫。 在前面添加购物车 习 的示例中,当您单击浏览器上的按钮时,请求将发送到后端的服务器,该服务器再次在内部调用多个服务进行计算(并行或顺序),然后等待响应。 所有这些都会增加延迟。

延迟主要由以下因素引起:

传输介质传输介质是起点和终点之间的物理路径。 因此,系统延迟取决于用于传输请求的媒体类型。 广域网和光缆等传输介质应用广泛,但各有其局限性。

传播:它是指数据包从一个源传输到另一个源所需的时间。 因此,系统延迟很大程度上取决于通信节点之间的距离。 节点距离越远,延迟越大。

路由器路由器是通信中的重要组件,需要一些时间来分析数据包的标头信息。 因此,延迟取决于路由器处理请求的效率。 路由器到路由器跃点会增加系统延迟。

存储延迟:系统延迟还取决于所使用的存储系统的类型,因为处理和返回数据可能需要一些时间。 因此,访问存储的数据会增加系统的延迟。

有许多方法可以量化延迟。 三种最常见的方法是:

ping:Ping 是用于测量延迟的最常用实用程序。 它将数据包发送到某个地址并查看响应速度。 它测量数据从源传输到目标并返回源所需的时间。 ping 速度越快,连接越敏感。

traceroute:TraceRoute 是另一个用于测试延迟的实用程序。 它还使用数据包来计算路由到目标时每个跃点所花费的时间。

mtr:MTR 是 ping 和 traceroute 的组合。 MTR 提供网络中数据包从一端传输到另一端所需的每个跃点的报告列表。 该报告通常包含丢失百分比、平均延迟等详细信息。

延迟限制了系统的性能,因此需要对其进行优化。 我们可以通过以下方式减少延迟:

http/2:我们可以通过使用 HTTP 2 来减少延迟。 它允许并行传输,并最大限度地减少从发送者到接收者的往返。

更少的外部 HTTP 请求由于第三方服务,延迟增加。 通过减少外部 HTTP 请求的数量,可以优化系统延迟,因为第三方服务可能会影响应用程序的速度。

cdn:CDN 将资源存储在世界各地的多个位置,并减少请求和响应传输时间。 因此,靠近客户端的缓存资源可用于获取请求,而不是返回到源服务器。

浏览器缓存浏览器缓存还可以通过在本地缓存特定资源来减少对服务器发出的请求数,从而帮助减少延迟。

磁盘 i o:我们可以使用直写缓存或内存数据库,或者在可能的情况下合并写入,或者使用快速存储系统而不是频繁写入磁盘,例如 SSD。

您还可以通过在存储层、数据建模、出站呼叫扇出等方面做出更明智的选择来优化延迟。 以下是在应用程序级别优化延迟的一些方法:

低效的算法是最明显的延迟。 有必要避免不必要的循环或昂贵的嵌套操作。

使用避免锁定的设计模式,因为多线程锁会引入延迟。

使用异步编程模型可以更好地利用硬件资源,因为阻塞操作可能会导致等待时间过长。

延迟是一个与每个系统的设计相关的概念。 人们永远无法构建一个完全无延迟的系统,但它可以很容易地进行优化。 借助现代硬件和计算效率高的机器,延迟不再是系统的瓶颈。

优质作者名单

相似文章

    系统设计中的 WebSocket

    传统的 Web 模型是围绕 HTTP 请求和响应范式构建的。在 HTTP 连接中,客户端向服务器发送请求,服务器使用请求的数据进行响应。这发生在每个请求和响应的单独连接中,这意味着 HTTP 不太适合需要连续双向通信的实时应用程序。为了用 HTTP 解决这个问题,我们使用 WebSockets。We...

    如何在系统设计中选择合适的数据库?

    数据库是世界上最复杂的技术系统的关键组件,它们的使用方式对其性能 可扩展性和一致性有重大影响。在本文中,我们概述了在系统设计面试中需要了解的最关键的数据库主题。数据库负责在最基本的级别存储和检索应用程序的数据。由于数据库是处理对物理数据存储的访问的程序,因此它有时称为数据库管理系统 DBMS 数据库...

    系统设计通用流程 改进系统设计流程

    大家好,我是篱笆老师。在上一课中,我们介绍了系统设计常用流程的前个步骤 第一步是澄清,第二步是需求分析,第三步是成本估算。一般的流程是,我们从用户开始,然后用户可能会向几个低平衡器或 API 网关发出请求,然后我们的 api 网关或低平衡器会将这些请求分发到许多不同的服务器。这些服务器可以与反手或数...

    分布式系统设计中的节流和速率限制

    速率限制是一种技术,用于控制允许在特定时间段内访问系统或网络的流量。它通过限制事件发生的速度来帮助我们防止过度使用或误用资源。这可用于优化系统性能并确保资源在用户之间公平分配。例如,您可以使用速率限制来防止有人重复尝试使用错误的密码登录帐户。如果用户尝试在特定时间范围内过于频繁地登录,则可能会阻止其...

    VIS系统设计

    VIS系统是一项创新的设计技术,它将彻底改变我们对未来的想象和体验。深圳市创边网络推广公司。它是一种智能系统,可以将虚拟现实与现实世界相结合,让我们在数字世界中自由移动。故事发生在未来的某一天,在一个热闹的城市中心,人们带着新的VIS系统走在街上。VIS系统是由顶尖科技团队研发的技术产品,旨在通过科...