作者 |
居瓦·洛瑞 周志明 |
丛书名 |
架构师书库 |
出版社 |
机械工业出版社 |
ISBN |
9782108101751 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8082990 - 架构之道:软件构建的设计方法--------------------------- 本课程通过自顶向下的程序设计演示和解释,教授学生如何在机器层面上编写和调试程序,并将有效的设计技巧应用于多种程序设计课程。这种方法简化并消除了学生在学习更高级的计算机体系结构和操作系统课程之前需要掌握的概念。 ---------------------------8081487 - 凤凰架构:构建可靠的大型分布式系统--------------------------- 内容简介 这是一本从架构视角讲解如何构建大型分布式系统的著作,是超级畅销书《深入理解Java虚拟机》的作者周志明多年架构和研发经验的总结,得到了多位行业资深架构专家的联袂推荐。 全书共16章,分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分。 第1部分 演进中的架构(第1章) 着重介绍了软件开发历史中多种主流架构风格出现的契机、解决的问题以及带来的新缺陷。 第二部分 架构师的视角(第2~5章) 总结了一名架构师应该在架构设计时思考哪些问题,有哪些主流的解决方案和行业标准做法,各种方案有什么优缺点,不同的解决方法会带来什么不同的影响,等等。 第三部分 分布式的基石(第6~10章) . 重点讨论了“不同架构风格是应该在技术规范上统一,还是由应用系统自行解决”这个问题,给出了解决思路、方法和常见工具。 第四部分 不可变基础设施(第11~15章) 重点讲解了基础设施不变性的目的、原理与实现途径,包括虚拟化容器、容器间网络、持久化存储、资源与调度、服务网格等内容。 第五部分 技术方法论(第16章) 面向技术决策者集中讨论了与分布式、微服务、架构等相关的理论话题,将解决问题的能力归纳、总结、升华为方法论。 全书以实践为导向,一个案例贯穿全书,同时给出了基于Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda 五种架构风格的样例工程。 |
目录 |
[套装书具体书目] 8081487 - 凤凰架构:构建可靠的大型分布式系统 - 9787111683919 - 机械工业出版社 - 定价 99 8082990 - 架构之道:软件构建的设计方法 - 9787111687702 - 机械工业出版社 - 定价 199 ---------------------------8082990 - 架构之道:软件构建的设计方法--------------------------- 赞誉 译者序 前言 作者介绍 第1章 元设计方法 / 1 1.1 什么是元设计方法 / 2 1.1.1 设计验证 / 3 1.1.2 紧迫的时间 / 3 1.1.3 消除分析瘫痪 / 4 1.1.4 沟通 / 5 1.2 元设计方法不是什么 / 6 |第一部分| 系统设计 第2章 分解 / 8 2.1 避免功能分解 / 9 2.1.1 功能分解带来的问题 / 9 2.1.2 关于功能分解的思考 / 13 2.1.3 避免领域分解 / 15 2.1.4 错误的动机 / 17 2.1.5 可测试性和设计 / 17 2.1.6 示例:功能型交易系统 / 19 2.2 基于易变性的分解 / 21 2.2.1 分解、维护和开发 / 22 2.2.2 普遍性原则 / 23 2.2.3 基于易变性的分解与测试 / 24 2.2.4 易变性的挑战 / 24 2.3 识别易变性 / 26 2.3.1 易变性与可变性 / 26 2.3.2 易变轴 / 27 2.3.3 伪装成需求的解决方案 / 29 2.3.4 易变列表 / 30 2.3.5 示例:基于易变性的交易系统 / 30 2.3.6 抵制“塞壬之歌” / 34 2.3.7 易变性与业务 / 35 2.3.8 为竞争对手设计 / 37 2.3.9 易变性和寿命 / 38 2.3.10 实践的重要性 / 38 第3章 结构 / 40 3.1 用例和需求 / 41 3.2 分层方法 / 43 3.3 典型分层 / 44 3.3.1 客户端层 / 44 3.3.2 业务逻辑层 / 45 3.3.3 资源访问层 / 46 3.3.4 资源层 / 47 3.3.5 实用工具库栏 / 48 3.4 分类指南 / 48 3.4.1 命名的玄机 / 48 3.4.2 四个问题 / 49 3.4.3 管理器与引擎比 / 50 3.4.4 关键观察 / 51 3.5 子系统和服务 / 52 3.5.1 增量构造 / 52 3.5.2 关于微服务 / 54 3.6 开放和封闭式架构 / 56 3.6.1 开放式架构 / 56 3.6.2 封闭式架构 / 56 3.6.3 半封闭/半开放架构 / 57 3.6.4 放宽规则 / 57 3.6.5 设计禁忌 / 59 3.6.6 力求对称 / 61 第4章 组合 / 62 4.1 需求与变更 / 62 4.1.1 憎恨变更 / 63 4.1.2 设计基本准则 / 63 4.2 可组合设计 / 64 4.2.1 核心用例 / 64 4.2.2 架构师的使命 / 65 4.3 这里没有功能 / 68 4.4 处理变更 / 69 第5章 系统设计示例 / 71 5.1 系统概述 / 72 5.1.1 遗留系统 / 73 5.1.2 新系统 / 74 5.1.3 公司 / 74 5.1.4 用例 / 74 5.2 反设计工作 / 80 5.2.1 巨型系统 / 80 5.2.2 颗粒化构建块 / 80 5.2.3 域分解 / 81 5.3 业务对齐 / 82 5.3.1 愿景 / 82 5.3.2 业务目标 / 83 5.3.3 使命陈述 / 84 5.4 架构 / 84 5.4.1 TradeMe词汇表 / 84 5.4.2 TradeMe易变区域 / 85 5.4.3 静态架构 / 88 5.4.4 操作概念 / 90 5.4.5 工作流管理器 / 92 5.5 设计验证 / 93 5.5.1 添加技工/承包商用例 / 94 5.5.2 请求技工用例 / 95 5.5.3 匹配技工用例 / 96 5.5.4 分配技工用例 / 98 5.5.5 终止技工用例 / 100 5.5.6 支付技工用例 / 101 5.5.7 创建项目用例 / 101 5.5.8 结束项目用例 / 102 5.6 接下来会是什么 / 103 |第二部分| 项目设计 第6章 动机 / 106 6.1 项目设计的背景和基本动机 / 106 6.1.1 项目设计和项目稳健 / 107 6.1.2 组装说明 / 108 6.2 软件项目的需求层级 / 108 第7章 项目设计综述 / 111 7.1 定义成功 / 111 7.2 项目初始人员配备 / 113 7.2.1 一个架构师,非一群架构师 / 113 7.2.2 核心团队 / 114 7.3 明智的决定 / 116 7.3.1 计划,不计划 / 116 7.3.2 软件开发计划评审 / 117 7.4 服务和开发人员 / 117 7.4.1 设计和团队效率 / 119 7.4.2 任务连续性 / 120 7.5 工作量的估算 / 120 7.5.1 经典错误 / 121 7.5.2 估算技术 / 123 7.5.3 总体项目估算 / 124 7.5.4 活动估算 / 126 7.6 关键路径分析 / 127 7.6.1 项目网络图 / 127 7.6.2 关键路径 / 130 7.6.3 分配资源 / 131 7.7 安排活动 / 134 7.8 项目费用 / 140 7.9 挣值计划 / 143 7.9.1 经典错误 / 144 7.9.2 浅S曲线 / 145 7.10 角色和责任 / 148 第8章 网络和浮动时间 / 149 8.1 网络图 / 149 8.1.1 节点图 / 150 8.1.2 箭头图 / 150 8.1.3 箭头图与节点图 / 151 8.2 浮动时间 / 152 8.2.1 总浮动时间 / 153 8.2.2 自由浮动时间 / 153 8.2.3 计算浮动时间 / 154 8.2.4 可视化浮动时间 / 155 8.3 基于浮动时间的进度安排 / 157 第9章 时间和成本 / 159 9.1 加速软件项目 / 159 9.2 进度压缩 / 162 9.2.1 利用更好的资源 / 162 9.2.2 并行工作 / 162 9.2.3 并行工作和成本 / 164 9.3 时间-成本曲线 / 164 9.3.1 时间-成本曲线上的要点 / 165 9.3.2 离散建模 / 167 9.3.3 避免经典错误 / 168 9.3.4 项目可行性 / 168 9.3.5 找到常规方案 / 169 9.4 项目成本要素 / 171 9.4.1 直接成本 / 171 9.4.2 间接成本 / 172 9.4.3 会计与价值 / 172 9.4.4 总成本、直接成本和间接成本 / 172 9.4.5 压缩和成本要素 / 173 9.4.6 人员配备和成本要素 / 176 9.4.7 固定成本 / 178 9.5 网络压缩 / 178 第10章 风险 / 181 10.1 选择选项 / 181 10.2 时间-风险曲线 / 182 10.3 风险建模 / 184 10.3.1 标准化风险 / 185 10.3.2 风险和浮动 / 185 10.3.3 风险和直接成本 / 186 10.3.4 临界风险 / 186 10.3.5 斐波那契风险 / 188 10.3.6 活动风险 / 189 10.3.7 临界风险与活动风险 / 191 10.4 压缩和风险 / 191 10.5 风险缓解 / 192 10.5.1 如何缓解 / 192 10.5.2 缓解目标 / 193 10.6 风险指标 / 194 第11章 实践中的项目设计 / 196 11.1 使命 / 196 11.1.1 静态架构 / 197 11.1.2 调用链 / 197 11.1.3 活动清单 / 199 11.1.4 网络图 / 200 11.1.5 计划假设 / 201 11.2 寻找常规的解决方案 / 203 11.2.1 无限的资源(迭代1) / 203 11.2.2 网络和资源问题 / 204 11.2.3 基础设施优先(迭代2) / 204 11.2.4 有限的资源 / 205 11.2.5 亚临界化(迭代7) / 208 11.2.6 选择常规的解决方案 / 211 11.3 网络压缩 / 211 11.3.1 使用更好的资源进行压缩 / 211 11.3.2 引入并行工作 / 213 11.3.3 压缩迭代结束 / 219 11.3.4 产出分析 / 219 11.4 效率分析 / 221 11.5 时间-成本曲线 / 221 11.5.1 时间-成本相关模型 / 222 11.5.2 死亡区域 / 224 11.6 规划与风险 / 225 11.6.1 风险缓解 / 226 11.6.2 重建时间-成本曲线 / 228 11.6.3 风险模型化 / 230 11.6.4 风险包含与排除 / 232 11.7 SDP评审 / 232 第12章 高级技巧 / 234 12.1 上帝活动 / 234 12.2 风险交叉点 / 235 12.3 找到缓解目标 / 238 12.4 几何风险 / 240 12.4.1 几何临界风险 / 241 12.4.2 几何斐波那契风险 / 241 12.4.3 几何活动风险 / 242 12.4.4 几何风险行为 / 243 12.5 执行复杂度 / 244 12.5.1 圈复杂度 / 244 12.5.2 项目类型与复杂度 / 245 12.5.3 项目压缩与复杂度 / 246 12.6 超大型项目 / 247 12.6.1 复杂系统与脆弱性 / 248 12.6.2 网络群 / 250 12.6.3 设计网络群 / 250 12.7 小项目 / 253 12.8 基于层次设计 / 253 12.8.1 基于层次设计的利弊 / 254 12.8.2 层次与构造 / 255 第13章 项目设计示例 / 256 13.1 估算 / 257 13.1.1 单个活动估算 / 257 13.1.2 总体项目估算 / 258 13.2 依赖关系和项目网络 / 259 13.2.1 行为依赖 / 259 13.2.2 非行为依赖 / 259 13.2.3 覆盖某些依赖 / 260 13.2.4 完整性检查 / 260 13.3 常规方案 / 261 13.3.1 网络图 / 261 13.3.2 计划进度 / 263 13.3.3 计划的人员配备分布 / 263 13.3.4 成本和效率 / 264 13.3.5 结果总结 / 264 13.4 压缩方案 / 264 13.4.1 添加启用活动 / 264 13.4.2 分配资源 / 265 13.4.3 计划进度 / 266 13.4.4 计划的人员配备分布 / 266 13.4.5 成本和效率 / 266 13.4.6 结果总结 / 267 13.5 分层设计 / 268 13.5.1 分层设计和风险 / 268 13.5.2 人员配备分布 / 269 13.5.3 结果总结 / 269 13.6 亚临界方案 / 269 13.6.1 持续时间、计划进度和风险 / 270 13.6.2 成本和效率 / 270 13.6.3 结果总结 / 270 13.7 比较选项 / 271 13.8 计划与风险 / 271 13.8.1 风险缓解 / 271 13.8.2 重新计算成本 / 274 13.9 为SDP评审做准备 / 274 第14章 总结 / 276 14.1 项目设计时间 / 276 14.1.1 真实的答案 / 277 14.1.2 迈向未来 / 278 14.2 一般性指导 / 279 14.2.1 架构与估算 / 279 14.2.2 设计立场 / 280 14.2.3 可选性 / 280 14.2.4 压缩 / 281 14.2.5 计划与风险 / 283 14.3 项目设计的设计 / 283 14.4 不同的视角 / 285 14.5 交接 / 287 14.5.1 初级交接 / 287 14.5.2 高级交接 / 287 14.5.3 资深开发人员作为初级架构师 / 288 14.6 实践 / 289 14.7 项目设计的口头汇报 / 290 14.8 关于质量 / 291 14.8.1 质量控制活动 / 291 14.8.2 质量保证活动 / 292 14.8.3 质量与文化 / 293 |附录| 附录A 项目跟踪 / 296 附录B 服务契约设计 / 310 附录C 设计标准 / 323 ---------------------------8081487 - 凤凰架构:构建可靠的大型分布式系统--------------------------- 赞誉 自序 前言 第一部分 演进中的架构 第1章 服务架构演进史2 1.1 原始分布式时代2 1.2 单体系统时代5 1.3 SOA时代8 1.4 微服务时代12 1.5 后微服务时代16 1.6 无服务时代19 第二部分 架构师的视角 第2章 访问远程服务24 2.1 远程服务调用24 2.1.1 进程间通信24 2.1.2 通信的成本26 2.1.3 三个基本问题28 2.1.4 统一的RPC30 2.1.5 分裂的RPC32 2.2 REST设计风格34 2.2.1 理解REST35 2.2.2 RESTful的系统37 2.2.3 RMM41 2.2.4 不足与争议45 第3章 事务处理48 3.1 本地事务49 3.1.1 实现原子性和持久性50 3.1.2 实现隔离性54 3.2 全局事务57 3.3 共享事务62 3.4 分布式事务64 3.4.1 CAP与ACID64 3.4.2 可靠事件队列67 3.4.3 TCC事务69 3.4.4 SAGA事务72 第4章 透明多级分流系统75 4.1 客户端缓存76 4.1.1 强制缓存77 4.1.2 协商缓存79 4.2 域名解析81 4.3 传输链路83 4.3.1 连接数优化84 4.3.2 传输压缩88 4.3.3 快速UDP网络连接90 4.4 内容分发网络92 4.4.1 路由解析92 4.4.2 内容分发95 4.4.3 CDN应用96 4.5 负载均衡97 4.5.1 数据链路层负载均衡99 4.5.2 网络层负载均衡101 4.5.3 应用层负载均衡104 4.5.4 均衡策略与实现106 4.6 服务端缓存107 4.6.1 缓存属性108 4.6.2 缓存风险117 第5章 架构安全性120 5.1 认证121 5.1.1 认证的标准121 5.1.2 认证的实现128 5.2 授权129 5.2.1 RBAC130 5.2.2 OAuth 2133 5.3 凭证140 5.3.1 Cookie-Session140 5.3.2 JWT142 5.4 保密147 5.4.1 保密的强度147 5.4.2 客户端加密148 5.4.3 密码存储和验证149 5.5 传输151 5.5.1 摘要、加密与签名151 5.5.2 数字证书154 5.5.3 传输安全层157 5.6 验证160 第三部分 分布式的基石 第6章 分布式共识166 6.1 Paxos168 6.1.1 Paxos的诞生169 6.1.2 算法流程169 6.1.3 工作实例172 6.2 Multi Paxos174 6.3 Gossip协议178 第7章 从类库到服务180 7.1 服务发现180 7.1.1 服务发现的意义181 7.1.2 可用与可靠182 7.1.3 注册中心实现185 7.2 网关路由186 7.2.1 网关的职责186 7.2.2 网络I/O模型188 7.2.3 BFF网关190 7.3 客户端负载均衡191 7.3.1 客户端负载均衡器193 7.3.2 代理负载均衡器194 7.3.3 地域与区域196 第8章 流量治理198 8.1 服务容错198 8.1.1 容错策略199 8.1.2 容错设计模式201 8.2 流量控制209 8.2.1 流量统计指标210 8.2.2 限流设计模式211 8.2.3 分布式限流215 第9章 可靠通信217 9.1 零信任网络217 9.1.1 零信任安全模型的特征218 9.1.2 Google的实践探索220 9.2 服务安全222 9.2.1 建立信任222 9.2.2 认证223 9.2.3 授权227 第10章 可观测性230 10.1 事件日志233 10.1.1 输出233 10.1.2 收集与缓冲235 10.1.3 加工与聚合236 10.1.4 存储与查询237 10.2 链路追踪239 10.2.1 追踪与跨度239 10.2.2 数据收集240 10.2.3 追踪规范化243 10.3 聚合度量244 10.3.1 指标收集245 10.3.2 存储查询248 10.3.3 监控预警250 第四部分 不可变基础设施 第11章 虚拟化容器254 11.1 容器的崛起256 11.1.1 隔离文件:chroot256 11.1.2 隔离访问:名称空间257 11.1.3 隔离资源:cgroups258 11.1.4 封装系统:LXC259 11.1.5 封装应用:Docker260 11.1.6 封装集群:Kubernetes263 11.2 以容器构建系统266 11.2.1 隔离与协作266 11.2.2 韧性与弹性271 11.3 以应用为中心的封装275 11.3.1 Kustomize276 11.3.2 Helm与Chart277 11.3.3 Operator与CRD279 11.3.4 开放应用模型284 第12章 容器间网络288 12.1 Linux网络虚拟化288 12.1.1 网络通信模型289 12.1.2 干预网络通信291 12.1.3 虚拟化网络设备294 12.1.4 容器间通信304 12.2 容器网络与生态306 12.2.1 CNM与CNI306 12.2.2 CNM到CNI308 12.2.3 网络插件生态310 第13章 持久化存储314 13.1 Kubernetes存储设计314 13.1.1 Mount和Volume316 13.1.2 静态存储分配318 13.1.3 动态存储分配322 13.2 容器存储与生态325 13.2.1 Kubernetes存储架构325 13.2.2 FlexVolume与CSI327 13.2.3 从In-Tree到Out-of-Tree329 13.2.4 容器插件生态331 第14章 资源与调度336 14.1 资源模型336 14.2 服务质量与优先级337 14.3 驱逐机制340 14.4 默认调度器342 第15章 服务网格346 15.1 透明通信的涅槃347 15.1.1 通信成本347 15.1.2 数据平面352 15.1.3 控制平面358 15.2 服务网格与生态360 15.2.1 服务网格接口361 15.2.2 通用数据平面API363 15.2.3 服务网格生态364 第五部分 技术方法论 第16章 向微服务迈进368 16.1 目的:微服务的驱动力369 16.2 前提:微服务需要的条件371 16.3 边界:微服务的粒度375 16.4 治理:理解系统复杂性377 16.4.1 静态的治理378 16.4.2 发展的治理380 附录A 技术演示工程实践383 附录B 部署Kubernetes集群402 |