本周系统设计复习:

  • API 安全前 12 个技巧
  • 我们如何设计安全系统?
  • 每个开发者应该知道的事情:并发不是并行
  • 系统设计的奇幻四侠是谁?

设计安全系统

设计安全系统很重要,原因众多,从保护敏感信息到确保基础设施的稳定性和可靠性。作为开发者,我们应该默认设计和实施这些安全指南。

下图是一个实用的速查表,包含用例和关键设计点。

安全系统设计

12 个安全方面

  1. 认证(Authentication)
  2. 授权(Authorization)
  3. 加密(Encryption)
  4. 漏洞(Vulnerability)
  5. 审计与合规(Audit & Compliance)
  6. 网络安全(Network Security)
  7. 终端安全(Terminal Security)
  8. 应急响应(Emergency Responses)
  9. 容器安全(Container Security)
  10. API 安全(API Security)
  11. 第三方供应商管理(3rd-Party Vendor Management)
  12. 灾难恢复(Disaster Recovery)

并发 vs. 并行

在系统设计中,理解并发和并行之间的区别很重要。

正如 Rob Pyke(Go 语言的创造者之一)所说:

“并发是同时处理很多事情。并行是同时做很多事情。”

这个区别强调并发更多关于程序的设计,而并行更多关于执行。

并发(Concurrency)

并发是关于同时处理多个事情。它涉及构建程序以同时处理多个任务,其中任务可以在重叠的时间段内启动、运行和完成,但不一定在同一时刻。

并发是关于独立执行进程的组合,描述程序通过在不同任务之间切换来管理多个任务的能力,而不需要在开始另一个任务之前完成一个任务。

在实际术语中,并发使程序能够对输入保持响应、执行后台任务,并以看似同时的方式处理多个操作,即使在单核处理器上。它在 I/O 绑定和高延迟操作中特别有用,其中程序需要等待外部事件,如文件、网络或用户交互。

并行(Parallelism)

另一方面,并行指的是同时执行多个计算。它是利用计算机内的多个处理器或核心同时运行两个或更多任务或计算的技术。并行需要具有多个处理单元的硬件,其主要目标是提高系统的吞吐量和计算速度。

并行在 CPU 绑定任务中至关重要,其中计算速度和吞吐量是瓶颈。需要大量数学计算、数据分析、图像处理和实时处理的应用可以从并行执行中显著受益。

系统设计的奇幻四侠

可扩展性(Scalability)、可用性(Availability)、可靠性(Reliability)和性能(Performance)

它们是打造成功软件系统最关键的组件。

让我们看看每个以及实现技术:

1. 可扩展性(Scalability)

可扩展性确保你的应用可以处理更多负载而不损害性能。

实现技术

  • 水平扩展(添加更多服务器)
  • 垂直扩展(升级现有服务器)
  • 数据库分片
  • 缓存策略
  • 负载均衡

2. 可用性(Availability)

可用性确保你的应用始终准备好为用户服务,停机时间最小。

实现技术

  • 冗余(多个副本)
  • 故障转移机制
  • 健康检查
  • 自动恢复
  • 多区域部署

3. 可靠性(Reliability)

可靠性是关于构建始终如一地提供正确结果的软件。

实现技术

  • 错误处理
  • 重试机制
  • 事务保证
  • 数据验证
  • 监控和告警

4. 性能(Performance)

性能是系统在峰值负载下使用可用资源以预期速率执行任务的能力。

实现技术

  • 缓存
  • 数据库优化
  • CDN
  • 异步处理
  • 资源池化

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

原文链接:EP108: How do we design a secure system?

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