本周系统设计复习:

  • 减少延迟的 5 大策略
  • 负载均衡器的实际用例
  • 前 4 个数据分片算法
  • C++ 的 8 大用例
  • 100 秒了解 Apache Kafka

减少延迟的 5 大策略

10 年前,亚马逊发现每 100ms 的延迟损失他们 1% 的销售额。

以今天的条件计算,那是惊人的 57 亿美元。

对于大规模面向用户的系统,高延迟是巨大的收入损失。

以下是减少延迟的顶级策略:

1. 数据库索引

  • 为常用查询创建索引
  • 避免过度索引(写入开销)
  • 使用复合索引用于多列查询
  • 定期分析和优化索引

2. 缓存

  • 内存缓存(Redis、Memcached)
  • CDN 用于静态内容
  • 应用层缓存
  • 数据库查询缓存

3. 负载均衡

  • 在多个服务器之间分发流量
  • 减少单个服务器负载
  • 提高可用性和响应性

4. 内容分发网络(CDN)

  • 在全球边缘位置缓存内容
  • 减少用户到服务器的距离
  • 加速静态和动态内容交付

5. 异步处理

  • 后台处理非关键任务
  • 消息队列用于解耦
  • 事件驱动架构

其他策略

  • 数据压缩:减少传输大小
  • 连接池:重用数据库连接
  • HTTP/2:多路复用请求
  • 预取:提前加载数据

负载均衡器用例

负载均衡器本质上是动态和自适应的,设计用于有效解决网络流量和服务器工作负载管理中的多个目的和用例。

6 大用例

  1. 故障处理:自动将流量从故障组件重定向以维持连续服务并减少服务中断。

  2. 实例健康检查:持续评估实例的功能,仅将传入请求定向到完全运行和高效的实例。

  3. 平台特定路由:将来自不同设备类型(如移动设备、桌面)的请求路由到专门的后台系统,基于平台提供定制响应。

  4. SSL 终止:处理 SSL 流量的加密和解密,减少后台基础设施的处理负担。

  5. 跨区域负载均衡:在各种地理或网络区域之间分发传入流量,增加系统的弹性和处理大量请求的能力。

  6. 用户粘性:通过一致地将来自特定用户的请求定向到指定的后台服务器来维护用户会话完整性和定制用户交互。

数据分片算法

我们处理海量数据。通常我们需要将数据分成更小、更易管理的部分或”分片”。以下是一些常用的顶级数据分片算法:

1. 基于范围的分片

这涉及基于值范围分区数据。例如,客户数据可以基于姓氏的字母顺序分片,或交易数据可以基于日期范围分片。

2. 基于哈希的分片

在这种方法中,哈希函数应用于从数据中选择的分片键(如客户 ID 或交易 ID)。这倾向于比分片基于范围的分片更均匀地分布数据。然而,我们需要选择合适的哈希函数以避免哈希冲突。

3. 一致性哈希

这是基于哈希分片的扩展,减少添加或移除分片的影响。它更均匀地分布数据,并最小化添加或移除分片时需要重新定位的数据量。

4. 虚拟桶分片

数据映射到虚拟桶,然后这些桶映射到物理分片。这种两级映射允许更灵活的分片管理和重新平衡,无需大量数据移动。

C++ 的 8 大用例

C++ 是一种高度通用的编程语言,适用于广泛的应用。

8 大用例

  1. 嵌入式系统:语言的效率和对硬件资源的精细控制使其非常适合嵌入式系统开发。
  2. 游戏开发:由于其性能和效率,C++ 是游戏开发行业的主食。
  3. 操作系统:C++ 提供对系统资源和内存的广泛控制,使其非常适合开发操作系统和低级系统实用程序。
  4. 数据库:许多高性能数据库系统用 C++ 实现以有效管理内存并确保快速执行查询。
  5. 金融应用:高频交易和复杂计算。
  6. Web 浏览器:C++ 用于开发 Web 浏览器及其组件,如渲染引擎。
  7. 网络:C++ 通常用于开发网络设备和模拟工具。
  8. 科学计算:C++ 在需要高性能和精确控制计算资源的科学计算和工程应用中广泛使用。

Apache Kafka 简介

Apache Kafka 是一个分布式事件流平台,用于构建实时数据处理管道和流应用。它高度可扩展、容错、可靠,可以处理大量数据。

关键术语

  • 事件:某个时间点的状态日志
  • 事件流:连续和无边界的事件系列

Kafka 可用作发布 - 订阅模型中的消息,其中生产者写入事件流,消费者读取事件。这种发布 - 订阅模型实现事件流生产者和消费者的解耦。此外,Kafka 可用作日志聚合平台,以持久和容错的方式从多个源摄取和存储日志。

Kafka 组件

Kafka 集群有多个关键组件,用于提供分布式基础设施并可靠地捕获、存储、排序和向客户端应用提供事件流。

  1. Brokers:Kafka 集群的核心是 broker,它是处理事件流的物理服务器。事件由生产者发布后,broker 使事件可供消费者使用。Broker 为 Kafka 带来可扩展性,因为 Kafka 集群可以跨多个 broker 分布在各种基础设施设置中以处理大量事件。它们还带来容错性,因为事件可以跨多个 broker 存储和复制。

  2. Topics:Topic 是生产者发布事件的主题名称。Topic 可以有零个或多个消费者监听它们并处理事件。

  3. Partition:在 topic 中,数据组织成分区,存储有序的事件流。分区内的每个事件被分配一个唯一的顺序标识符称为偏移量,表示它在分区中的位置。事件不断追加到分区。Topic 可以有一个或多个分区。在 topic 中有多个分区实现并行性,因为更多消费者可以从 topic 读取。属于 topic 的分区可以分布在集群中的单独 broker 上,这带来高数据可用性和可扩展性。如果一个 broker 故障,剩余 broker 上的分区可以继续提供数据,确保容错。

  4. Producers:生产者是客户端应用,将事件作为事件流写入 Kafka topic。

  5. Consumers:消费者是订阅 topic 并处理或存储进入特定 topic 的事件的客户端应用。消费者在它们在每个分区内接收的顺序读取事件。需要实时数据处理的应用将在消费者组中有多个消费者,可以从订阅的 topic 读取分区。

  6. Consumer Groups:消费者组用于组织从一个或多个 topic 读取事件流的消费者。消费者组实现事件的并行处理,消费者组中的每个消费者可以从一个分区读取以实现客户端应用上的负载均衡。此功能不仅带来并行处理,还带来容错,因为如果消费者组中的消费者故障,分区可以重新分配给另一个组成员。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP110: Top 5 Strategies to Reduce Latency

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。