新書推薦:

《
从弗洛伊德到百忧解:精神病学的历史(医学人文丛书)
》
售價:HK$
85.8

《
雪
》
售價:HK$
75.9

《
当代学术·中古中国与粟特文明
》
售價:HK$
140.8

《
财政与国家治理
》
售價:HK$
162.8

《
魏特琳日记(重新修订,震撼上市)
》
售價:HK$
96.8

《
国宝中的国宝:195件禁止出国展览文物
》
售價:HK$
305.8

《
幻灭与觉醒:1861年的内乱、外交与政局
》
售價:HK$
96.8

《
文明等级论的表与里
》
售價:HK$
85.8
|
編輯推薦: |
技术为骨、领导为魂、产品为心 驾驭软件架构不确定性的破局之道; 软件架构决策的完整指南 帮助领导者管理不确定性并做出正确的判断; 为所有软件架构师、技术决策者 提供一套系统的软件架构原则和方法。
|
內容簡介: |
本书阐述了在构建软件系统时不可或缺的技术与非技术原则和方法,并详尽展示了如何运用这些原则和方法有效管理项目中的不确定性,从而构建稳固的决策框架。同时,它深刻探讨了领导力与软件架构设计洞察力之间的微妙联系,细致阐述了用户体验设计、宏观架构规划及服务架构部署等关键领域的核心理念与实用技术。通过引用莱特兄弟与凯利·约翰逊等杰出技术领导者的生动案例,来帮助读者理解制订强大决策的重要性。对于软件行业的技术领导者和软件架构决策者来说,本书是一本优秀的参考书。
|
關於作者: |
斯里纳特·佩雷拉(Srinath Perera)拥有超过20年的软件架构和编程经验。Apache Axis2项目的联合创始人和Apache软件基金会成员,参与设计了多个分布式系统,如Apache Axis2、Apache Airvatha、WSO2 CEP(Siddhi)和WSO2 Choreo。此外,还参与了10多个项目、100多个版本的架构评审工作。斯里纳特于2009年获得美国印第安纳大学博士学位,并担任非营利组织Lanka软件基金会的研究科学家,致力于为斯里兰卡软件工程师提供创建开源软件技术的平台。同时,他还是斯里兰卡莫拉图瓦大学计算机科学与工程系的客座教授。目前,斯里纳特负责带领研究团队,制定和实施产品与业务战略,推动公司在开源软件和系统架构领域的持续创新与发展。
|
目錄:
|
译者序序前言第1章 软件系统、设计和架构 11.1 软件架构简介 11.2 软件系统设计 31.3 五个问题 51.3.1 问题1:何时是最佳的发布时机 51.3.2 问题2:团队的技能水平如何 51.3.3 问题3:系统的性能敏感度如何 61.3.4 问题4:何时可以重写系统 71.3.5 问题5:有哪些难点 81.4 七项原则:总体概念 91.4.1 原则1:一切从用户的旅程出发 91.4.2 原则2:使用迭代薄切片策略 101.4.3 原则3:在每次迭代中,以最小的投入获得最大的价值,以支持更多用户 121.4.4 原则4:做出决策并承担风险 141.4.5 原则5:深入设计难以改变的事物,但要慢慢地实施 151.4.6 原则6:尽早并行处理棘手的难题,消除未知因素,并从实证中学习 161.4.7 原则7:理解软件架构中内聚性和灵活性之间的权衡 171.5 为在线书店进行设计 191.6 为云计算进行设计 221.7 总结 24第2章 系统性能的思维模型 262.1 计算机系统 282.2 性能模型 282.2.1 模型1:从用户模式切换到内核模式的成本 292.2.2 模型2:操作层级 292.2.3 模型3:上下文切换开销 302.2.4 模型4:阿姆达尔定律 312.2.5 模型5:通用可扩展性定律 322.2.6 模型6:延迟和利用率的权衡 332.2.7 模型7:以最大有效利用率模型设计吞吐量 332.2.8 模型8:添加延迟限制 342.3 优化技术 372.3.1 CPU优化技术 382.3.2 I/O优化技术 392.3.3 内存优化技术 412.3.4 延迟优化技术 422.4 对性能的直观感受 432.5 领导力的考量 432.6 总结 44第3章 用户体验 463.1 架构师所需的用户体验概念 463.1.1 原则1:了解用户 473.1.2 原则2:必要功能 483.1.3 原则3:好产品不需要说明书,其用途不言自明 483.1.4 原则4:从信息交换的角度思考 493.1.5 原则5:保持简单 493.1.6 原则6:在实施前设计用户体验 503.2 配置的用户体验设计 503.3 API的用户体验设计 523.4 扩展性的用户体验设计 543.5 领导力的考量 553.6 总结 56第4章 宏观架构:简介 574.1 宏观架构的历史 584.2 现代架构 614.3 宏观架构下的构建模块 624.4 领导力的考量 654.5 总结 67第5章 宏观架构:协调 685.1 方法1:从客户端驱动流程 685.2 方法2:使用另一个服务 695.3 方法3:使用集中式中间件 705.4 方法4:实施编排 715.5 领导力的考量 725.6 总结 72第6章 宏观架构:保持状态的一致性 746.1 使用事务 746.2 超越事务 756.2.1 方法1:重新定义问题以减少保证要求 776.2.2 方法2:使用补偿 786.3 最佳实践 806.4 领导力的考量 816.5 总结 83第7章 宏观架构:安全问题 857.1 用户管理 867.2 交互安全 897.2.1 认证技术 907.2.2 授权技术 927.2.3 应用程序的常见安全交互场景 947.3 存储、GDPR和其他法规 987.4 安全策略和建议 1007.4.1 性能和延迟 1017.4.2 零信任方法 1027.4.3 运行用户提供的代码时要小心 1037.4.4 区块链 1037.4.5 其他话题 1037.5 领导力的考量 1047.6 总结 106第8章 宏观架构:处理高可用性和扩展 1078.1 加入高可用性 1078.1.1 复制 1078.1.2 快速恢复 1108.2 理解可扩展性 1128.3 现代架构的扩展:基本解决方案 1138.4 扩展:领域中的工具 1148.4.1 扩展策略1:无共享 1168.4.2 扩展策略2:分布 1168.4.3 扩展策略3:缓存 1168.4.4 扩展策略4:异步处理 1168.5 构建可扩展的系统 1178.5.1 方法1:连续消除瓶颈 1178.5.2 方法2:无共享设计 1198.6 领导力的考量 1218.7 总结 122第9章 宏观架构:微服务的注意事项 1239.1 决策1:处理共享数据库 1249.1.1 解决方案1:使用一个微服务更新数据库 1259.1.2 解决方案2:使用两个微服务更新数据库 1269.2 决策2:确保微服务的安全 1269.3 决策3:微服务的协调 1269.4 决策4:避免依赖地狱 1279.4.1 向后兼容 1279.4.2 向前兼容 1279.4.3 依赖关系图 1299.5 微服务的替代方案:松耦合的基于代码库的团队 1299.6 领导力的考量 1319.7 总结 132第10章 服务架构 13310.1 编写服务 13310.2 理解编写服务的最佳实践 13410.3 微服务中的高级技术 13610.3.1 使用替代的I/O和线程模型 13610.3.2 理解协调开销 14210.3.3 高效保存本地状态 14310.3.4 选择传输系统 14510.3.5 处理延迟 14610.3.6 读写操作分离 14610.3.7 在应用程序中使用锁 14710.3.8 使用队列和池 14810.3.9 处理服务调用 14910.4 在实践中使用这些技术 14910.4.1 CPU密集型应用(CPU使用远大于内存且无I/O) 14910.4.2 内存密集型应用(CPU + 内存密集且无I/O) 15010.4.3 平衡型应用(CPU + 内存 +I/O) 15010.4.4 I/O密集型应用(I/O + 内存 > CPU) 15110.4.5 其他应用分类 15110.5 领导力的考量 15310.6 总结 154第11章 构建稳定的系统 15511.1 系统失效的原因及应对方法 15511.2 处理已知错误 15711.2.1 处理意外负载 15711.2.2 处理资源故障 16111.2.3 处理依赖关系 16511.2.4 处理人为变更 16611.3 常见故障 16711.3.1 资源泄漏 16711.3.2 死锁和慢操作 16811.4 处理未知错误 16911.4.1 可观测性 16911.4.2 错误和测试 17011.5 优雅地降级 17211.6 领导力的考量 17211.7 总结 173第12章 系统的构建和发展 17412.1 亲自动手 17412.1.1 打好基础 17412.1.2 了解设计过程 17712.1.3 做出决策并承担风险 18012.1.4 追求卓越 18112.2 沟通设计 18312.3 系统的发展:向用户学习并改进系统 18412.4 领导力的考量 18712.5 总结 189
|
|