☕ DESIGN 是个人对于软件系统架构的心得和总结。
架构之道,在于权衡;权衡之术,在于取舍。
# 📖 内容
# 设计步骤
解决方案(Solution),就是针对某些已经体现出的,或者可以预期的问题、不足、缺陷、需求等等,所提出的一个解决整体问题的可行性方案。就软件系统而言,解决方案就是一个可以解决具体业务问题,并且可以落地的软件系统。
解决方案,毫无疑问是顶层系统设计,这需要设计者既懂技术,也懂业务。
# 第一步:需求分析
把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。
- What:系统的作用是什么?系统的目标是什么?
- Who:系统的用户群体是谁?
- How:用户希望怎样使用系统?系统如何为用户提供服务?
- How many:有多少用户?日活/月活有多少?——用户体量会极大的影响系统的性能要求,从而影响系统的规模和复杂度。
- 容量:系统需要处理多少数据?
- 并发量、吞吐量:系统需要每秒钟处理多少请求?
- 读写比率:系统的读写比率是多少?——读多写少或写多读少决定了不同的架构方案。
- How much:系统的预算是多少(包括物料、人力成本等)?
- 输入输出:系统的输入输出分别是什么?
# 第二步:顶层设计
使用所有重要的组件来描绘出一个高层级的设计。
- 画出主要的组件和连接
- 证明你的想法
# 第三步:组件设计
对每一个核心组件进行详细深入的分析。
# 第四步:扩展设计
确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗?
- 负载均衡
- 水平扩展
- 缓存
- 数据库分片
# 分布式
# 分布式综合
# 分布式理论
- 分布式理论 - 关键词:
拜占庭将军、CAP、BASE、错误的分布式假设 - 分布式算法 Paxos - 关键词:
共识性算法 - 分布式算法 Raft - 关键词:
共识性算法 - 分布式算法 Gossip - 关键词:
数据传播
# 分布式关键技术
- 集群
- 复制
- 分区
- 选主
# 流量调度
- 流量控制 - 关键词:
限流、熔断、降级、计数器法、时间窗口法、令牌桶法、漏桶法 - 负载均衡 - 关键词:
轮询、随机、最少连接、源地址哈希、一致性哈希、虚拟 hash 槽 - 服务路由 - 关键词:
路由、条件路由、脚本路由、标签路由 - 服务网关
- 分布式会话 - 关键词:
粘性 Session、Session 复制共享、基于缓存的 session 共享
# 数据调度
- 数据缓存 - 关键词:
进程内缓存、分布式缓存、缓存雪崩、缓存穿透、缓存击穿、缓存更新、缓存预热、缓存降级 - 读写分离
- 分库分表 - 关键词:
分片、路由、迁移、扩容、双写、聚合 - 分布式 ID - 关键词:
UUID、自增序列、雪花算法、Leaf - 分布式事务 - 关键词:
2PC、3PC、TCC、本地消息表、MQ 消息、SAGA - 分布式锁 - 关键词:
数据库、Redis、ZooKeeper、互斥、可重入、死锁、容错、自旋尝试
# 资源调度
- 弹性伸缩
# 通信
- 消息队列 - 关键词:
重复消费、消息丢失、消息顺序性、消息积压
# 服务治理
# 📚 资料
- 书籍
- 《大型网站技术架构:核心原理与案例分析》 (opens new window) - 浅显易懂的将解大型网站架构演进之路;简介了大型系统所面临的挑战以及核心技术点。
- 《亿级流量网站架构核心技术:跟开涛学搭建高可用高并发系统》 (opens new window)
- 大型网站系统与 Java 中间件实践 (opens new window)
- 企业 IT 架构转型之道:阿里巴巴中台战略思想与架构实战 (opens new window) - 阐述阿里巴巴中台系统发展,更多的是讲解应用场景和能力,没有讲解技术细节。
- 逆流而上:阿里巴巴技术成长之路 (opens new window) - 主要以运维的视角阐述系统运维中遇到的困难,定位思路以及解决方法。
- 《Head First 设计模式》 (opens new window)
- 《大话设计模式》 (opens new window)
- 《重构——改善既有代码的设计》 (opens new window)
- 教程
- system-design-primer (opens new window)
- 从 0 开始学架构 (opens new window)
- 从 0 开始学微服务 (opens new window)
- RPC 实战与核心原理 (opens new window)
- 微服务架构核心 20 讲 (opens new window)
- DDD 实战课 (opens new window)
- Sparx UML 教程 (opens new window)
- UML Tutorial (opens new window)
- W3Cschool UML 教程 (opens new window)
- https://sourcemaking.com/refactoring
# 🚪 传送
◾ 🏠 DESIGN 首页 (opens new window) ◾ 🎯 钝悟的博客 (opens new window) ◾
你可能会感兴趣: