本周系统设计复习:

  • Linux 性能工具!
  • 垃圾回收如何工作?
  • 设计容错系统的速查表
  • 你不能忽视的 10 个系统设计权衡

垃圾回收如何工作?

垃圾回收是编程语言中使用的自动内存管理功能,用于回收程序不再使用的内存。

Java 垃圾回收器

Java 提供几种垃圾回收器,每种适用于不同用例:

  1. Serial Garbage Collector:最适合单线程环境或小应用。

  2. Parallel Garbage Collector:也称为”吞吐量收集器”。

  3. CMS (Concurrent Mark-Sweep) Garbage Collector:低延迟收集器,旨在最小化暂停时间。

  4. G1 (Garbage-First) Garbage Collector:旨在平衡吞吐量和延迟。

  5. Z Garbage Collector (ZGC):低延迟垃圾回收器,设计用于需要大堆大小和最小暂停时间的应用。

Python 垃圾回收

Python 的垃圾回收基于引用计数和循环垃圾回收器:

  1. 引用计数(Reference Counting):每个对象有一个引用计数;当它达到零时,内存被释放。

  2. 循环垃圾回收器(Cyclic Garbage Collector):处理引用计数无法解决的循环引用。

Go 垃圾回收

并发标记 - 清扫垃圾回收器:Go 的垃圾回收器与应用并发运行,最小化”世界停止”暂停。

设计容错系统的 6 大原则

设计容错系统对于确保各种应用的高可用性和可靠性至关重要。以下是设计容错系统的六大顶级原则:

1. 复制(Replication)

复制涉及在不同节点或位置创建数据或服务的多个副本。

2. 冗余(Redundancy)

冗余指拥有额外组件或系统,在故障情况下可以接管。

3. 负载均衡(Load Balancing)

负载均衡在多个服务器之间分发传入网络流量,确保没有单个服务器成为故障点。

4. 故障转移机制(Failover Mechanisms)

故障转移机制在主组件故障时自动切换到备用系统或组件。

5. 优雅降级(Graceful Degradation)

优雅降级确保当某些组件故障时系统继续以降低的功能运行,而不是完全失败。

6. 监控和告警(Monitoring and Alerting)

持续监控系统的健康和性能,并为任何异常或故障设置告警。

10 个系统设计权衡

如果你不知道权衡,你就不懂系统设计。

1. 垂直 vs. 水平扩展

  • 垂直扩展:向现有服务器添加更多资源(CPU、RAM)
  • 水平扩展:向池中添加更多服务器

2. SQL vs. NoSQL

  • SQL 数据库:将数据组织成行和列的表
  • NoSQL:适合需要灵活模式的应用

3. 批处理 vs. 流处理

  • 批处理:收集数据并一次性处理。例如,每日账单流程
  • 流处理:实时处理数据。例如,欺诈检测流程

4. 规范化 vs. 去规范化

  • 规范化:将数据分割成相关表,确保每条信息只存储一次
  • 去规范化:将数据合并到更少的表以获得更好的查询性能

5. 一致性 vs. 可用性

  • 一致性:确保每次都能获取最新数据
  • 可用性:确保系统始终运行,即使某些部分有问题

6. 强一致性 vs. 最终一致性

  • 强一致性:数据更新立即反映
  • 最终一致性:数据更新在节点之间可用之前延迟

7. REST vs. GraphQL

  • REST:通过访问多个端点收集数据
  • GraphQL:通过特定查询获得更高效的数据获取,但设计成本更高

8. 有状态 vs. 无状态

  • 有状态系统:记住过去的交互
  • 无状态系统:不跟踪过去的交互

9. 读穿透 vs. 写穿透缓存

  • 读穿透缓存:在缓存未命中时从数据库加载数据
  • 写穿透缓存:同时将数据更新写入缓存和存储

10. 同步 vs. 异步处理

  • 同步处理:任务一个接一个执行
  • 异步处理:任务可以在后台运行。新任务可以在不等待新任务的情况下启动

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

原文链接:EP125: How does Garbage Collection work?

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