架构师训练营 大作业 知识脑图
发布于: 2020 年 09 月 14 日
大作业,知识结构梳理
架构师训练营课程既涉及了架构师这个角色的职责和能力要求,也涉及了架构师需要具备的技术基础:包括设计原则、设计模式、领域驱动设计、性能测试、高可用、高性能、安全架构、大数据技术和应用等内容。这门课程的意义在于了解架构师这个角色需要具备的视野广度,在需要的时候知道往哪里去深挖。
以下为脑图的md形式
# 架构师## 1. 架构方法### 架构师的主要职责- 编写架构设计文档- 开发变成框架- 重构软件代码- 设计系统架构- 进行技术选型,解决技术应用中的问题- 优化系统性能- 模块分解与微服务架构重构- 保障系统安全与高可用- 大数据应用- 技术创新- 沟通管理### 架构师的主要能力- 编程能力- 基础技术掌握能力- 常用技术产品的理解与应用能力- 性能优化与分析故障的能力- 常用架构模式和框架的理解与应用能力- 建模以及设计文档的方法和能力- 业务理解与功能模块及非功能模块的拆解能力- 快速学习能力- 沟通与领导能力### 软件架构- 4+1架构视图 - 逻辑视图(logical view), 设计的对象模型 - 过程视图(process view), 捕捉设计的并发和同步特征 - 物理视图(physical view), 描述软件到硬件的映射,反映部署特性 - 开发视图(development view),描述在开发环境中软件的静态组织结构 - 场景设图(scenarios), 描述用例场景### 使用UML进行软件架构设计与建模- UML图的分类-静态建模 - 用例图 - 组件图 - 部署图 - 对象图 - 类图 - 包图- UML图的分类-动态建模 - 时序图 - 协作图 - 活动图 - 状态图- UML工具 - 使用ProcessOn快速绘制UML,如项目初期、草稿期间等 - 使用PlantUML(插件集成在VSCode, GoLand中,类似Markdown编程式画图)版本管理与团队协作## 2. 软件设计原则### 面向对象编程与面向对象分析### 设计原则 - SOLID- 单一职责原则 - 一个类只有一个引起他变化的原因 - 类的职责单一- 开闭原则 - 对扩展开放,对修改关闭 - 不需修改代码就可以增加新功能 - 使用抽象去编程,如策略模式、适配器模式、观察者模式- 里式替换原则 - 使用父类的地方,都可以用子类进行替换 - 主要用于衡量抽象或继承是否合理 - 设计时,类不是为了继承而设计,最好不要去继承他 - 子类比父类更严格- 接口隔离原则 - 使用者只需关注自己需要使用到的接口 - 不强迫用户依赖他们不需要的方法- 依赖倒置原则 - 高层不依赖于低层,低层也不依赖于高层,都依赖于抽象,而不依赖具体实现,由使用者来定义自己需要的接口 - service(低层)定义接口,controller(高层)去实现接口,这不属于依赖倒置 - controller定义自己的抽象,service去实现抽象,这是依赖倒置 - 常应用于框架的开发,使用框架时不需要调用框架提供的代码,针对框架提供的接口进行编程,框架通过接口调用我们的代码 - 架构师开发框架,制定规范,让别人依赖此规范进行开发## 3. 设计模式### Reactor Framework - Flower### 设计模式- 简单工厂 - 可通过配置文件配置关系,对简单工厂做一些改进。- 单例模式 - 饿汉、懒汉、静态内部类、枚举 等方式。- 适配器模式 - 将一个已有的类(接口)的方法,以目前已经定好的方法(接口)提供出去。 - 类的适配器很有可能违反了里式替换原则。一般建议使用对象的适配器。- 模板方法模式 - 以TestCase为例,实现了模版方法模式,子类只需要实现setUp/runTest/tearDown等方法,而调用流程由父类进行控制。- 组合模式 - 树形结构,分为叶子节点还是非叶子节点。在组合模式中,进行父组件方法的调用,通过父组件包含子组件而遍历子组件,完成到子组件的调用。 - 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。- 装饰模式## 4. 系统架构### 互联网系统面临的挑战- 高并发:大流量需要面对高并发用户,大流量访问不能设计一个高并发的系统,高并发是特征可以设计一个高性能高可用的系统- 高可用:系统7x24小时不间断服务。服务器可以停机,系统不可以停机。不管有什么问题,系统服务不能停,这是有挑战的。高可用的架构有它的一套解决方案。- 海量数据:需要存储、管理海量的数据- 用户分布复杂,网络情况复杂- 安全环境恶劣- 需求快速变更,发布频繁- 渐进式发展:好的互联网产品都是逐步运营出来的,不是一开始就开发好的。对技术提出了挑战。要求足够的技术支撑大部分技术在十年前就成熟了,在网站渐进式的发展过程中,在挑战下不断发展起来的。### 技术方向- 垂直伸缩- 水平伸缩### 架构演化- 单体架构, 应用程序、文件存储、数据库都在一台服务器上- 应用数据分离- 使用缓存改善系统性能- 使用应用服务器集群改善系统的并发处理能力- 数据库读写分离,分摊读写压力,系统可用性增加- 使用反向代理和CDN加速网站响应- 使用分布式文件系统和分布式数据库服务器- 使用NoSQL和搜索引擎- 业务拆分- 微服务及中台化- 大数据与智能化### 架构模式- 分层:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。- 分割:纵向切分。将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。有助于软件的开发和维护,也便于分布式部署,提高网站的并发处理能力和功能扩展能力。- 分布式:将不同模块部署在不同的服务器上,通过远程调用协同工作。- 集群:多台服务器部署相同应用构成一个集群,通过负载均衡共同对外提供服务。- 异步:将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。从而加快响应速度,削峰,提供系统可用性。- 冗余:保证服务器在出现故障的时候可以继续服务,数据不会丢失,就需要一定程度的服务器冗余、数据冗余备份。- 自动化:无人值守的情况下网站可以正常运行。目前主要集中在运维方面。(例如自动监控,自动启动)- 安全:通过密码手机验证码进行身份认证;网络通讯加密、敏感信息加密,使用验证码验证非机器操作,对于XSS、SQL注入进行编码转换,对于垃圾信息、敏感信息过滤,交易信息的风控等。### 核心要素- 高性能:影响用户请求的所有环节都可以进行优化- 高可用:当出现服务器宕机,服务或应用仍然可用。应用冗余,部署在多台服务器上构建集群。数据冗余,存储在多台服务器上互相备份。任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。- 可伸缩:不断向集群中加入服务器缓解不断上升的用户并发访问压力和不断增长的数据存储需求。可容易地向集群中添加新的服务器,并提供与原来的服务器无差别的服务。可容纳总的服务器数量无限制。- 可扩展:系统增加新的业务产品时,对现有产品透明无影响,不需要任何改动或很少改动既有业务功能就可以上线新产品。少耦合。可通过事件驱动架构和分布式服务解决。- 安全:针对现存和潜在的各种攻击与窃密手段 ,有可靠的应对策略。## 5. 技术选型### 缓存- 缓存特点 - 技术简单 - 性能提升显著- 缓存关键指标 - 缓存键集合 - 缓存空间 - 缓存寿命- 缓存类型 - 代理缓存 - 反向代理缓存 - CDN缓存 - 对象缓存- 分布式缓存 - 分布式缓存架构 - 分布式缓存模型 - 一致性Hash算法- 缓存注意事项 - 频繁修改的数据 - 没有热点的数据 - 数据不一致 - 缓存雪崩### 异步- 异步回调- 消息队列,基本角色:消息生产者,消息队列,消息消费者- 消息队列的优势在于:实现异步处理,提升处理性能;更好的伸缩性;削峰填谷;失败隔离和自我修复;解耦;- 主流产品:RabbitMQ、ActiveMQ、RocketMQ、Kafka### 负载均衡- LB(Load Balance)的最终目的,是希望请求能均匀分发到每个服务器,以此提高性能、可用性、可靠性。- 负载均衡架构:HTTP重定向负载均衡、DNS负载均衡、反向代理负载均衡、IP负载均衡、数据链路层负载均衡- 负载均衡算法:轮询、加权轮询、随机、最少连接、原地址散列### 数据库- 主从复制 - MySQL复制:主从复制、一主多从复制、主主复制 - MySQL一主多从的优点分摊负载专机专用(应用读请求,数据分析等场景可以分开,避免互相影响)便于冷备和热备高可用 - 主主复制两个数据库不能并发写入;复制只是增加读并发处理能力,没有增加写并发处理能力和存储能力;更新表结构会导致巨大的同步延迟;- 数据分片 - 实现分片的方式 - 硬编码实现数据分片 - 映射表外部存储- 分布式数据库中间件- 数据库部署方案 - 单一服务与单一数据库 - 主从复制实现伸缩 - 两个web服务与两个数据库 - 综合部署- 数据库架构 - 聚簇索引 - 非聚簇索引### CAP原理- CAP原理介绍 - 一致性 - 可用性 - 分区耐受性- CAP原理与数据一致性冲突 - 最终一致性 - 最终一致写冲突 - 客户端冲突解决 - 投票解决冲突(Cassandra) - Cassandra分布式架构 - HBase架构- 分布式系统脑裂 - 分布式一致性算法Paxos - ZooKeeper## 6. 性能优化### 性能测试- 响应时间- 并发数- 吞吐量- 性能计数器- 性能测试方法 - 性能测试,负载测试,压力测试,稳定性测试### 性能优化- 基本原则 - 你不能优化一个没有测试的软件 - 你不能优化一个你不了解的软件- 一般方法 - 性能测试,获得性能指标(吞吐量,响应时间,并发数,性能计数器等) - 指标分析,发现性能与资源瓶颈点 - 架构与代码分析,寻找性能与资源瓶颈关键所在 - 架构与代码优化,优化关键技术点,平衡资源利用 - 性能测试,进入性能优化闭环- 分层思想 - 机房与骨干网络性能优化 - 服务器与硬件性能优化- 软件架构性能优化三板斧 - 缓存 - 异步 - 集群### 程序运行时架构- 进程运行时状态 - 运行:进程正在CPU上运行 - 就绪:进程获得了除CPU以外的一切所需资源,只要得到CPU,就能运行 - 阻塞:也称为等待或睡眠状态,当进程正在等待某一事件发生(如IO完成,锁等),此时即使把CPU分配给进程也无法执行- 进程VS线程- 线程安全 - 临界区 - 阻塞导致高并发系统崩溃 - 锁原语CAS - 多CPU情况下的锁- 文件控制块 - Linux inode文件控制块 - RAID独立硬盘冗余阵列 - 分布式文件系统HDFS### 数据结构和算法- 复杂度 - 时间复杂度 - 空间复杂度- NP问题 - 多项式时间 - P问题 - NP问题 - NP-hard问题 - NP完全问题- 数据结构 - 数组 - 链表 - 跳表 - 哈希表 - 栈 - 堆 - 队列 - 树 - 二叉排序树 - 红黑(排序)树- 常用算法 - 穷举算法 - 递归算法 - 贪心算法 - 改进贪心算法-迪杰斯特拉算法(最快路径) - 动态规划### 网络- 协议 - OSI七层协议 - TCP/IP四层协议- 网络数据包的格式- 物理层- 链路层- 传输层- TCP/IP - TCP建立连接的3次握手 - TCP关闭连接的4次挥手- HTTP - HTTP请求的7种方法 - HTTP协议版本- I/O - BIO - NIO - Select(Poll) - ePoll## 7. JVM 与 秒杀### JVM组成结构- 类加载的过程- 自定义类加载器### Java字节码文件- 字节码执行流程### 双亲委派机制- 双亲委派机制如何被打破### JVM垃圾回收- JVM垃圾回收器算法 - 分代收集算法 - 标记整理算法 - 标记清除算法 - 标记复制算法### Java启动参数### Java内存泄漏### 秒杀- 秒杀系统设计原则 - 静态化 - 并发控制,防秒杀器 - 简化流程 - 前端优化## 8. 微服务 与 DDD### 微服务- 互联网架构的演化 - 单体应用架构 - 技术扩展性 - 业务扩展性 - 分布式架构 - 每个应用都是从头到尾,自搭一套完整的体系,导致业务之间重复造轮子,造成资源浪费 - 各个应用数据相对集中且对外的服务和接口不完善,容易造成应用系统间东西向集成困难,产生信息孤岛 - SOA—面向服务 - 业务封装:通过服务化思想,提供更好的业务封装性,并通过标准技术,能更友好地对外输出业务能力 - 业务独立:SOA 服务不依附于某个具体应用,它可以独立地部署和扩展,这样避免了直接影响现有的系统 - 业务共享:服务通过封装通用的业务逻辑,可以供所有应用共享,解决了重复造轮子的问题 - 微服务架构 - 小服务+小应用 - 简单的技术实现手段- 微服务架构评判标准 - 系统当前能支持现有业务,能带来收益。系统未来能方便扩展,持续带来收益。而要满足这个目标,微服务系统服务的拆分和关系至关重要### DDD- DDD是什么- DDD如何指导系统设计 - 专家参与 - 统一思想 - 现实对应:设计中名词和概念都是源于实际业务 - 充分讨论:讨论过程中可以将各放意见统一聚合,让各方充分了解对方想法,并最终统一思想 - 达成一致:达成一致的概念就是系统的稳定点,而未能达成充分一致的可能就是系统的变化点或扩展点,主要我们在设计上充分考虑## 9. 系统安全与高可用### 软件组织原则- 组件内聚原则- 复用发布等同原则- 版本号约定建议- 共同封闭原则- 共同复用原则- 组件耦合原则- 无循环依赖原则- 稳定依赖原则- 稳定抽象原则### 系统安全- 常见攻击 - XSS攻击 - SQL注入攻击 - CSRF攻击- 防御手段 - Web应用防火墙 - 网站安全漏洞扫描 - 加密 - 单向散列加密 - 对称加密 - 非对称加密 - 秘钥安全管理与加解密服务系统架构 - 反垃圾邮件 - 布隆过滤器黑名单 - 电子商务风险控制 - 规则引擎 - 机器学习### 系统高可用- 可用性指标 - 故障分管理 - 故障处理流程及考核 - 引起故障的原因- 高可用系统架构思路 - 解耦 - 高内聚、低耦合的组件设计原则 - 面向对象基本设计原则 - 面向对象设计模式 - 领域驱动设计建模 - 隔离 - 业务与子系统隔离 - 微服务与中台架构 - 生产者与消费者隔离 - 虚拟机与容器隔离 - 异步 - 多线程编程 - 反应式编程 - 异步通信网络编程 - 事件驱动异步架构 - 重试 - 备份(冗余) - 集群设计 - 数据库复制(CAP原理) - Failover(失效转移) - 数据库主主失效转移 - 负载均衡失效转移 - 事务补偿 - 传统事务的ACID - 分布式事务BASE - 熔断 - 限流 - 限流算法 - 计数器(固定窗口、滑动窗口) - 令牌桶算法 - 漏桶算法 - 自适应限流 - 降级 - 异地多活- 高可用系统的运维策略 - 发布高可用 - 自动化测试 - 自动化部署 - 预发布验证 - 自动化发布 - 灰度发布 - 网站运行监控 - 监控系统架构- 高可用价值观 - 保持简单,使问题易于发现,快速解决。 - 目标明确,解决特定环境下的具体问题。 - 价值回归,成本收益要合理。## 10. 数据### 大数据- 大数据技术 - 大数据技术介绍 - 1、大数据技术的起源 - 2、大数据技术体系 - 3、大数据技术的应用历史 - 4、大数据技术的应用领域 - 大数据存储之HDFS介绍 - 1、面临的问题 - 2、HDFS设计 - 3、如何存储一个大文件 - 4、如何保证系统的高可用以及存储文件的高可用 - 大数据计算之MapReduce介绍 - 1、需要解决的问题 - 2、MapReduce设计 - 3、MapReduce处理过程 - 4、MapReduce编程 - 大数据技术--Yarn的介绍 - 1、Yarn的诞生 - 2、Yarn的设计 - 大数据技术--Hive的介绍 - 1、Hive的诞生 - 2、Hive架构 - 3、Hive执行流程- 大数据平台 - 数据采集与导入 - 数据处理 - 数据输出与展示 - 大数据平台Lamda架构原型 - 用Sqoop导入导出数据库数据 - 用Canal实时导入MySQL数据 - 用Flume从日志导入数据 - Flume级联部署 - FLume分布式部署 - 前端埋点采集数据 - 网络爬虫收集外部数据### Spark- 1、spark的生态体系- 2、Spark的特点 - 1)使用内存存储中间计算结果,更高效 - 2)基于RDD的编程模型 - 3)基于DAG切分的多阶段计算过程- 3、Spark整体结构- 4、Spark编程### 流计算- Storm - Storm的目标 - Storm的基本概念 - Storm的整体结构 - Storm应用场景- Spark Streaming- Flink### 数据可视化- 互联网运营常用数据指标 - 1)新增用户数 - 2)用户留存率 - 3)用户流失率 - 4)活跃用户数 - 5)PV - 6)GMV - 7)转换率- 数据可视化图表 - 1)折线图 - 2)散点图 - 3)热力图 - 4)漏斗图### 机器学习- 1、网页排名算法 PageRank- 2、KNN分类算法- 3、贝叶斯分类算法- 4、K-means聚类算法- 5、推荐引擎算法- 6、机器学习系统架构## 11. 区块链### 数字货币的挑战- 交易### 区块链- 工作量证明- 矿工### 以太坊- 以太坊应用于企业级开发存在的问题- Taireum重构以太坊 - Taireum联盟共识控制台 - 联盟共识智能合约是Taireum联盟链的宪法 - Taireum区块头 - Taireum联盟新成员许可入网 - Taireum记账共识算法### 联盟链技术 HyperLedger
划线
评论
复制
发布于: 2020 年 09 月 14 日阅读数: 90
版权声明: 本文为 InfoQ 作者【一雄】的原创文章。
原文链接:【http://xie.infoq.cn/article/835d8c7a62cb3a2a5a416d175】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
一雄
关注
还未添加个人签名 2020.03.05 加入
还未添加个人简介
评论