首页>参考读物>计算机科学与技术>软件与程序设计

服务端开发:技术、方法与实用解决方案
作者 : 郭进 著
出版日期 : 2023-08-14
ISBN : 978-7-111-73289-1
定价 : 109.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 :
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

这是一本从开发流程、技术栈、典型问题解决方案和开发规范等维度全面讲解服务端开发的著作。它衍生自作者在某著名互联网科技公司内部讲授的高口碑课程,是作者近10年服务端开发经验的总结,同时融合了业界在服务端开发方面的宝贵项目经验和实践智慧。
本书理论与实践结合,摆脱编程语言、框架、中间件及传统编程思想的束缚,全景式、体系化地阐述了服务端开发,核心内容包括以下两个部分。
第一部分:服务端开发的技术和方法
首先,介绍了服务端开发的职责、技术栈、核心流程和进阶路径;然后,从需求分析、抽象建模、系统设计、数据设计和非功能性设计5个方面展开,结合案例深入讲解了服务端开发的实操方法和重难点,为读者呈现出服务端开发的全景图,帮助读者快速、体系化地掌握服务端开发的相关知识和方法。
第二部分:服务端典型问题的解决方案
针对高并发、高性能、高可用、缓存、数据一致性、幂等、秒杀等服务端开发实践中的典型问题,给出了对应的解决方案和开发规范,同时还结合案例深入分析了不同方案的优缺点。此外,还总结了接口设计、日志打印、异常处理、代码编写、代码注释等落地层面的行业案例和规范。

图书特色

某大厂资深服务端技术专家10年工程实践经验总结,阿里技术讲师课程大赛冠军作品,
系统梳理服务端开发经验和方法
摆脱编程语言、框架、中间件及传统编程思想束缚,全景式、体系化解读服务端开发的流程、技术栈和实用规范
50余个案例、200余幅图,系统阐述高并发、高可用、高性能、
缓存、幂等、数据一致性等服务端典型难题的解决方案

上架指导

计算机\程序设计

封底文字

本书对互联网服务端开发的核心环节和典型问题进行了深入、体系化地解读,为广大读者打开了一扇了解、学习和借鉴互联网服务端开发方法及技术的窗口。书中不少内容涉及学术界提出的经典理念、方法和技术的落地与改进,是一本难得的理论与实践相结合的好书。
——徐正国 浙江大学教授/博士生导师/浙江大学湖州研究院副院长

影响软件系统复杂度的因素可以简单分为两个维度:业务与技术。高业务复杂度的服务端系统,需要考虑有效的需求分析与领域建模,方可获得可持续演进的应用架构;高技术复杂度的分布式系统,则需要考虑诸如高并发、高可用、高性能、数据一致性等质量属性,才能在设计权衡中寻求技术架构最优解。书中通过将方法与解决方案二者有机结合,既高屋建瓴,梳理出服务端开发的方法体系,又务实而专注,总结出行业实践经验,诚为服务端开发人员的最佳学习指南!
——张逸 《解构领域驱动设计》作者

2021 年底,我们部门为入职两年内的工程师定制了“系分训练营”,旨在帮助他们更好地掌握业务分析和系统设计方法。训练营的第一门课程由郭进担任讲师,广受学员好评,本书也缘起于此。书中不仅系统地介绍了需求分析、抽象建模、系统设计、非功能性设计等服务端开发的核心环节,而且结合作者多年的互联网实战经验,针对高并发、高可用、高性能、缓存、幂等、数据一致性等典型问题提供了解决方案。本书内容丰富、深入浅出,既适合初学者入门,又适合有经验的开发者深入研究。
——赵航(桑美) 蚂蚁集团资深技术专家/支付宝会员与公益技术部技术总监

本书衍生于作者在阿里和蚂蚁集团的精品培训课程,它蕴含了作者多年的工作实践精华和对软件研发理论的深入理解。书中结合实际问题与案例,将服务端系统的开发过程进行了体系化的阐述,并深入浅出地介绍了多种经典解决方案。对于从事互联网软件研发的读者来说,它是一本有助于提升体系化思考能力和系统设计能力的好“教材”,值得反复品味;对于从事传统企业软件产品研发的读者来说,每一个可落地应用的解决方案又让它如同一本“工具手册”。总之,本书将理论与实践巧妙结合,是一本让人受益匪浅的好书。
——黄浩(陌铭) 阿里资深技术专家/阿里数字供应链技术总监

作者简介

