推荐序 ....................................................................................................................................... 3
前言 ........................................................................................................................................... 5
致谢 ........................................................................................................................................... 7
目录 ........................................................................................................................................... 8
第 1 章 App 后台入门 ........................................................................................................... 16
1.1 App 后台的功能 .................................................................................................................. 16
1.2 App 后台架构 ...................................................................................................................... 17
1.3 App 和 App 后台的通信 ..................................................................................................... 19
1.4 App 后台和 Web 后端的区别 ............................................................................................ 22
1.5 选择服务器 ......................................................................................................................... 23
1.6 选择编程语言 ..................................................................................................................... 24
1.7 快速入门新技术 ................................................................................................................. 25
1.7.1 思维模式 .................................................................................................................. 25
1.7.2 4种快速入门新技术的方法 ................................................................................... 25
1.8 App 是怎样炼成的 .............................................................................................................. 26
1.8.1 项目启动阶段 .......................................................................................................... 26
1.8.2 研发阶段 .................................................................................................................. 28
1.8.3 测试阶段 .................................................................................................................. 29
1.8.4 正式推出阶段 .......................................................................................................... 29
1.9 最适合 App 的开发模式——敏捷开发 ............................................................................. 30
1.9.1 Sprint 计划会议 ....................................................................................................... 31
1.9.2 日常开发 .................................................................................................................. 32
1.9.3 每日例会 .................................................................................................................. 33
1.9.4 测试和修复 Bug ...................................................................................................... 33
1.9.5 评审会议 .................................................................................................................. 34
1.9.6 回顾会议 .................................................................................................................. 34
1.9.7 及时反馈 .................................................................................................................. 34
1.9.8 总结.......................................................................................................................... 34
第 2 章 App 后台基础技术 .................................................................................................... 35
2.1 从 App业务逻辑中提炼 API接口 ..................................................................................... 35
2.1.1 业务逻辑思维导图 .................................................................................................. 36
2.1.2 功能—业务逻辑思维导图 ...................................................................................... 37
2.1.3 基本功能模块关系 .................................................................................................. 40
2.1.4 功能模块接口 UML(设计出 API) ..................................................................... 41
2.1.5 编写在线 API测试文档.......................................................................................... 42
2.1.6 设计稿标注 API ...................................................................................................... 45
2.2 设计 API的要点 ................................................................................................................. 46
2.3 如何选择合适的数据库产品 .............................................................................................. 50
2.3.1 Redis,MongoDB,MySQL读写数据的区别 ...................................................... 50
2.3.2 Redis,MongoDB,MySQL查找数据的区别 ...................................................... 50
2.3.3 Redis,MongoDB,MySQL适用场景 .................................................................. 51
2.4 如何选择消息队列软件 ..................................................................................................... 52
2.4.1 为什么要用消息队列? .......................................................................................... 52
2.4.2 消息队列的工作流程 .............................................................................................. 53
2.4.3 常见的一些消息队列产品 ...................................................................................... 54
2.5 使用分布式服务实现业务的复用 ...................................................................................... 54
2.5.1 巨无霸系统的危害 .................................................................................................. 55
2.5.2 远程服务的优点 ...................................................................................................... 56
2.5.3 远程服务的实现 ...................................................................................................... 56
2.6 搜索技术入门 ..................................................................................................................... 59
2.6.1 一个简单的搜索例子 .............................................................................................. 59
2.6.2 搜索技术的基本原理 .............................................................................................. 60
2.6.3 常见的开源搜索软件介绍 ...................................................................................... 62
2.7 定时任务 ............................................................................................................................. 65
2.7.1 Linux定时任务 Crontab .......................................................................................... 65
2.7.2 在后台轻松管理各种各样的定时任务 .................................................................. 66
第 3 章 App 后台核心技术 .................................................................................................... 68
3.1 用户验证方案 ..................................................................................................................... 68
3.1.1 使用 HTTPS协议 .................................................................................................... 68
3.1.2 基本的用户登录方案 .............................................................................................. 69
3.2 App 通信安全 ...................................................................................................................... 72
3.2.1 URL签名 ................................................................................................................. 72
3.2.2 AES对称加密 ......................................................................................................... 74
3.2.3 更进一步的通信安全 .............................................................................................. 77
3.3 短信服务 ............................................................................................................................. 78
3.3.1 App 后台发送短信简介 .......................................................................................... 78
3.3.2 选择短信平台 .......................................................................................................... 78
3.3.3 建立可靠的短信服务 ................................................................................................. 79
3.4 处理表情的一些技巧 ......................................................................................................... 80
3.4.1 表情在 MySQL的存储 ........................................................................................... 80
3.4.2 当文字中夹带表情的处理 ...................................................................................... 80
3.4.3 Openfire中发送表情引起连接断开的问题 ........................................................... 81
3.5 高效更新数据 ..................................................................................................................... 82
3.5.1 内容的推拉 .............................................................................................................. 83
3.5.2 数据增量更新策略 .................................................................................................. 84
3.6 图片处理 ............................................................................................................................. 90
3.7 视频处理 ............................................................................................................................. 91
3.7.1 FFmpeg 简介 ........................................................................................................... 91
3.7.2 后台调用 FFmpeg 的功能 ....................................................................................... 92
3.8 获取 APK 和 IPA文件里的资源 ........................................................................................ 94
3.8.1 Android 的 APK 文件 .............................................................................................. 94
3.8.2 iOS的 IPA文件 ...................................................................................................... 96
3.9 文件系统 ............................................................................................................................. 98
3.9.1 文件云存储服务 ...................................................................................................... 99
3.9.2 架设文件系统 .......................................................................................................... 99
3.10 ELK日志分析平台 ......................................................................................................... 101
3.10.1 基本模块 .............................................................................................................. 101
3.10.2 日志分析流程 ...................................................................................................... 102
3.11 Docker构建一致的开发环境 ......................................................................................... 103
3.11.1 Docker 原理 ......................................................................................................... 103
3.11.2 搭建一致的开发环境 .......................................................................................... 104
第 4 章 Linux——App 后台应用最广泛的系统 .................................................................... 107
4.1 基本的系统优化 ............................................................................................................... 107
4.1.1 开机自启动服务优化 ............................................................................................ 107
4.1.2 增大文件描述符 .................................................................................................... 109
4.2 常用的命令 ....................................................................................................................... 110
4.2.1 全面了解系统资源情况——top ........................................................................... 110
4.2.2 显示进程状态——ps ............................................................................................ 115
4.2.3 查看网络相关信息——netstat ............................................................................. 116
4.2.4 查看某个进程打开的所有文件——lsof .............................................................. 118
4.2.5 跟踪数据到达主机所经路由——traceroute ........................................................ 119
4.2.6 文件下载/上传工具——“ssh secure shell client”和“lrzsz” ......................... 119
4.2.7 查看程序的依赖库——LD_DEBUG ................................................................... 121
4.2.8 进程管理利器——superivisor .............................................................................. 122
4.3 故障案例分析 ................................................................................................................... 125
第 5 章 Nginx——App 后台 HTTP 服务的利器 ................................................................... 126
5.1 简介 ................................................................................................................................... 126
5.2 基本原理 ........................................................................................................................... 127
5.2.1 工作模型 ................................................................................................................ 127
5.2.2 进程解析 ................................................................................................................ 128
5.3 常用配置 ........................................................................................................................... 129
5.3.1 Nginx的全局配置 ................................................................................................. 130
5.3.2 event配置 .............................................................................................................. 130
5.3.3 http配置 ................................................................................................................. 131
5.3.4 负载均衡配置 ........................................................................................................ 133
5.3.5 server虚拟主机配置 ............................................................................................. 134
5.3.6 location配置 .......................................................................................................... 134
5.3.7 HTTPS的配置 ....................................................................................................... 135
5.3.8 下载 App 的配置 ................................................................................................... 136
5.3.9 生产环境中修改配置的良好习惯 ........................................................................ 136
5.4 性能统计 ........................................................................................................................... 136
5.5 实现负载均衡的方案 ....................................................................................................... 137
5.6 用 Nginx 处理业务逻辑 .................................................................................................... 139
第 6 章 MySQL——App 后台最常用的数据库 .................................................................... 140
6.1 基本架构 ........................................................................................................................... 140
6.2 选择版本 ........................................................................................................................... 141
6.3 配置文件详解 ................................................................................................................... 142
6.4 软件优化 ........................................................................................................................... 144
6.4.1 正确使用 MyISAM和 InnoDB存储引擎 ............................................................ 144
6.4.2 正确使用索引 ........................................................................................................ 145
6.4.3 避免使用 select * ................................................................................................... 146
6.4.4 字段尽可能地设置为 NOT NULL ....................................................................... 146
6.5 硬件优化 ........................................................................................................................... 147
6.5.1 增加物理内存 ........................................................................................................ 147
6.5.2 增加应用缓存 ........................................................................................................ 147
6.5.3 用固态硬盘代替机械硬盘 .................................................................................... 148
6.5.4 SSD 硬盘+SATA硬盘混合存储方案 .................................................................. 149
6.6 架构优化 ........................................................................................................................... 149
6.6.1 分表........................................................................................................................ 150
6.6.2 读写分离 ................................................................................................................ 151
6.6.3 分库........................................................................................................................ 153
6.7 SQL慢查询分析 ............................................................................................................... 156
6.8 云数据库简介 ................................................................................................................... 157
6.9 灵活的存储结构 ............................................................................................................... 158
6.10 故障排除案例 ................................................................................................................. 159
第 7 章 Redis——App 后台高性能的缓存系统 ................................................................... 160
7.1 Redis简介 ......................................................................................................................... 160
7.2 Redis的常用数据结构及应用场景 .................................................................................. 161
7.2.1 string——存储简单的数据 ................................................................................... 162
7.2.2 hash——存储对象的数据 .................................................................................... 163
7.2.3 list——模拟队列操作 ........................................................................................... 165
7.2.4 set——无序且不重复的元素集合 ....................................................................... 167
7.2.5 sorted set——有序且不重复的元素集合 ............................................................. 168
7.3 内存优化 ........................................................................................................................... 170
7.3.1 监控内存使用的状况 ............................................................................................ 170
7.3.2 优化存储结构 ........................................................................................................ 170
7.3.3 限制使用的最大内存 ............................................................................................ 172
7.3.4 设置过期时间 ........................................................................................................ 172
7.4 集群 ................................................................................................................................... 174
7.4.1 客户端分片 ............................................................................................................ 174
7.4.2 Twemproxy ............................................................................................................ 175
7.4.3 Codis ...................................................................................................................... 176
7.4.4 Redis 3.0集群 ........................................................................................................ 179
7.4.5 云服务器上的集群服务 ........................................................................................ 180
7.5 持久化 ............................................................................................................................... 180
7.5.1 RDB ....................................................................................................................... 181
7.5.2 AOF........................................................................................................................ 182
7.6 故障排除案例 ................................................................................................................... 184
第 8 章 MongoDB——App 后台新兴的数据库 .................................................................... 185
8.1 简介 ................................................................................................................................... 185
8.2 核心机制解析 ................................................................................................................... 186
8.2.1 MMAP(内存文件映射) .................................................................................... 186
8.2.2 Journal日志 ........................................................................................................... 187
8.3 入门 ................................................................................................................................... 187
8.3.1 基本操作 ................................................................................................................ 188
8.3.2 数组操作 ................................................................................................................ 190
8.3.3 实例演示 MySQL和 MongoDB设计数据库的区别 .......................................... 191
8.4 高可用集群 ....................................................................................................................... 195
8.4.1 主从........................................................................................................................ 195
8.4.2 副本集 .................................................................................................................... 196
8.4.3 分片........................................................................................................................ 198
8.5 LBS——地理位置查询 .................................................................................................... 200
8.6 MongoDB 3.0版本的改进 ................................................................................................ 205
8.6.1 灵活的存储架构 .................................................................................................... 206
8.6.2 性能提升 7~10 倍 .................................................................................................. 206
8.6.3 存储空间最多减少 80% ....................................................................................... 207
8.6.4 运维成本最多降低 95% ....................................................................................... 207
第 9 章 App 后台架构剖析 .................................................................................................. 208
9.1 聊天 App 后台架构 ........................................................................................................... 208
9.1.1 移动互联网的网络特性 ........................................................................................ 209
9.1.2 协议........................................................................................................................ 212
9.1.3 整体架构 ................................................................................................................ 218
9.2 社交 App 后台架构 ........................................................................................................... 221
9.2.1 基本表结构 ............................................................................................................ 222
9.2.2 推拉模式 ................................................................................................................ 223
9.2.3 数据库架构的演进 ................................................................................................ 225
9.2.4 缓存架构的演进 .................................................................................................... 229
9.3 LBS App 后台架构 .......................................................................................................... 234
9.3.1 地理坐标详解 ........................................................................................................ 235
9.3.2 查找附近的人 ........................................................................................................ 236
9.3.3 基于 MongoDB的 LBS后台架构演进 ................................................................ 240
9.4 推送服务器后台架构 ....................................................................................................... 242
9.4.1 Android 推送 ......................................................................................................... 242
9.4.2 iOS推送 ................................................................................................................. 248
9.5 获得更多 App后台架构资料 ........................................................................................... 252
第 10 章 App 后台架构的演进 ............................................................................................. 255
10.1 架构的核心要素 ............................................................................................................. 255
10.1.1 高性能 .................................................................................................................. 256
10.1.2 高可用 .................................................................................................................. 258
10.1.3 可伸缩 .................................................................................................................. 261
10.1.4 可扩展 .................................................................................................................. 262
10.1.5 安全性 .................................................................................................................. 262
10.2 架构选型的要点 ............................................................................................................. 262
10.2.1 用成熟稳定的开源软件 ...................................................................................... 263
10.2.2 尽可能使用云服务 .............................................................................................. 264
10.3 架构的演进 ..................................................................................................................... 268
10.3.1 单机部署 .............................................................................................................. 269
10.3.2 分布式部署 .......................................................................................................... 275
10.3.3 服务化 .................................................................................................................. 277
10.4 架构的特点 ..................................................................................................................... 279
10.4.1 每个 App 的后台架构不会完全一样 ................................................................. 279
10.4.2 架构的演进是由业务驱动的 .............................................................................. 279
10.4.3 架构不是为了炫耀技术 ...................................................................................... 280