App后台开发运维和架构实践
出版时间:2016年版
内容简介
《App 后台开发运维和架构实践》通过阐述移动互联网中 App 后台开发的特点,梳理了 App 后台开发中会遇到的各个技术点,给出了生产环境常用软件的实战运维经验总结,剖析了常见 App 后台技术架构设计,为读者呈现一幅包括技术选型、后台搭建、性能优化、运维实践、架构设计的 App 后台开发蓝图。本书的目标读者是对技术感兴趣的产品经理、刚入行的 App 后台开发人员,以及从传统软件行业转向 App 后台开发的技术人员。
目录
推荐序 ....................................................................................................................................... 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