作者 |
[印]所罗伯·斯里瓦斯塔瓦(Saurabh Shrivastava),[印]内拉贾利·斯里瓦斯塔夫(Neelanjali Srivastav) 等 |
丛书名 |
架构师书库 |
出版社 |
机械工业出版社 |
ISBN |
9782111161121 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8084732 - 解决方案架构师修炼之道--------------------------- 本书首先介绍解决方案架构的基本原理、设计原则和属性,这些内容将帮助你理解解决方案架构如何使跨企业的软件项目受益。你将了解云迁移和应用程序现代化框架,并将使用微服务、事件驱动、基于缓存和无服务器模式来设计健壮的架构。然后,你将探索架构设计的主要考量,包括性能、可伸缩性、成本优化、安全性、卓越运营和DevOps。此外,你还将学习与大数据、机器学习和物联网相关的先进概念。书末,你将掌握架构设计文档和成为更好的解决方案架构师所必需的软技能。 ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 本书共38章,分四个部分。 第 一部分是架构师的基础知识修炼。软件的基础知识原理主要是操作系统、数据结构、数据库原理等,书中会从常见的问题入手,直达这些基础技术本质的原理,并覆盖这些基础技术的关键技术点,帮助读者理解这些基础技术原理和日常开发工作的关联关系,对这些基础技术有一个全新的认知。 第二部分是架构师的程序设计修炼。讲述如何设计一个强大灵活、易复用、易维护的软件,在这个过程中,应该依赖哪些工具和方法,遵循哪些原则和思想,使用哪些模式和手段。 第三部分是架构师的架构方法修炼。围绕目前主要的互联网分布式架构以及大数据、物联网架构分析这些架构背后的原理,详解它们都遵循了怎样的驱动力和设计思想,以及如何通过这些技术实现系统的高可用和高性能。 第四部分是架构师的思维修炼。软件开发是一个实践性很强的活动,如果只是学习技术,那就是在纸上谈兵。只有将知识技能应用到工作实践中,才能真正体会到技术的关键点在哪里。如何在工作中处理好各种关系,得到充分的授权和信任,在工作中实践自己的技术思想,并为公司创造更多的价值,使自己的技术成长和职业发展进入互相促进的正向通道,也是架构师需要修炼与提升的。 |
目录 |
[套装书具体书目] 8079921 - 架构师的自我修炼:技术、架构和未来 - 9787111679363 - 机械工业出版社 - 定价 89 8084732 - 解决方案架构师修炼之道 - 9787111694441 - 机械工业出版社 - 定价 119 ---------------------------8084732 - 解决方案架构师修炼之道--------------------------- 本书赞誉 推荐序一 推荐序二 推荐序三 推荐序四 译者序 序言 前言 作者简介 审校者简介 第1章 解决方案架构的含义 1 1.1 什么是解决方案架构 2 1.2 解决方案架构的演进 4 1.3 解决方案架构为何如此重要 5 1.4 解决方案架构的益处 5 1.4.1 满足业务需求和交付质量 7 1.4.2 选择最佳技术平台 7 1.4.3 处理解决方案的约束和问题 7 1.4.4 协助资源和成本管理 8 1.4.5 管理解决方案交付和项目生命周期 8 1.4.6 解决非功能性需求 8 1.5 公有云中的解决方案架构 9 1.5.1 什么是公有云 9 1.5.2 公有云、私有云和混合云 10 1.5.3 公有云架构 10 1.5.4 公有云供应商和云服务产品 11 1.6 小结 12 第2章 组织中的解决方案架构师 14 2.1 解决方案架构师角色的类型 15 2.1.1 企业解决方案架构师 17 2.1.2 解决方案架构师 17 2.1.3 技术架构师 18 2.1.4 云架构师 18 2.1.5 架构师布道者 18 2.1.6 基础设施架构师 19 2.1.7 网络架构师 19 2.1.8 数据架构师 20 2.1.9 安全架构师 21 2.1.10 DevOps架构师 21 2.2 理解解决方案架构师的职责 22 2.2.1 分析用户需求 22 2.2.2 定义非功能性需求 23 2.2.3 与利益相关者的接触与合作 25 2.2.4 处理各种架构约束 25 2.2.5 技术选型 27 2.2.6 概念验证和原型开发 27 2.2.7 设计解决方案并持续交付 28 2.2.8 确保发布后的可操作性和可维护性 29 2.2.9 担任技术布道者 30 2.3 敏捷组织中的解决方案架构师 30 2.3.1 为什么选择敏捷方法论 30 2.3.2 敏捷宣言 31 2.4 小结 35 第3章 解决方案架构的属性 36 3.1 可伸缩性和弹性 37 3.1.1 容量伸缩困境 38 3.1.2 架构伸缩 38 3.1.3 静态内容伸缩 40 3.1.4 服务器机群弹性 40 3.1.5 数据库伸缩 40 3.2 高可用性和韧性 41 3.3 容错和冗余 43 3.4 灾难恢复与业务连续性 44 3.5 可扩展性与可重用性 45 3.6 易用性与可访问性 46 3.7 可移植性与互操作性 47 3.8 卓越运维与可维护性 48 3.9 安全性与合规性 49 3.9.1 认证和授权 49 3.9.2 Web安全 50 3.9.3 网络安全 50 3.9.4 基础设施安全 50 3.9.5 数据安全 50 3.10 成本优化与预算 51 3.11 小结 52 第4章 解决方案架构的设计原则 53 4.1 工作负载的伸缩 54 4.1.1 可预测伸缩 54 4.1.2 被动伸缩 56 4.2 构建有韧性的架构 56 4.3 性能设计 58 4.4 使用可替换资源 59 4.5 考虑松耦合 60 4.6 考虑服务而非服务器 62 4.7 根据合理的需求选择合适的存储 63 4.8 考虑数据驱动的设计 65 4.9 克服约束 65 4.10 安全无处不在 67 4.11 自动化一切 67 4.12 小结 68 第5章 云迁移和混合云架构设计 70 5.1 云原生架构的好处 71 5.2 创建云迁移策略 72 5.2.1 Lift and Shift方法 73 5.2.2 云原生方法 75 5.2.3 Retain or Retire方法 76 5.3 云迁移的步骤 77 5.3.1 发现工作负载 78 5.3.2 分析信息 79 5.3.3 制订迁移计划 80 5.3.4 设计应用程序 83 5.3.5 执行应用程序迁移上云 85 5.3.6 集成、验证和切换 87 5.3.7 运维云应用程序 89 5.3.8 云上应用程序优化 90 5.4 创建混合云架构 91 5.5 设计云原生架构 92 5.6 主流的公有云 94 5.7 小结 95 5.8 进一步阅读 95 第6章 解决方案架构设计模式 96 6.1 构建N层架构 97 6.1.1 Web层 97 6.1.2 应用层 99 6.1.3 数据库层 99 6.2 创建基于SaaS的多租户架构 99 6.3 构建无状态和有状态的架构 101 6.4 理解SOA 103 6.4.1 基于SOAP的Web服务架构 103 6.4.2 RESTful Web服务架构 105 6.4.3 构建基于SOA的电子商务网站架构 106 6.5 构建无服务器架构 107 6.6 创建微服务架构 109 6.7 构建基于队列的架构 111 6.7.1 队列链表模式 112 6.7.2 作业观察者模式 113 6.8 创建事件驱动架构 114 6.8.1 发布者/订阅者模型 114 6.8.2 事件流模型 115 6.9 构建基于缓存的架构 116 6.9.1 三层Web架构中的缓存分发模式 117 6.9.2 重命名分发模式 119 6.9.3 缓存代理模式 120 6.9.4 重写代理模式 121 6.9.5 应用缓存模式 122 6.10 理解断路器模式 123 6.11 实现隔板模式 124 6.12 构建浮动IP模式 125 6.13 使用容器部署应用程序 126 6.13.1 容器的好处 127 6.13.2 容器化部署 128 6.14 应用程序架构中的数据库处理 129 6.15 避免解决方案架构中的反模式 132 6.16 小结 133 第7章 性能考量 134 7.1 架构性能的设计原则 134 7.1.1 降低延迟 135 7.1.2 提高吞吐量 136 7.1.3 处理并发问题 137 7.1.4 使用缓存 138 7.2 性能优化的技术选型 139 7.2.1 计算能力选型 139 7.2.2 选择存储 144 7.2.3 选择数据库 147 7.2.4 选择网络 149 7.3 管理性能监控 152 7.4 小结 153 第8章 安全考量 155 8.1 架构安全的设计原则 155 8.1.1 实现认证和授权控制 156 8.1.2 安全无处不在 156 8.1.3 缩小爆炸半径 157 8.1.4 时刻监控和审计一切 157 8.1.5 自动化一切 157 8.1.6 数据保护 157 8.1.7 事件响应准备 158 8.2 架构安全技术选型 158 8.2.1 用户身份和访问管理 158 8.2.2 处理网络安全问题 165 8.2.3 保护应用程序及其基础设施 169 8.2.4 数据安全 173 8.3 安全和合规认证 178 8.4 云的共享安全责任模型 178 8.5 小结 180 第9章 架构可靠性考量 182 9.1 架构可靠性的设计原则 182 9.1.1 使系统自愈 183 9.1.2 实现自动化 183 9.1.3 创建分布式系统 184 9.1.4 容量监控 184 9.1.5 验证恢复过程 184 9.2 架构可靠性的技术选型 185 9.2.1 规划RTO和RPO 185 9.2.2 数据复制 186 9.2.3 规划灾难恢复 188 9.2.4 灾难恢复的最佳实践 195 9.3 利用云来提高可靠性 196 9.4 小结 197 第10章 卓越运维考量 198 10.1 卓越运维的设计原则 199 10.1.1 自动化运维 199 10.1.2 进行增量和可逆的变更 199 10.1.3 预测并响应故障 200 10.1.4 从错误中学习并改进 200 10.1.5 持续更新运维手册 200 10.2 卓越运维的技术选型 201 10.2.1 卓越运维的规划阶段 201 10.2.2 卓越运维的执行阶段 204 10.2.3 卓越运维的改进阶段 210 10.3 在公有云中实现卓越运维 212 10.4 小结 213 第11章 成本考量 215 11.1 成本优化的设计原则 215 11.1.1 计算总拥有成本 216 11.1.2 规划预算和预测 217 11.1.3 管理需求和服务 218 11.1.4 跟踪支出 219 11.1.5 持续成本优化 219 11.2 成本优化的技术选型 220 11.2.1 降低架构复杂度 220 11.2.2 提高IT效率 221 11.2.3 实现标准化和架构治理 222 11.2.4 成本监控和报告 224 11.3 公有云上的成本优化 227 11.4 小结 228 第12章 DevOps和解决方案架构框架 230 12.1 DevOps介绍 231 12.2 DevOps的好处 231 12.3 DevOps的组成部分 232 12.3.1 CI/CD 233 12.3.2 持续监控和改进 234 12.3.3 基础设施即代码 235 12.3.4 配置管理 235 12.4 什么是DevSecOps 236 12.5 结合DevSecOps和CI/CD 237 12.6 实施CD策略 238 12.6.1 就地部署 238 12.6.2 滚动部署 238 12.6.3 蓝绿部署 238 12.6.4 红黑部署 239 12.6.5 不可变部署 240 12.7 在CI/CD流水线中实施持续测试 240 12.8 CI/CD的DevOps工具 242 12.8.1 代码编辑器 243 12.8.2 源代码管理 243 12.8.3 CI服务器 243 12.8.4 代码部署 245 12.8.5 代码流水线 246 12.9 实施DevOps最佳实践 247 12.10 小结 248 第13章 数据工程和机器学习 249 13.1 什么是大数据架构 250 13.2 大数据处理流水线设计 251 13.3 数据摄取 252 13.3.1 数据摄取的技术选型 253 13.3.2 数据摄取上云 254 13.4 数据存储 255 13.5 数据处理和分析 262 13.6 数据可视化 265 13.7 理解物联网 266 13.8 什么是机器学习 267 13.9 使用数据科学和机器学习 268 13.10 评估机器学习模型:过拟合与欠拟合 270 13.11 了解监督学习和无监督学习 270 13.12 小结 272 第14章 遗留系统架构设计 273 14.1 遗留系统面临的挑战 274 14.1.1 难以满足用户需求 274 14.1.2 维护和更新费用较高 275 14.1.3 缺乏技能和文档 275 14.1.4 存在安全风险 276 14.1.5 无法兼容其他系统 276 14.2 遗留系统现代化改造策略 277 14.2.1 系统现代化改造的好处 277 14.2.2 遗留系统的评估 279 14.2.3 现代化改造方案 279 14.2.4 文档和支持 280 14.3 遗留系统现代化改造技术 280 14.3.1 封装、重新托管和重新平台化 281 14.3.2 重构和重新架构 282 14.3.3 重新设计和替换 282 14.4 遗留系统的云迁移策略 283 14.5 小结 284 第15章 解决方案架构文档 285 15.1 文档目的 285 15.2 文档视图 286 15.3 文档结构 288 15.3.1 解决方案概述 289 15.3.2 业务上下文 290 15.3.3 概念解决方案概述 291 15.3.4 解决方案架构 292 15.3.5 解决方案交付 295 15.3.6 解决方案管理 295 15.3.7 附录 296 15.4 解决方案架构的IT采购文档 296 15.5 小结 297 第16章 学习软技能,成为更优秀的解决方案架构师 298 16.1 掌握售前技能 299 16.2 向企业高管汇报 300 16.3 主人翁意识和责任心 301 16.4 定义战略执行以及目标与关键成果 301 16.5 着眼于大局 302 16.6 灵活性和适应性 303 16.7 设计思维 303 16.8 做一个动手写代码的程序员 305 16.9 持续学习,不断进步 306 16.10 成为他人的导师 307 16.11 成为技术布道者和思想领袖 308 16.12 小结 308 ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 前言 第一部分 架构师的基础知识修炼 第1章 操作系统原理:程序是如何运行和崩溃的 2 1.1 程序是如何运行起来的 2 1.2 一台计算机如何同时处理数以百计的任务 4 1.3 系统为什么会变慢,为什么会崩溃 5 1.4 小结 7 第2章 数据结构原理:Hash表的时间复杂度为什么是O(1) 8 2.1 数组的结构 8 2.2 链表的结构 9 2.3 Hash表的结构 10 2.4 栈的结构 12 2.5 队列的结构 13 2.6 树的结构 14 2.7 小结 14 第3章 Java虚拟机原理:JVM为什么被称为机器 16 3.1 JVM的构造 17 3.2 JVM的垃圾回收 19 3.3 Web应用程序在JVM中的执行过程 22 3.4 小结 24 第4章 网络编程原理:一个字符的互联网之旅 25 4.1 DNS域名解析原理 26 4.2 CDN 27 4.3 HTTP的结构 28 4.4 TCP的结构 29 4.5 链路层负载均衡原理 32 4.6 小结 33 第5章 文件系统原理:用1分钟遍历一个100TB的文件 34 5.1 硬盘结构原理 35 5.2 文件系统原理 36 5.3 RAID硬盘阵列原理 37 5.4 分布式文件系统架构原理 39 5.5 小结 40 第6章 数据库原理:SQL为什么要预编译 42 6.1 数据库架构与SQL执行过程 43 6.2 使用PrepareStatement执行SQL的好处 45 6.3 数据库文件存储与索引工作原理 46 6.4 小结 48 第7章 编程语言原理:面向对象编程是编程的终极形态吗 49 7.1 软件编程的远古时代 49 7.2 机器与汇编语言时代 51 7.3 高级编程语言时代 51 7.4 面向对象编程时代 52 7.5 编程语言的未来 53 7.6 小结 54 第二部分 架构师的程序设计修炼 第8章 软件设计的方法论:软件为什么要建模 56 8.1 什么是软件建模 57 8.2 4+1视图模型 58 8.3 UML建模 59 8.4 小结 60 第9章 软件设计实践:使用UML完成一个设计文档 61 9.1 用类图设计对象模型 61 9.2 用序列图描述系统调用 62 9.3 用组件图进行模块设计 63 9.4 用部署图描述系统物理架构 64 9.5 使用用例图进行需求分析 65 9.6 用状态图描述对象状态变迁 66 9.7 用活动图描述调用流程 66 9.8 使用合适的UML模型构建一个软件设计文档 67 9.9 软件架构设计文档示例模板 68 9.10 小结 74 第10章 软件设计的目的:糟糕的程序差在哪里 75 10.1 糟糕的设计有多糟糕 76 10.2 一个设计“腐坏”的例子 77 10.3 解决之道 78 10.4 小结 80 第11章 软件设计的开闭原则:不修改代码却能实现需求变更 81 11.1 什么是开闭原则 81 11.2 一个违反开闭原则的例子 82 11.3 使用策略模式实现开闭原则 84 11.4 使用适配器模式实现开闭原则 85 11.5 使用观察者模式实现开闭原则 86 11.6 使用模板方法模式实现开闭原则 88 11.7 小结 89 第12章 软件设计的依赖倒置原则:不依赖代码却可以复用它的功能 91 12.1 依赖倒置原则 91 12.2 依赖倒置的关键是接口所有权的倒置 93 12.3 使用依赖倒置来实现高层模块复用 94 12.4 小结 96 第13章 软件设计的里氏替换原则:正方形可以继承长方形吗 97 13.1 里氏替换原则 98 13.2 一个违反里氏替换原则的例子 99 13.3 正方形可以继承长方形吗 100 13.4 子类不能比父类更严格 101 13.5 小结 102 第14章 软件设计的单一职责原则:一个类文件打开后最好不要超过一屏 104 14.1 单一职责原则 107 14.2 一个违反单一职责原则的例子 107 14.3 从Web应用架构演进看单一职责原则 108 14.4 小结 110 第15章 软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法 112 15.1 接口隔离原则 113 15.2 一个使用接口隔离原则优化的例子 114 15.3 接口隔离原则在迭代器设计模式中的应用 117 15.4 小结 117 第16章 设计模式基础:不会灵活应用设计模式,就没有掌握面向对象编程 119 16.1 面向对象编程的本质是多态 119 16.2 设计模式的精髓是对多态的使用 121 16.3 小结 123 第17章 设计模式应用:编程框架中的设计模式 125 17.1 什么是框架 125 17.2 Web容器中的设计模式 127 17.3 JUnit中的设计模式 129 17.4 小结 132 第18章 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应 133 18.1 反应式编程 135 18.2 反应式编程框架Flower的基本原理 135 18.3 反应式编程框架Flower的设计方法 138 18.4 反应式编程框架Flower的落地效果 140 18.5 小结 141 第19章 组件设计原则:组件的边界在哪里 143 19.1 组件内聚原则 144 19.2 组件耦合原则 145 19.3 小结 147 第20章 领域驱动设计:35岁的程序员应该写什么样的代码 148 20.1 领域模型模式 149 20.2 领域驱动设计 151 20.3 小结 154 第三部分 架构师的架构方法修炼 第21章 分布式架构:如何应对高并发的用户请求 156 21.1 垂直伸缩与水平伸缩 157 21.2 互联网分布式架构演化 157 21.3 小结 163 第22章 缓存架构:减少不必要的计算 165 22.1 通读缓存 166 22.2 旁路缓存 168 22.3 缓存注意事项 171 22.4 小结 173 第23章 异步架构:避免互相依赖的系统间耦合 174 23.1 使用消息队列实现异步架构 175 23.2 消息队列异步架构的好处 178 23.3 小结 180 第24章 负载均衡架构:用10行代码实现一个负载均衡服务 181 24.1 HTTP重定向负载均衡 181 24.2 DNS负载均衡 183 24.3 反向代理负载均衡 184 24.4 IP负载均衡 184 24.5 数据链路层负载均衡 186 24.6 小结 187 第25章 数据存储架构:改善系统的数据存储能力 188 25.1 数据库主从复制 188 25.2 数据库分片 190 25.3 关系数据库的混合部署 193 25.4 NoSQL数据库 196 25.5 小结 197 第26章 搜索引擎架构:瞬间完成海量数据检索 199 26.1 搜索引擎倒排索引 199 26.2 搜索引擎结果排序 202 26.3 小结 205 第27章 微服务架构:微服务究竟是“灵丹”还是“毒药” 206 27.1 单体架构的困难和挑战 206 27.2 微服务框架原理 208 27.3 微服务架构的落地实践 210 27.4 小结 211 第28章 高性能架构:除了代码,还可以在哪些地方优化性能 212 28.1 性能指标 212 28.2 性能测试 213 28.3 性能优化 215 28.4 小结 219 第29章 高可用架构:淘宝应用升级时,为什么没有停机 220 29.1 高可用的度量 221 29.2 高可用的架构 222 29.3 小结 225 第30章 安全性架构:为什么说用户密码泄露是程序员的问题 227 30.1 数据加密与解密 227 30.2 HTTP攻击与防护 230 30.3 小结 233 第31章 大数据架构:思想和原理 234 31.1 HDFS分布式文件存储架构 235 31.2 MapReduce大数据计算架构 236 31.3 Hive大数据仓库架构 238 31.4 Spark快速大数据计算架构 240 31.5 大数据流计算架构 242 31.6 小结 242 第32章 AI与物联网架构:从智能引擎到物联网平台 243 32.1 大数据平台架构 244 32.2 智能推荐算法 245 32.3 物联网大数据架构 249 32.4 小结 250 第33章 区块链技术架构:区块链到底能做什么 251 33.1 比特币与区块链原理 251 33.2 联盟链与区块链的企业级应用 255 33.3 小结 257 第四部分 架构师的思维修炼 第34章 技术修炼之道:同样工作十几年,为什么有的人成为资深架构师,有的人失业 260 34.1 德雷福斯模型 261 34.2 如何在工作中成长 263 34.3 小结 264 第35章 技术进阶之道:你和世界上顶级的程序员差几个等级 265 35.1 软件技术的生态江湖与等级体系 265 35.2 技术进阶之捷径 267 35.3 小结 269 第36章 技术落地之道:你真的知道自己要解决的问题是什么吗 270 36.1 确定会议真正要解决的问题是什么 271 36.2 不需要去解决别人的问题,提醒他问题的存在即可 272 36.3 去解决那些被人们习以为常而忽略了的问题 273 36.4 小结 273 第37章 技术沟通之道:如何解决问题 275 37.1 让有能力解决问题的人感受到问题的存在 275 37.2 “直言有讳” 276 37.3 想解决一个大家都不关注的问题,可以等问题变得更糟 277 37.4 如果不填老师想要的答案,你就得不了分 278 37.5 小结 278 第38章 技术管理之道:真的要转管理吗 280 38.1 彼得定律 281 38.2 用目标驱动 282 38.3 小结 283 附录A 软件开发技术的第一性原理 284 附录B 我的架构师成长之路 287 附录C 无处不在的架构之美 293 附录D 软件架构师之道 298 |