> 本文主要是从现代软件工程的角度聊聊架构、技术架构与一线码农在架构中充当的角色,不涉及具体的计算机科学技术或编程技巧
# What:架构是什么
## 定义
架构,是解决**复杂性***逻辑*结构问题的一种人类行为活动。
举个栗子🌰
* 设计一栋供百号人居住的商品楼,要考虑采光、排水、居住舒适度、与自然的融合,谓之架构
* 设计⌈健康码⌋,要考虑各级政府机关数据采集与联动,多级缓存削峰填谷,考虑分布式服务的限流与熔断的策略,谓之架构
## 技术架构担任的角色
> 关键词:企业架构、业务架构、技术架构
软件工程师往往只关注于技术架构,忽略了在此之前的企业架构和业务架构。在以传统行业起家,处于数字化管理转型的企业,企业架构与业务架构往往显得尤为重要。
企业架构,简单概括即为**对现有业务的分析与建模**、**对企业信息技术的分析与建模**、以及**业务与技术的匹配方案设计**三个要素。有时,为了更好地说明这三要素,一般会前置**企业愿景**与**业务目标驱动**、后置**可落地的**实施策略与计划。而业务架构则是组织、能力、流程、信息和治理模式的有机结合,业务架构的成果即是**企业管理模式**。
> 省流助手:企业架构 = 业务架构 + IT架构
IT架构,由**数据架构**、**应用架构**和**技术架构**组成。其中,数据架构和应用架构由业务架构指导完成,而**技术架构**则是实现数据架构、应用架构的技术环境,也是我们一线码农接触的领域。
> 省流助手:IT架构 = 应用架构 + 数据架构 + 技术架构,其中技术架构依赖应用架构+数据架构
由此可见,IT架构,特别是技术架构,应当以服务业务发展方向为最优先。
## 技术架构与框架
框架是技术架构的衍生品,是软件工程化的规范(或叫指导方针)。
# Why:为什么要架构
## 软件架构史(摘要)
* 1960s:随着大型系统的开发,`软件架构`一词首次被计算机科学家提出
* 1990s:`软件架构`从Microsoft、IBM旗下Rational软件公司内部开始流行
## 复杂的现实世界
* 需求复杂性:从成本角度看,需要依赖计算机实现的需求总是**足够复杂的**,否则使用计算机实现该需求的性价比不高。
* 人的复杂性:参与开发大型系统的技术人员,熟悉程度不一致、擅长技术栈不一致、思维特点不一致
* 技术复杂性:各种形如MySQL,Redis、ElasticSearch等基础设施类型的子系统不断出现与发展
* 稳定复杂性:保证大型系统稳定运行,需要考虑更多的异常情况
* 扩展复杂性:**计算机技术**与**软件工程方法论**是发展的,所以在多数情况下,开发之初所预留的扩展性无法满足现在的需求实现
## 架构目标
* 低成本(人力、运营)
* 安全
* 功能安全:防注入、防暴力破解密钥
* 架构安全:运维部署安全、应对洪水攻击、应对DDoS
* 规模控制
* 高性能
* 高可用(稳定)
* 可扩展(可快速扩展)
# How:如何架构
## 原则
* 合适
* 简单
* 具备演化能力
## 架构步骤
1. 识别需求复杂度
2. 准备尽量多的方案
3. 需求匹配方案
4. 可落地的方案进行详细设计
## 架构常用方法
* 拆分
* 分离
* 分层
## 实践闭环
```mermaid
graph LR
S1[积累经验] --> S2[分析需求] --> S3[匹配方案] --> S4[分层细化] --> S5[架构优化] --> S1
```
# Target: 技术架构目标
* 简单高效
* 适配业务
* 标准规范
* 前瞻设计
# 参考&致谢
* [软件架构#历史 - 维基百科](https://zh.wikipedia.org/wiki/软件架构#历史)
* [The Software Architecture Chronicles](https://herbertograca.com/2017/07/03/the-software-architecture-chronicles/)
* [软件架构发展历程 - 腾讯云开发者社区](https://cloud.tencent.com/developer/article/1391404)
* [什么是企业架构,是由业务架构和IT架构组成的吗? - 知乎用户的回答 - 知乎](https://www.zhihu.com/question/23781577/answer/25765282)
* [贴合生产的 MySQL 优化思路](https://learnku.com/articles/60890)
* 数字化转型下的技术架构 - 碧桂园集团内部课程
聊聊架构