郭进 著:郭进
浙江大学工学硕士,杭州市高层次人才,现任某著名互联网科技公司服务端技术专家。先后从事过智能控制算法、分布式中间件和服务端研发。相关成果曾发表于领域顶级会议和SCI期刊。
近年来,致力于构建高效、可靠、可扩展的服务端系统,作为核心成员设计并开发了承载百万级QPS 、服务亿级用户的大型分布式系统,在领域建模、系统架构、信息流推荐及研发规范方面积累了大量优秀实践。
曾获得阿里第二届技术讲师课程大赛冠军、华为“总裁嘉奖令”、浙江省优秀毕业生、NUEDC(全国大学生电子设计竞赛)全国一等奖及瑞萨特别奖、国家奖学金等30余个奖项。
CSDN博客专家,阿里高阶技术“传橙官”,先后在CSDN、“阿里技术”公众号、阿里ATA 等平台发表技术文章数百篇,多篇文章入选平台“年度最火文章合集”“年度好评 TOP 10”和“头条推荐”。

图书目录

《服务端开发:方法论与实用解决方案》
第一部分 方法论
第1章 走近服务端开发
1.1 服务端开发概述
1.1.1 什么是服务端开发
1.1.2 大厂服务端开发的职责
1.2 服务端开发技术栈
1.2.1 编程语言
1.2.2 开发工具
1.2.3 开发框架
1.2.4 数据库和存储技术
1.2.5 中间件
1.2.6 操作系统
1.2.7 应用部署
1.2.8 运维监控
1.2.9 其他
1.3 服务端开发流程
1.3.1 需求分析
1.3.2 抽象建模
1.3.3 系统设计
1.3.4 数据设计
1.3.5 非功能性设计
1.4 服务端开发进阶路径
1.4.1 技术学习
1.4.2 业务学习
1.4.3 架构思维

第2章 需求分析
2.1 需求分类
2.1.1 功能需求
2.1.2 非功能需求
2.2 需求分析的过程
2.2.1 信息收集
2.2.2 问题识别
2.2.3 分析综合
2.2.4 需求验证
2.2.5 案例解析
2.3 需求分析常用方法
2.3.1 功能分析法
2.3.2 数据流分析法
2.3.3 信息建模分析法
2.3.4 面向对象分析法
2.3.5 面向本体分析法
2.4 需求分析重难点
2.4.1 统一语言
2.4.2 问题定义
2.4.3 根因分析
2.4.4 制定评估指标

