架构修炼之道 第*部分 概述 第*章 设计与架构究竟是什么 3 目标是什么 4 案例分析 5 本章小结 11 第2章 两个价值维度 12 行为价值 13 架构价值 13 哪个价值维度更重要 14 艾森豪威尔矩阵 15 为好的软件架构而持续斗争 16 第2部分 从基础构件开始:编程范式 第3章 编程范式总览 21 结构化编程 22 面向对象编程 22 函数式编程 23 仅供思考 23 本章小结 24 第4章 结构化编程 25 可推导性 26 goto是有害的 28 功能性降解拆分 29 形式化证明没有发生 29 科学来救场 29 测试 30 本章小结 31 第5章 面向对象编程 32 封装 33 继承 36 多态 38 本章小结 44 第6章 函数式编程 45 整数平方 46 不可变性与软件架构 47 可变性的隔离 48 事件溯源 49 本章小结 51 第3部分 设计原则 第7章 SRP:单一职责原则 56 反面案例2:代码合并 59 解决方案 60 本章小结 61 第8章 OCP:开闭原则 62 思想实验 63 依赖方向的控制 67 信息隐藏 67 本章小结 67 第9章 LSP:里氏替换原则 68 继承的使用指导 69 正方形/长方形问题 70 LSP与软件架构 70 违反LSP的案例 71 本章小结 73 第10章 ISP:接口隔离原则 74 ISP与编程语言 76 ISP与软件架构 76 本章小结 77 第11章 DIP:依赖反转原则 78 稳定的抽象层 79 工厂模式 80 具体实现组件 82 本章小结 82 第4部分 组件构建原则 第12章 组件 84 组件发展史 85 重定位技术 88 链接器 88 本章小结 90 第13章 组件聚合 91 复用/发布等同原则 92 共同闭包原则 93 共同复用原则 94 组件聚合张力图 95 本章小结 97 第14章 组件耦合 98 无依赖环原则 99 自上而下的设计 105 稳定依赖原则 106 稳定抽象原则 112 本章小结 117 第5部分 软件架构 第15章 什么是软件架构 120 开发(Development) 122 部署(Deployment) 123 运行(Operation) 123 维护(Maintenance) 124 保持可选项 124 设备无关性 126 垃圾邮件 128 物理地址寻址 129 本章小结 130 第16章 独立性 131 用例 132 运行 133 开发 133 部署 134 保留可选项 134 按层解耦 135 用例的解耦 136 解耦的模式 136 开发的独立性 137 部署的独立性 137 重复 138 再谈解耦模式 139 本章小结 141 第17章 划分边界 142 几个悲伤的故事 143 FitNesse 146 应在何时、何处画这些线 148 输入和输出怎么办 151 插件式架构 152 插件式架构的好处 153 本章小结 154 第18章 边界剖析 155 跨边界调用 156 令人生畏的单体结构 156 部署层次的组件 158 线程 159 本地进程 159 服务 160 本章小结 161 第19章 策略与层次 162 层次(Level) 163 本章小结 166 第20章 业务逻辑 167 业务实体 168 用例 169 请求和响应模型 171 本章小结 172 第21章 尖叫的软件架构 173 架构设计的主题 174 ... 一个常见的应用场景 183 本章小结 184 第23章 展示器和谦卑对象 185 谦卑对象模式 186 展示器与视图 186 测试与架构 187 数据库网关 188 数据映射器 188 服务监听器 189 本章小结 189 第24章 不完全边界 190 省掉最后一步 191 单向边界 192 门户模式 193 本章小结 193 第25章 层次与边界 194 基于文本的冒险游戏:Hunt The Wumpus 195 可否采用整洁架构 196 交汇数据流 199 数据流的分割 199 本章小结 201 第26章 Main组件 203 ... 本章小结 238 第6部分 实现细节 第30章 数据库只是实现细节 240 关系型数据库 241 为什么数据库系统如此流行 242 假设磁盘不存在会怎样 243 实现细节 243 但性能怎么办呢 244 一段轶事 244 本章小结 246 第31章 Web是实现细节 247 无尽的钟摆 248 总结一下 250 本章小结 251 第32章 应用程序框架是实现细节 252 框架作者 253 单向婚姻 253 风险 254 解决方案 255 不得不接受的依赖 255 本章小结 256 第33章 案例分析:视频销售网站 257 产品 258 用例分析 258 组件架构 260 依赖关系管理 261 本章小结 262 第34章 拾遗 263 按层封装 264 按功能封装 266 端口和适配器 268 按组件封装 270 具体实现细节中的陷阱 274 组织形式与封装的区别 275 其他的解耦合模式 277 本章小结:本书拾遗 279 后序 280 附录A 架构设计考古 283 架构修炼之道 第1章 网关之道 1.1 认识API网关 1.1.1 API网关是什么 1.1.2 API网关涵盖的基本功能 1.1.3 API网关架构示例 1.2 一个API的生命周期 1.2.1 什么是API 1.2.2 生命周期 1.2.3 生命周期的过程 1.3 API网关的基石—泛化调用 1.4 如何发布API到网关系统 1.5 管道技术 1.5.1 管道实现 1.5.2 如何获取管道 1.5.3 管道信息传递 1.5.4 管道的优点 1.5.5 责任链模式 1.6 一个传统网关系统有几种“死”法 1.6.1 关注CPU 1.6.2 关注磁盘 1.6.3 关注网络 1.7 Servlet 3异步原理与实践 1.7.1 什么是Servlet 1.7.2 什么是Servlet规范 1.7.3 同步、异步、阻塞、非阻塞 1.7.4 Servlet 3的异步流程 1.7.5 Servlet 3的异步使用步骤 1.7.6 Servlet 3的异步使用示例 1.7.7 Tomcat NIO Connector、Servlet 3.0 Async和Spring MVC Async的关系 1.7.8 Servlet 3非阻塞I/O 1.8 全异步网关 1.9 脱库与多级缓存 1.9.1 脱库 1.9.2 多级缓存 ... 2.3 如何设计一套SPI应用架构 2.3.1 API和SPI区别 2.3.2 术语约定 2.3.3 业务场景 2.3.4 架构实现 2.3.5 测试 2.3.6 SPI是一种思想 2.4 讲一讲越权 2.4.1 什么是越权访问 2.4.2 越权访问的种类 2.4.3 发生越权访问的根本原因 2.4.4 如何避免与解决 2.4.5 开放平台环境下的越权访问 2.5 从Facebook数据泄漏谈开放安全 2.5.1 OAuth 2.0授权 2.5.2 数据加/解密 2.5.3 IP地址白名单 2.5.4 平台内环境 2.6 API治理 2.6.1 性能 2.6.2 可用率 2.6.3 文档可读性 2.7 API经济 2.7.1 API盈利模式 2.7.2 API市场 2.7.3 API经济价值链 2.8 沙箱环境 2.8.1 协同 2.8.2 维护 2.9 本章小结 第3章 分布式之道 3.1 认识分布式 3.2 分布式事务 3.2.1 什么是分布式事务 3.2.2 CAP和BASE理论 3.3 分布式锁 3.3.1 为什么需要分布式锁 3.3.2 分布式锁的实现方式 3.4 分布式限流 3.4.1 计数器 3.4.2 限速器 3.4.3 限流的维度 3.4.4 流量包 3.4.5 再来谈令牌桶 3.5 衡量性能的指标QPS、TPS等 3.5.1 什么是QPS 3.5.2 什么是TPS 3.5.3 什么是RT 3.5.4 什么是并发数 3.6 本章小结 第4章 MQ之道 4.1 认识JMS 4.1.1 JMS的组成 4.1.2 JMS编程模型 4.1.3 JMS消息结构 4.1.4 JMS消息模型 4.2 带着思考理解MQ下的基本概念 4.2.1 生产者—消费者(Producer-Consumer) 4.2.2 空间解耦 4.2.3 时间解耦 4.2.4 观察者模式与发布/订阅 4.3 消费幂等 4.3.1 什么是幂等操作 4.3.2 是什么引起我们关注消费幂等 4.3.3 如何处理消费幂等 4.4 详述MQ各种功能场景 4.4.1 解耦 4.4.2 削峰填谷 4.4.3 最终一致性 4.4.4 广播消费 4.4.5 使用集群消费模拟广播 4.4.6 重试之坑 4.5 数据异构的武器—MQ canal 4.5.1 定义 4.5.2 常见应用场景 4.5.3 数据异构方向 4.5.4 数据异构的常用方法 4.5.5 binlog和MQ方式 4.6 关于MQ再问自己几个问题 4.6.1 我想自己控制开始消费如何做 4.6.2 为什么需要消息过滤 4.6.3 过期消息是怎么处理的 4.6.4 消息重试的注意点 4.6.5 为什么需要事务消息 4.6.6 消息为什么没有了顺序 4.7 本章小结 第5章 消息推送之道 5.1 认识消息推送 5.2 构建长连接推送系统之HTTP实践 5.2.1 Web网络结构及配置 5.2.2 基本配置 5.2.3 Transfer-Encoding: chunked 5.2.4 HTTP长连接系统组成结构 5.2.5 Session管理 ... 5.3.3 心跳 5.3.4 发送消息 5.3.5 注销会话 5.3.6 黏包 5.4 一台服务器可以“跑”多少个连接 5.5 一台服务器可以“跑”多少个线程 5.6 弱网络环境 5.7 发送APNs 5.7.1 认识APNs 5.7.2 HTTP/2 5.7.3 Pushy的使用 ... |