☕ DESIGN 是个人对于软件系统架构的心得和总结。
不想做将军的士兵不是好士兵,同理,不想做架构师的程序员不是好程序员。系统架构设计能力更像是程序员的内功,需要厚积薄发。设计一个优良的系统架构,需要设计者具备深厚的技术功底,扎实的技术理论知识,以及对业务或产品深入的理解。
- 🔁 项目同步维护:Github | Gitee
- 📖 电子书阅读:Github Pages | Gitee Pages
解决方案(Solution),就是针对某些已经体现出的,或者可以预期的问题、不足、缺陷、需求等等,所提出的一个解决整体问题的可行性方案。就软件系统而言,解决方案就是一个可以解决具体业务问题,并且可以落地的软件系统。
解决方案,毫无疑问是顶层系统设计,这需要设计者既懂技术,也懂业务。
把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。
- What:系统的作用是什么?系统的目标是什么?
- Who:系统的用户是谁?用户群体如何定位?
- How:用户希望怎样使用系统?系统如何为用户提供服务?
- How many:有多少用户?日活/月活有多少?——用户体量会极大的影响系统的性能要求,从而影响系统的规模和复杂度。
- How much:系统的预算是多少(包括物料、人力成本等)?
- 输入输出:系统的输入输出分别是什么?
- 容量:系统需要处理多少数据?
- 并发量、吞吐量:系统需要每秒钟处理多少请求?
- 读写比率:系统的读写比率是多少?——读多写少或写多读少决定了不同的架构方案。
使用所有重要的组件来描绘出一个高层级的设计。
- 画出主要的组件和连接
- 证明你的想法
对每一个核心组件进行详细深入的分析。
确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗?
- 负载均衡
- 水平扩展
- 缓存
- 数据库分片
-
设计一个秒杀系统
-
设计一个权限系统
-
设计一个微博
-
设计一个聊天系统
-
设计一个搜索引擎
-
设计一个电商系统
-
设计一个供应链系统
如果把软件开发工作比作是一场战争,那么系统架构无疑是战略层面的工作。众所周知,万丈高楼平地起,系统架构就像是软件的地基,如果一开始就歪了,那么代码写得再漂亮,软件也难以成功。
软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。重点是分而治之,先将大型系统抽象为各个组件或模块;然后逐一解决各组件、各模块的功能、性能问题;最后将这些组件、模块整合成对外服务的一个整体。
- 系统原理面试题
- 基础理论
- 分布式简介
- 分布式基础理论 - 关键词:
拜占庭将军
、CAP
、BASE
- 分布式算法 Paxos - 关键词:
共识性算法
- 分布式算法 Raft - 关键词:
共识性算法
- 核心技术
- 负载均衡 - 关键词:
轮询
、随机
、最少连接
、源地址哈希
、一致性哈希
、虚拟 hash 槽
- 消息队列 - 关键词:
重复消费
、消息丢失
、消息顺序性
、消息积压
- 分布式存储 - 关键词:
读写分离
、分库分表
、迁移
、扩容
- 分布式缓存 - 关键词:
进程内缓存
、分布式缓存
、缓存雪崩
、缓存穿透
、缓存击穿
、缓存更新
、缓存预热
、缓存降级
- 分布式锁 - 关键词:
数据库
、Redis
、ZooKeeper
、互斥
、可重入
、死锁
、容错
、自旋尝试
- 分布式 ID - 关键词:
UUID
、自增序列
、雪花算法
、Leaf
- 分布式事务 - 关键词:
2PC
、3PC
、TCC
、本地消息表
、MQ 消息
、SAGA
- 分布式会话 - 关键词:
粘性 Session
、Session 复制共享
、基于缓存的 session 共享
- 流量控制 - 关键词:
计数器法
、时间窗口法
、令牌桶法
、漏桶法
- 负载均衡 - 关键词:
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
- 简单工厂模式 (Simple Factory)
- 工厂方法模式 (Factory Method)
- 抽象工厂模式 (Abstract Factory)
- 建造者模式 (Builder)
- 原型模式 (Prototype)
- 单例模式 (Singleton)
- 适配器模式 (Adapter)
- 桥接模式 (Bridge)
- 组合模式 (Composite)
- 装饰模式 (Decorator)
- 外观模式 (Facade)
- 享元模式 (Flyweight)
- 代理模式 (Proxy)
- 模板方法模式 (Template Method)
- 命令模式 (Command)
- 迭代器模式 (Iterator)
- 观察者模式 (Observer)
- 解释器模式 (Interpreter)
- 中介者模式 (Mediator)
- 职责链模式 (Chain of Responsibility)
- 备忘录模式 (Memento)
- 策略模式 (Strategy)
- 访问者模式 (Visitor)
- 状态模式 (State)
改善既有代码的设计。
关键词:过长函数、过大的类、基本类型偏执、过长参数列、数据泥团、switch 声明、临时字段、被拒绝的馈赠、异曲同工的类、发散式变化、霰弹式修改、平行继承体系、过多的注释、重复代码、冗余类、纯稚的数据类、夸夸其谈未来性、依恋情结、狎昵关系、过度耦合的消息链、中间人、不完美的库类
统一建模语言(英语 - Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML 是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML 展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
- 书籍
- 《大型网站技术架构:核心原理与案例分析》 - 浅显易懂的将解大型网站架构演进之路;简介了大型系统所面临的挑战以及核心技术点。
- 《亿级流量网站架构核心技术:跟开涛学搭建高可用高并发系统》
- 大型网站系统与 Java 中间件实践
- 企业 IT 架构转型之道:阿里巴巴中台战略**与架构实战 - 阐述阿里巴巴中台系统发展,更多的是讲解应用场景和能力,没有讲解技术细节。
- 逆流而上:阿里巴巴技术成长之路 - 主要以运维的视角阐述系统运维中遇到的困难,定位思路以及解决方法。
- 《Head First 设计模式》
- 《大话设计模式》
- 《重构——改善既有代码的设计》
- 教程
你可能会感兴趣:
- Java 教程 📚
- JavaCore 教程 📚
- JavaTech 教程 📚
- Spring 教程 📚
- Spring Boot 教程 📚
- 数据库教程 📚
- 数据结构和算法教程 📚
- Linux 教程 📚
- Nginx 教程 📚