第3章 抽象建模
3.1 抽象和建模
3.1.1 抽象三部曲
3.1.2 模型的三个层次
3.1.3 模型的推导
3.1.4 实例解析
3.2 建模工具UML
3.2.1 用例图
3.2.2 组件图
3.2.3 活动图
3.2.4 类图
3.2.5 对象图
3.2.6 时序图
3.2.7 状态图
3.3 用例驱动的建模方法
3.3.1 用例驱动设计概述
3.3.2 发掘业务用例
3.3.3 梳理主流程图
3.3.4 获取业务实体
3.3.5 抽象业务模型
3.3.6 验证业务模型
3.3.7 实例解析
3.4 面向服务的建模方法
3.4.1 面向服务建模概述
3.4.2 分析业务主流程
3.4.3 抽象主业务服务
3.4.4 设计业务功能域
3.4.5 确定功能域边界
3.4.6 分析影响及异常
3.4.7 实例解析
3.5 领域驱动的建模方法
3.5.1 领域驱动设计概述
3.5.2 领域知识学习
3.5.3 统一描述语言
3.5.4 收集业务用例
3.5.5 提取领域模型
3.5.6 补充模型属性
3.5.7 确定模型间关系
3.5.8 验证领域模型
3.5.9 实例解析
3.6 抽象建模重难点
3.6.1 领域模型和软件方案分离
3.6.2 业务用例发掘和整理
3.6.3 业务用例分析
3.6.4 模型间边界划分
第4章 系统设计
4.1 软件系统设计规范
4.1.1 常用设计原则
4.1.2 架构与架构分类
4.1.3 架构推导方法
4.1.4 逻辑架构分层和复用
4.1.5 案例解析
4.2 软件系统复杂度
4.2.1 软件系统复杂度的表现维度
4.2.2 影响认知负荷的因素
4.2.3 影响协同成本的因素
4.2.4 软件系统复杂度生命周期
4.2.5 软件复杂度应对策略
4.3 架构设计
4.3.1 架构的定义及核心要素
4.3.2 架构原则与架构模式
4.3.3 如何描述架构
4.3.4 架构制图方法与工具
4.3.5 实例解析
4.4 分层设计
4.4.1 终端显示层
4.4.2 业务逻辑层
4.4.3 通用处理层
4.4.4 数据持久层
4.4.5 数据源和外部服务
4.4.6 实例解析
4.5 系统设计步骤
4.5.1 设计功能域
4.5.2 设计功能域间协作
4.5.3 设计对外服务
4.5.4 分析对外服务影响
4.5.5 设计内部服务
4.5.6 分析内部服务影响
4.5.7 应用内部结构设计
4.5.8 实例解析
第5章 数据设计
5.1 数据模型设计
5.1.1 概念及范式
5.1.2 设计目标
5.1.3 设计步骤
5.1.4 典型方案
5.2 概念数据模型设计
5.2.1 ER模型与维度模型
5.2.2 概念识别
5.2.3 数据实体和实体间的关系
5.2.4 实体属性
5.2.5 案例解读
5.3 逻辑数据模型设计
5.3.1 逻辑数据模型要素
5.3.2 逻辑数据模型分类
5.3.3 概念模型转逻辑模型
5.4 物理数据模型设计
5.4.1 常见存储类型
5.4.2 存储选型原则
5.4.3 MySQL特点及适用场景
5.4.4 OceanBase特点及适用场景
5.4.5 Hbase特点及适用场景
5.5 物理数据表设计
5.5.1 表设计
5.5.2 字段设计
5.5.3 索引设计
5.5.4 语句设计
5.5.5 其他设计
5.6 物理数据分布式存储设计
5.6.1 LDC架构
5.6.2 数据水平拆分方案
5.6.3 跨城数据同步
5.7 数据通用存储保障设计
5.7.1 可用性保障设计原则
5.7.2 数据监控
5.7.3 数据查询
5.7.4 数据隔离
5.7.5 数据兼容
第6章 非功能性设计
6.1 非功能性设计概述
6.1.1 什么是非功能性设计
6.1.2 为什么要进行非功能性设计
6.1.3 非功能性设计的分类
6.2 稳定性设计
6.2.1 稳定性保障流程
6.2.2 变更“三板斧”
6.2.3 案例解析
6.3 可测性设计
6.3.1 可操作
6.3.2 可控制
6.3.3 可分解
6.3.4 可观察
6.3.5 案例解析
6.4 资金安全设计
6.4.1 一致性
6.4.2 幂等
6.4.3 信息表述
6.4.4 配置
6.4.5 案例解析
6.5 其他非功能性设计
6.5.1 应用安全
6.5.2 扩展性
6.5.3 兼容性
6.5.4 异常/补偿
第二部分 服务端开发实用方案及规范
第七章 高并发应对方案
7.1 高并发概述
7.1.1 什么是高并发
7.1.2 高并发相关指标
7.2 资源扩展策略
7.2.1 垂直扩展
7.2.2 水平扩展
7.2.3 负载均衡
7.2.4 案例解析
7.3 流量削峰策略
7.3.1 消息队列削峰
7.3.2 客户端削峰
7.3.3 案例解析
7.4 数据缓存策略
7.4.1 本地缓存
7.4.2 分布式缓存
7.4.3 CDN化
7.4.4 案例解析
7.5 服务降级策略
7.5.1 降级概述
7.5.2 自动降级
7.5.3 人工降级
7.5.4 案例解析
7.6 限流策略
7.6.1 限流概述
7.6.2 接入层限流
7.6.3 应用层限流
7.6.4 案例解析
第八章 缓存的典型问题及解决方案
8.1 缓存预热
8.1.1 缓存预热概述
8.1.2 应用启动预热策略
8.1.3 任务调度预热策略
8.1.4 人工触发预热策略
8.1.5 案例解析
8.2 缓存更新
8.2.1 缓存更新概述
8.2.2 Cache Aside Pattern
8.2.3 Read/Write Through Pattern
8.2.4 Write Behind Caching Pattern
8.2.5 案例解析
8.3 缓存雪崩
8.3.1 缓存雪崩概述
8.3.2 缓存常驻策略
8.3.3 多级缓存策略
8.3.4 缓存过期时间优化策略
8.3.5 案例解析
8.4 缓存穿透
8.4.1 缓存穿透概述
8.4.2 空值缓存策略
8.4.3 类布隆过滤策略
8.4.4 案例解析
8.5 缓存热点
8.5.1 缓存热点概述
8.5.2 前置缓存策略
8.5.3 热点散列策略
8.5.4 案例解析
第九章 缓存与数据库一致性解决方案
9.1 缓存与数据库不一致的原因
9.1.1 逻辑失败造成的数据不一致
9.1.2 物理失败造成的数据不一致
9.1.3 不可实现的绝对一致性
9.2 延时双删策略
9.2.1 原理及实施步骤
9.2.2 如何确定延时
9.2.3 不足及应对措施
9.2.4 案例解析
9.3 异步更新缓存策略
9.3.1 原理及实施步骤
9.3.2 订阅Binlog删除缓存
9.3.3 消费消息删除缓存
9.3.4 案例解析
9.4 其他策略
9.4.1 利用队列对读写请求串行化
9.4.2 缓存自动过期及定时同步
第十章 分布式系统幂等问题及解决方案
10.1 幂等概述
10.1.1 幂等的定义
10.1.2 幂等处理场景
10.1.3 幂等误区
10.2 幂等实现三部曲
10.2.1 识别相同请求
10.2.2 幂等数据持久化
10.2.3 幂等处理与失败补偿
10.3 请求并发和乱序的应对策略
10.3.1 加锁避免并发重复执行
10.3.2 DB唯一索引约束避免重复落库
10.3.3 状态机约束解决乱序问题
10.4 案例解析
第十一章 秒杀系统关键问题及解决方案
11.1 秒杀系统及关键问题
11.1.1 常见秒杀场景
11.1.2 秒杀系统关键问题
11.2 实用秒杀系统架构与设计
11.2.1 物理部署隔离
11.2.2 商品信息缓存化
11.2.3 流量控制
11.2.4 库存扣减
11.2.5 防作弊策略
11.3 秒杀核心:分布式库存扣减
11.3.1 库存扣减常见问题
11.3.2 分布式库存扣减整体方案
11.3.3 扣减策略模块设计
11.3.4 库存调配模块设计
11.3.5 库存扣减模块设计
11.4 案例解析
第十二章 常见性能瓶颈及应对方案
12.1 性能瓶颈概述
12.1.1 性能瓶颈定义
12.1.2 影响服务端性能的因素
12.2 数据策略
12.2.1 数据缓存及精细化
12.2.2 数据冗余
12.2.3 内容预加载
12.2.4 案例解析
12.3 IO策略
12.3.1 概述
12.3.2 减少网络IO
12.3.3 减少磁盘IO
12.3.4 案例解析
12.4 DB策略
12.4.1 概述
12.4.2 SQL治理
12.4.3 缩小事务范围
12.4.4 UK兜底
12.4.5 案例解析
12.5 其他应对策略
12.5.1 异步任务
12.5.2 多线程批处理
12.5.3 业务降级
第十三章 高可用问题及应对方案
13.1 软件风险与高可用
13.1.1 软件风险来源
13.1.2 控制风险
13.1.3 软件高可用概述
13.1.4 高可用设计原则
13.2 应用层高可用策略
13.2.1 无状态与冗余部署
13.2.2 流量控制防护能力
13.2.3 减少依赖
13.2.4 监控预警
13.2.5 面向失败的设计
13.2.6 案例解析
13.3 数据层高可用策略
13.3.1 单机的crash-safe保障
13.3.2 数据的无损复制
13.3.3 数据分片和冗余存储
13.3.4 案例解析
第十四章 服务端开发实用规范
14.1 实用 API 设计规范
14.1.1 清晰易理解
14.1.2 繁简有度
14.1.3 容许多个实现
14.1.4 选择合适的抽象层
14.1.5 为对象/资源设计合适的操作
14.1.6 更新操作尽量保持幂等性
14.1.7 变更应向下兼容
14.1.8 批量更新应尽量由客户端实现
14.1.9 警惕对象/资源更新的风险
14.1.10 统一错误码
14.2 实用架构图绘制规范
14.2.1 为什么架构图很重要
14.2.2 制图目标
14.2.3 自顶向下分层描述
14.2.4 使用多种架构视图
14.2.5 C4 Model制图
14.3 实用日志打印规范
14.3.1 异常日志如何记录
14.3.2 对象实例如何记录
14.3.3 日志记录如何分类
14.3.4 日志级别如何判断
14.3.5 日志数据如何监控
14.3.6 日志文件的大小设置
14.4 实用异常处理规范
14.4.1 细化异常的类型
14.4.2 多个异常的处理规则
14.4.3 避免过大的 try 块
14.4.4 延迟捕获
14.4.5 对于可检查异常的处理
14.4.6 异常处理框架
14.4.7 不要忽略异常
14.4.8 避免异常转化过程丢失信息
14.4.9 生产代码避免 printStack
14.5 实用代码编写规范
14.5.1 合理抽象
14.5.2 KISS
14.5.3 DRY
14.5.4 Fail Fast
14.5.5 恰当注释
14.5.6 单元测试

教学资源推荐
作者: Keith D.Cooper, Linda Torczon
作者: 苏俊
作者: (美)Mary Campione,Kathy Walrath,Alison Huml
参考读物推荐
作者: 李万才 林琪钧 郭琦康 廖洋阳 著
作者: [加]约瑟夫·豪斯(Joseph Howse),[爱]乔·米尼奇诺(Joe Minichino) 著
作者: [美]托尔加·索亚塔(Tolga Soyata) 著