系统架构设计的检查清单

系统设计很复杂,在实际中我总结了一些检查清单,帮助在系统设计的过程中快速的核对。

  1. 对于大量“读”的系统 —— 考虑使用缓存。
  2. 对于大量“写”的系统 —— 考虑使用消息队列进行异步处理。
  3. 对于低延迟要求的系统 —— 考虑使用缓存 或 CDN。
  4. 需要原子性、一致性、隔离性、耐用性兼容的系统 —— 选择关系型数据库。
  5. 拥有非结构化数据的系统 —— 考虑 NoSQL 数据库。
  6. 拥有复杂的数据(视频、图像、文件) —— 考虑Blob存储或者对象存储。
  7. 对于复杂的预计算 —— 考虑使用消息队列和缓存。
  8. 海量数据搜索 —— 考虑数据库索引、或者搜索引擎(如Elasticsearch、Couchbase)。
  9. 需要扩展 SQL 数据库 —— 考虑数据库分片。
  10. 有高可用性、性能和吞吐量要求时 —— 考虑使用负载均衡器。
  11. 需要大范围数据交付时(比如全国、或全球)—— 考虑使用 CDN。
  12. 有图形数据(包含节点、边和关系的数据)场景是 —— 考虑利用图形数据库(如Neo4j)。
  13. 服务能否水平扩展
  14. 需要高性能数据库查询时 —— 数据库索引设计的如何。
  15. 有批处理业务时 —— 考虑批处理方式和消息队列。
  16. 考虑服务器负载管理与防止 DOS 攻击 —— 使用速率限制器。
  17. 微服务架构 —— 使用 API 网关。
  18. 针对单点故障 —— 考虑冗余方案。
  19. 为了实现容错和持久性 —— 考虑实施数据备份和复制方案。
  20. 对于用户间的快速通信 —— 考虑使用 Websockets。
  21. 分布式系统中的故障检测方式 —— 考虑心跳方案。
  22. 数据完整性要求的场景 —— 使用校验算法。
  23. 高效的服务器扩展 —— 考虑一致性哈希算法。
  24. 去中心化数据传输场景 —— 考虑 Gossip 协议。
  25. 基于位置的功能需求 —— 使用四叉树、Geohash 等。
  26. 避免命名时使用特定的技术名称 —— 使用通用术语。
  27. 高可用性和一致性权衡 —— 要符合最终一致性。
  28. 对于 IP 解析和域名查询场景 —— 使用DNS。
  29. 处理网络请求中的大数据 —— 采用分页技术。
  30. 缓存替换策略 —— 通常情况下首选 LRU。
  31. 应对流量高峰 —— 实施自动扩展以动态管理资源。
  32. 需要分析和审计跟踪 —— 考虑使用数据湖或附加数据库。
  33. 处理大规模同时连接 —— 使用连接池并考虑使用 Protobuf 来最小化数据负载。

你可能感兴趣的:(系统架构)