本周系统设计复习:
- Linux 性能工具!
- 垃圾回收如何工作?
- 设计容错系统的速查表
- 你不能忽视的 10 个系统设计权衡
垃圾回收如何工作?
垃圾回收是编程语言中使用的自动内存管理功能,用于回收程序不再使用的内存。
Java 垃圾回收器
Java 提供几种垃圾回收器,每种适用于不同用例:
Serial Garbage Collector:最适合单线程环境或小应用。
Parallel Garbage Collector:也称为”吞吐量收集器”。
CMS (Concurrent Mark-Sweep) Garbage Collector:低延迟收集器,旨在最小化暂停时间。
G1 (Garbage-First) Garbage Collector:旨在平衡吞吐量和延迟。
Z Garbage Collector (ZGC):低延迟垃圾回收器,设计用于需要大堆大小和最小暂停时间的应用。
Python 垃圾回收
Python 的垃圾回收基于引用计数和循环垃圾回收器:
引用计数(Reference Counting):每个对象有一个引用计数;当它达到零时,内存被释放。
循环垃圾回收器(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?。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。