- Published on
架构基础知识
什么是架构
系统&子系统的概念
样例:
模块可以是一个 module,一个package,一个服务
框架 vs 架构 概念
MVC 又是框架又是架构,框架规定了 MVC是什么怎么交互(软件规范),如果按照MVC的框架去实现,那么架构就是MVC架构。
软件架构4R架构:
角色可以是 service,子系统,组件
运动规则 -> 交互逻辑
架构应用
如何画架构图
PPT画图
最底层的子系统会用类图画
架构图的分类
架构图的画法
4+1架构视图
逻辑视图 :系统提供给用户的功能对应UML的class和state diagrams
处理视图:系统的处理过程,对应UML的sequence和activity diagrams
开发视图:程序员角度看系统的逻辑组成,对应UML的package diagrams
一般绘画逻辑视图和开发视图不会分开来画的
物理视图:系统工程师角度看系统的物理组成,对应UML的deployment diagrams
场景视图:用户角度看系统需要实现的需求,对应UML的use case diagrams
国内很少用4+1视图来描述架构
架构复杂度增加:1995年的系统大部分还是单体系统,现在分布式
绑定UML图:UML图画架构图存在问题
理解苦难:逻辑视图,开发视图,处理视图比较容易混淆。
UML太丑了,除非是交给客户的标书
常见架构图介绍和画法
为什么客户端和前端只要按模块划分?
一般客户端和前端是逻辑划分,只有模块。
业务架构
高P:P10
业务架构图区块长短有什么意义:没有意义,让图好看。
客户端架构、前端架构
系统架构
三个角色,不同角色有关系。
为什么后端逻辑架构直接叫“系统架构”?
后端架构是最复杂。
应用架构
应用架构是系统架构的细化。应用架构可以指导开发,测试,运维。
部署架构
运维
系统序列图
动态的架构图
不能指导开发
系统序列图用UML序列图来华,核心功能需要画序列图。
本章节思维导图s
什么是面向复杂度的架构设计
常见的架构设计方法论
书籍(面向模式)
还没见过有人把这些书看完
面向风险
领域驱动 (整洁架构)
将领域本身的复杂度降低,实现软件的可理解,可扩展,做不出来高性能高可用的设计
面向复杂度架构设计
为什么要做架构设计?提升开发效率,促进业务发展?为了高性能,高可用,可扩展?(可能会带来过度设计)
软件架构诞生背景:(并不是全行业的软件危机,而是大公司的)
核心原因:软件系统规模增长
核心特点:数据结构和算法不再是主要问题,整个系统的结构成为首要问题。
架构设计环
Saas是一种交付模式,不能说是一种架构
12306没有支付宝架构那么复杂,因为业务功能是比较固定的
如何做好架构设计
架构设计三原则: 合适原则,简单原则,演化原则
架构设计三原则
合适原则
合适原则宣言:合适优于业界领先
简单原则
简单宣言:简单优于复杂
奥卡姆剃刀:若无必要,勿增实体
复杂度:内部复杂度,外部复杂度;平衡点
演化原则
软件系统和建筑本质的差异是什么?
- 软件系统是一个动态的系统,建筑是静态的
- 软件系统是可以演变的。(安卓系统的演变,人的演变)
演化原则:演化优于一步到位
例子
三网合一,
- 即使是大公司,也不是有钱有人为所欲为,同样需要遵循架构三原则
- 目标高大上,如果没有能够落地的手段,就是空中楼阁
- 人多并不一定能够办大事,架构设计本质上是“精英设计”
4G时代实现了当初的项目目标。4G都是TD-LTE的制式。
违反了简单原则,
松鼠厂亿级用户平台
高瞻远瞩带来灾难
何小鹏,现在小鹏汽车老板
感悟
1,2,3原则都违背
架构设计原则具体应用
- 设计出来的架构要满足当时的业务需求,符合团队和技术的能力水平(合适原则)
- 按照简单的方式来设计架构,然后不断地在实际应用过程中迭代优化(简单原则)
- 业务发生变化时,架构要扩展,重构,甚至重写(演化原则)
合适>简单>演化
架构设计环
架构设计原则常见判断维度
对于2B,按照合同一次性交付,架构设计不太要遵循演进原则(架构的重构)。如果要自己技术升级,再签合同就行。
实战-外包学生管理系统
如果没有理论,不知道如何落地。 没有理论,不会举一反三
需求介绍
学生管理
课程管理
考试管理
权限管理
架构设计分析
判断复杂度
高性能?
高可用?不要把核心数据丢了,关键时刻系统不要挂
可扩展?可理解性,可变化性
成本,安全?
备选方案1
是微服务拆分的理念,但不是微服务的架构,微服务基础设施比较复杂,服务发现,负载均衡,API网关,CI/CD,日志,监控
备选方案2
架构设计三原则:
合适原则:符合团队技术水平和积累;开发成本低,系统运维成本低
简单原则:不进行系统拆分,部署维护简单
演化原则:一次性交付,无需考虑太多后期演化;学校的学生数量不会发生很大变化,系统架构够用多年。
备选方案3
Oracle
实战-学生云平台管理
需求背景
系统需求
判断复杂度
对于创业公司来说,真实情况
备选方案1-单机房数据隔离
微服务 可扩展 功能,性能伸缩
备选方案1-单机房服务数据双隔离
双机房数据隔离
双机房数据服务双隔离
算钱,算时间。不要说现在是异地多活。