推薦序 ....................................................................................................................................... 3
前言 ........................................................................................................................................... 5
致謝 ........................................................................................................................................... 7
目錄 ........................................................................................................................................... 8
第 1 章 App 后臺入門 ........................................................................................................... 16
1.1 App 后臺的功能 .................................................................................................................. 16
1.2 App 后臺架構 ...................................................................................................................... 17
1.3 App 和 App 后臺的通信 ..................................................................................................... 19
1.4 App 后臺和 Web 后端的區(qū)別 ............................................................................................ 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 研發(fā)階段 .................................................................................................................. 28
1.8.3 測試階段 .................................................................................................................. 29
1.8.4 正式推出階段 .......................................................................................................... 29
1.9 最適合 App 的開發(fā)模式——敏捷開發(fā) ............................................................................. 30
1.9.1 Sprint 計劃會議 ....................................................................................................... 31
1.9.2 日常開發(fā) .................................................................................................................. 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業(yè)務邏輯中提煉 API接口 ..................................................................................... 35
2.1.1 業(yè)務邏輯思維導圖 .................................................................................................. 36
2.1.2 功能—業(yè)務邏輯思維導圖 ...................................................................................... 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讀寫數據的區(qū)別 ...................................................... 50
2.3.2 Redis,MongoDB,MySQL查找數據的區(qū)別 ...................................................... 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 使用分布式服務實現業(yè)務的復用 ...................................................................................... 54
2.5.1 巨無霸系統(tǒng)的危害 .................................................................................................. 55
2.5.2 遠程服務的優(yōu)點 ...................................................................................................... 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協(xié)議 .................................................................................................... 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 后臺發(fā)送短信簡介 .......................................................................................... 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中發(fā)送表情引起連接斷開的問題 ........................................................... 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 文件系統(tǒng) ............................................................................................................................. 98
3.9.1 文件云存儲服務 ...................................................................................................... 99
3.9.2 架設文件系統(tǒng) .......................................................................................................... 99
3.10 ELK日志分析平臺 ......................................................................................................... 101
3.10.1 基本模塊 .............................................................................................................. 101
3.10.2 日志分析流程 ...................................................................................................... 102
3.11 Docker構建一致的開發(fā)環(huán)境 ......................................................................................... 103
3.11.1 Docker 原理 ......................................................................................................... 103
3.11.2 搭建一致的開發(fā)環(huán)境 .......................................................................................... 104
第 4 章 Linux——App 后臺應用最廣泛的系統(tǒng) .................................................................... 107
4.1 基本的系統(tǒng)優(yōu)化 ............................................................................................................... 107
4.1.1 開機自啟動服務優(yōu)化 ............................................................................................ 107
4.1.2 增大文件描述符 .................................................................................................... 109
4.2 常用的命令 ....................................................................................................................... 110
4.2.1 全面了解系統(tǒng)資源情況——top ........................................................................... 110
4.2.2 顯示進程狀態(tài)——ps ............................................................................................ 115
4.2.3 查看網絡相關信息——netstat ............................................................................. 116
4.2.4 查看某個進程打開的所有文件——lsof .............................................................. 118
4.2.5 跟蹤數據到達主機所經路由——traceroute ........................................................ 119
4.2.6 文件下載/上傳工具——“ssh secure shell client”和“l(fā)rzsz” ......................... 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 生產環(huán)境中修改配置的良好習慣 ........................................................................ 136
5.4 性能統(tǒng)計 ........................................................................................................................... 136
5.5 實現負載均衡的方案 ....................................................................................................... 137
5.6 用 Nginx 處理業(yè)務邏輯 .................................................................................................... 139
第 6 章 MySQL——App 后臺最常用的數據庫 .................................................................... 140
6.1 基本架構 ........................................................................................................................... 140
6.2 選擇版本 ........................................................................................................................... 141
6.3 配置文件詳解 ................................................................................................................... 142
6.4 軟件優(yōu)化 ........................................................................................................................... 144
6.4.1 正確使用 MyISAM和 InnoDB存儲引擎 ............................................................ 144
6.4.2 正確使用索引 ........................................................................................................ 145
6.4.3 避免使用 select * ................................................................................................... 146
6.4.4 字段盡可能地設置為 NOT NULL ....................................................................... 146
6.5 硬件優(yōu)化 ........................................................................................................................... 147
6.5.1 增加物理內存 ........................................................................................................ 147
6.5.2 增加應用緩存 ........................................................................................................ 147
6.5.3 用固態(tài)硬盤代替機械硬盤 .................................................................................... 148
6.5.4 SSD 硬盤+SATA硬盤混合存儲方案 .................................................................. 149
6.6 架構優(yōu)化 ........................................................................................................................... 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 后臺高性能的緩存系統(tǒng) ................................................................... 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 內存優(yōu)化 ........................................................................................................................... 170
7.3.1 監(jiān)控內存使用的狀況 ............................................................................................ 170
7.3.2 優(yōu)化存儲結構 ........................................................................................................ 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設計數據庫的區(qū)別 .......................................... 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 協(xié)議........................................................................................................................ 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 用成熟穩(wěn)定的開源軟件 ...................................................................................... 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 架構的演進是由業(yè)務驅動的 .............................................................................. 279
10.4.3 架構不是為了炫耀技術 ...................................................................................... 280