内容介绍
本书阐述了在构建软件系统时不可或缺的技术与非技术原则和方法,并详尽展示了如何运用这些原则和方法有效管理项目中的不确定性,从而构建稳固的决策框架。同时,它深刻探讨了领导力与软件架构设计洞察力之间的微妙联系,细致阐述了用户体验设计、宏观架构规划及服务架构部署等关键领域的核心理念与实用技术。通过引用莱特兄弟与凯利·约翰逊等杰出技术领导者的生动案例,来帮助读者理解制订强大决策的重要性。对于软件行业的技术领导者和软件架构决策者来说,本书是一本优秀的参考书。
软件架构决策之道:软件架构决策的原则和方法
技术为骨、领导为魂、产品为心 驾驭软件架构不确定性的破局之道; 软件架构决策的完整指南 帮助领导者管理不确定性并做出正确的判断; 为所有软件架构师、技术决策者 提供一套系统的软件架构原则和方法。
目录
●
译者序
序
前言
第1章软件系统、设计和架构1
1.1软件架构简介1
1.2软件系统设计3
1.3五个问题5
1.3.1问题1:何时是很好的发布时机5
1.3.2问题2:团队的技能水平如何5
1.3.3问题3:系统的性能敏感度如何6
1.3.4问题4:何时可以重写系统7
1.3.5问题5:有哪些难点8
1.4七项原则:总体概念9
1.4.1原则1:一切从用户的旅程出发9
1.4.2原则2:使用迭代薄切片策略10
1.4.3原则3:在每次迭代中,以最小的投入获得优选的价值,以支持更多用户12
1.4.4原则4:做出决策并承担风险14
1.4.5原则5:深入设计难以改变的事物,但要慢慢地实施15
1.4.6原则6:尽早并行处理棘手的难题,消除未知因素,并从实证中学习16
1.4.7原则7:理解软件架构中内聚性和灵活性之间的权衡17
1.5为在线书店进行设计19
1.6为云计算进行设计22
1.7总结24
第2章系统性能的思维模型26
2.1计算机系统28
2.2性能模型28
2.2.1模型1:从用户模式切换到内核模式的成本29
2.2.2模型2:操作层级29
2.2.3模型3:上下文切换开销30
2.2.4模型4:阿姆达尔定律31
2.2.5模型5:通用可扩展性定律32
2.2.6模型6:延迟和利用率的权衡33
2.2.7模型7:以优选有效利用率模型设计吞吐量33
2.2.8模型8:添加延迟34
2.3优化技术37
2.3.1CPU优化技术38
2.3.2I/O优化技术39
2.3.3内存优化技术41
2.3.4延迟优化技术42
2.4对性能的直观感受43
2.5领导力的考量43
2.6总结44
第3章用户体验46
3.1架构师所需的用户体验概念46
3.1.1原则1:了解用户47
3.1.2原则2:必要功能48
3.1.3原则3:好产品不需要说明书,其用途不言自明48
3.1.4原则4:从信息交换的角度思考49
3.1.5原则5:保持简单49
3.1.6原则6:在实施前设计用户体验50
3.2配置的用户体验设计50
3.3API的用户体验设计52
3.4扩展性的用户体验设计54
3.5领导力的考量55
3.6总结56
第4章宏观架构:简介57
4.1宏观架构的历史58
4.2现代架构61
4.3宏观架构下的构建模块62
4.4领导力的考量65
4.5总结67
第5章宏观架构:协调68
5.1方法1:从客户端驱动流程68
5.2方法2:使用另一个服务69
5.3方法3:使用集中式中间件70
5.4方法4:实施编排71
5.5领导力的考量72
5.6总结72
第6章宏观架构:保持状态的一致性74
6.1使用事务74
6.2超越事务75
6.2.1方法1:重新定义问题以减少保证要求77
6.2.2方法2:使用补偿78
6.3很好实践80
6.4领导力的考量81
6.5总结83
第7章宏观架构:安全问题85
7.1用户管理86
7.2交互安全89
7.2.1认证技术90
7.2.2授权技术92
7.2.3应用程序的常见安全交互场景94
7.3存储、GDPR和其他法规98
7.4安全策略和建议100
7.4.1性能和延迟101
7.4.2零信任方法102
7.4.3运行用户提供的代码时要小心103
7.4.4区块链103
7.4.5其他话题103
7.5领导力的考量104
7.6总结106
第8章宏观架构:处理高可用性和扩展107
8.1加入高可用性107
8.1.1复制107
8.1.2快速恢复110
8.2理解可扩展性112
8.3现代架构的扩展:基本解决方案113
8.4扩展:领域中的工具114
8.4.1扩展策略1:无共享116
8.4.2扩展策略2:分布116
8.4.3扩展策略3:缓存116
8.4.4扩展策略4:异步处理116
8.5构建可扩展的系统117
8.5.1方法1:连续消除瓶颈117
8.5.2方法2:无共享设计119
8.6领导力的考量121
8.7总结122
第9章宏观架构:微服务的注意事项123
9.1决策1:处理共享数据库124
9.1.1解决方案1:使用一个微服务更新数据库125
9.1.2解决方案2:使用两个微服务更新数据库126
9.2决策2:确保微服务的安全126
9.3决策3:微服务的协调126
9.4决策4:避免依赖地狱127
9.4.1向后兼容127
9.4.2向前兼容127
9.4.3依赖关系图129
9.5微服务的替代方案:松耦合的基于代码库的团队129
9.6领导力的考量131
9.7总结132
第10章服务架构133
10.1编写服务133
10.2理解编写服务的很好实践134
10.3微服务中的高级技术136
10.3.1使用替代的I/O和线程模型136
10.3.2理解协调开销142
10.3.3高效保存本地状态143
10.3.4选择传输系统145
10.3.5处理延迟146
10.3.6读写操作分离146
10.3.7在应用程序中使用锁147
10.3.8使用队列和池148
10.3.9处理服务调用149
10.4在实践中使用这些技术149
10.4.1CPU密集型应用(CPU使用远大于内存且无I/O)149
10.4.2内存密集型应用(CPU + 内存密集且无I/O)150
10.4.3平衡型应用(CPU + 内存 +I/O)150
10.4.4I/O密集型应用(I/O + 内存 > CPU)151
10.4.5其他应用分类151
10.5领导力的考量153
10.6总结154
第11章构建稳定的系统155
11.1系统失效的原因及应对方法155
11.2处理已知错误157
11.2.1处理意外负载157
11.2.2处理资源故障161
11.2.3处理依赖关系165
11.2.4处理人为变更166
11.3常见故障167
11.3.1资源泄漏167
11.3.2死锁和慢操作168
11.4处理未知错误169
11.4.1可观测性169
11.4.2错误和测试170
11.5优雅地降级172
11.6领导力的考量172
11.7总结173
第12章系统的构建和发展174
12.1亲自动手174
12.1.1打好基础174
12.1.2了解设计过程177
12.1.3做出决策并承担风险180
12.1.4追求卓越181
12.2沟通设计183
12.3系统的发展:向用户学习并改进系统184
12.4领导力的考量187
12.5总结189
内容介绍
本书阐述了在构建软件系统时不可或缺的技术与非技术原则和方法,并详尽展示了如何运用这些原则和方法有效管理项目中的不确定性,从而构建稳固的决策框架。同时,它深刻探讨了领导力与软件架构设计洞察力之间的微妙联系,细致阐述了用户体验设计、宏观架构规划及服务架构部署等关键领域的核心理念与实用技术。通过引用莱特兄弟与凯利·约翰逊等杰出技术领导者的生动案例,来帮助读者理解制订强大决策的重要性。对于软件行业的技术领导者和软件架构决策者来说,本书是一本优秀的参考书。
微信支付
支付宝
扫一扫购买