內容簡介
《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