一個(gè)好的架構(gòu)就像一個(gè)好的制度,我們不會(huì)時(shí)時(shí)刻刻感受到它的存在,但在關(guān)鍵時(shí)刻,它決定了系統(tǒng)能夠到達(dá)的高度。本書濃縮了攜程公司的整個(gè)技術(shù)架構(gòu),可以幫助讀者了解支撐一家大型企業(yè)所需要的核心技術(shù)產(chǎn)品,以及它們的架構(gòu)和面臨的挑戰(zhàn)。本書由攜程的一線研發(fā)工程師們精心編寫,他們對(duì)攜程各個(gè)領(lǐng)域的技術(shù)實(shí)踐了如指掌,本書所提到的各種系統(tǒng)離不開他們的耕耘。在給讀者呈現(xiàn)攜程架構(gòu)實(shí)踐的同時(shí),也希望本書能給讀者帶來(lái)一些警示和啟發(fā),共同推動(dòng)技術(shù)的進(jìn)步。不同領(lǐng)域的架構(gòu)關(guān)注點(diǎn)各有側(cè)重,但是方法論是相通的。希望讀者通過本書了解攜程的架構(gòu)實(shí)踐,拓寬視野,豐富自己的架構(gòu)工具箱,在遇到難題時(shí),看看其他領(lǐng)域的解決思路,就可能碰撞出意想不到的“火花”。
攜程技術(shù)團(tuán)隊(duì)作為攜程集團(tuán)的核心競(jìng)爭(zhēng)力,攜程技術(shù)團(tuán)隊(duì)由近7000位來(lái)自海內(nèi)外的精英工程師組成,為攜程集團(tuán)業(yè)務(wù)的運(yùn)作和開拓提供全面技術(shù)支持,并以技術(shù)創(chuàng)新源源不斷地為產(chǎn)品和服務(wù)創(chuàng)造價(jià)值。技術(shù)從來(lái)都不是閉門造車,攜程技術(shù)團(tuán)隊(duì)會(huì)一直以開放和充滿熱情的心態(tài),通過各種渠道和方式,和圈內(nèi)小伙伴們探討、交流、碰撞,共同收獲和成長(zhǎng)。
第1 章 攜程整體技術(shù)架構(gòu) 001
1.1 攜程技術(shù)架構(gòu)概覽 003
1.1.1 分層架構(gòu) 003
1.1.2 接入層技術(shù) 005
1.1.3 后端技術(shù) 006
1.1.4 技術(shù)保障 007
1.2 攜程整體技術(shù)架構(gòu)演進(jìn) 008
1.2.1 呼叫中心時(shí)代 009
1.2.2 互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)時(shí)代 009
1.2.3 大數(shù)據(jù)和人工智能時(shí)代 011
第2 章 移動(dòng)大前端 013
2.1 CRN 框架 014
2.1.1 背景介紹 014
2.1.2 框架設(shè)計(jì) 015
2.1.3 性能優(yōu)化 016
2.1.4 配套支撐系統(tǒng)建設(shè) 019
2.2 Web 框架 021
2.2.1 微信小程序應(yīng)用框架CWX 021
2.2.2 CRN 瀏覽器端運(yùn)行框架CRN-Web 024
2.2.3 下一代前端框架解決方案 NFES 027
2.3 插件化 033
2.3.1 插件化的來(lái)源 033
2.3.2 方案的實(shí)現(xiàn) 034
2.4 Node.js 038
2.4.1 應(yīng)用場(chǎng)景 038
2.4.2 應(yīng)用部署 039
2.4.3 運(yùn)維與監(jiān)控 040
2.4.4 公共服務(wù) 044
2.5 移動(dòng)發(fā)布平臺(tái)MCD 045
2.5.1 平臺(tái)服務(wù)架構(gòu) 045
2.5.2 生命周期管理 046
2.5.3 開發(fā)流程管理 048
2.5.4 發(fā)布流程管理 049
2.6 用戶行為監(jiān)測(cè)UBT 050
2.6.1 數(shù)據(jù)采集 050
2.6.2 傳輸與存儲(chǔ) 052
2.6.3 實(shí)時(shí)分析 054
2.7 CData 055
2.7.1 性能管理 055
2.7.2 錯(cuò)誤統(tǒng)計(jì) 056
2.7.3 訪問量統(tǒng)計(jì) 057
2.7.4 排障支持 057
2.8 本章小結(jié) 058
第3 章 用戶接入 059
3.1 GSLB 技術(shù) 059
3.1.1 GSLB 系統(tǒng)概述 060
3.1.2 DNS 工作方式 060
3.1.3 GSLB 工作原理 061
3.2 CDN 063
3.2.1 CDN 靜態(tài)加速 064
3.2.2 CDN 動(dòng)態(tài)加速 065
3.2.3 CDN 動(dòng)態(tài)域名切換 066
3.3 App 端接入 066
3.4 負(fù)載均衡 067
3.4.1 負(fù)載均衡器工作原理 068
3.4.2 負(fù)載均衡優(yōu)化手段 070
3.4.3 負(fù)載均衡算法 074
3.4.4 負(fù)載均衡會(huì)話保持 076
3.5 軟負(fù)載系統(tǒng)SLB 077
3.5.1 SLB 的產(chǎn)生背景 077
3.5.2 SLB 的架構(gòu)設(shè)計(jì) 078
3.5.3 SLB 實(shí)現(xiàn)的幾個(gè)難點(diǎn) 083
3.6 API Gateway 086
3.6.1 API Gateway 的架構(gòu)設(shè)計(jì) 087
3.6.2 API Gateway 在攜程的使用 091
3.7 本章小結(jié) 092
第4 章 呼叫中心 093
4.1 軟交換系統(tǒng)SoftPBX 095
4.1.1 攜程軟交換系統(tǒng)現(xiàn)狀 095
4.1.2 軟交換架構(gòu)與信令路徑 095
4.1.3 組件規(guī)劃與分布 096
4.1.4 應(yīng)用場(chǎng)景 099
4.2 交互式語(yǔ)音應(yīng)答系統(tǒng)SoftIVR 101
4.2.1 什么是交互式語(yǔ)音應(yīng)答 101
4.2.2 SoftIVR 架構(gòu)與特點(diǎn) 101
4.2.3 信令傳輸流程與核心組件 104
4.2.4 應(yīng)用場(chǎng)景 108
4.3 全渠道客服云系統(tǒng) 109
4.3.1 全渠道客服云系統(tǒng)的意義 109
4.3.2 客服云整體架構(gòu) 111
4.3.3 服務(wù)端架構(gòu) 112
4.3.4 應(yīng)用場(chǎng)景 115
4.4 本章小結(jié) 117
第5 章 框架中間件 118
5.1 服務(wù)化 120
5.1.1 為什么需要服務(wù)化中間件框架 120
5.1.2 服務(wù)化中間件框架的基本架構(gòu) 121
5.1.3 服務(wù)注冊(cè)中心設(shè)計(jì)解析 122
5.1.4 服務(wù)治理系統(tǒng)功能解析 125
5.2 消息隊(duì)列 128
5.2.1 消息隊(duì)列的特性與使用場(chǎng)景 128
5.2.2 主流消息隊(duì)列 129
5.2.3 攜程消息隊(duì)列QMQ 132
5.3 配置中心 137
5.3.1 為什么需要配置中心 137
5.3.2 配置中心的特性 138
5.3.3 Apollo 源碼部分解析 139
5.3.4 配置中心面臨的新挑戰(zhàn) 141
5.4 數(shù)據(jù)訪問 142
5.4.1 數(shù)據(jù)訪問層概述 142
5.4.2 為什么要引入數(shù)據(jù)訪問中間件 143
5.4.3 數(shù)據(jù)訪問中間件的主流方案 144
5.4.4 攜程數(shù)據(jù)訪問中間件功能解析 146
5.5 緩存層 150
5.5.1 總體架構(gòu) 150
5.5.2 分片和路由 151
5.5.3 高可用 153
5.5.4 水平拆分 154
5.5.5 跨機(jī)房容災(zāi) 156
5.5.6 跨區(qū)域同步 159
5.5.7 雙向同步 163
5.6 本章小結(jié) 167
第6 章 數(shù)據(jù)庫(kù) 168
6.1 上傳發(fā)布 171
6.1.1 表結(jié)構(gòu)設(shè)計(jì)規(guī)范 172
6.1.2 數(shù)據(jù)庫(kù)表結(jié)構(gòu)的發(fā)布 172
6.1.3 SQL Server 的特殊之處 173
6.2 監(jiān)控告警 176
6.2.1 數(shù)據(jù)庫(kù)大盤監(jiān)控 176
6.2.2 運(yùn)維數(shù)據(jù)庫(kù)OPDB 178
6.2.3 語(yǔ)句監(jiān)控 179
6.3 數(shù)據(jù)庫(kù)高可用 187
6.3.1 SQL Server 高可用 188
6.3.2 MySQL 高可用 189
6.3.3 Redis 高可用架構(gòu) 193
6.4 本章小結(jié) 194
第7 章 IaaS & PaaS 195
7.1 網(wǎng)絡(luò)架構(gòu)演進(jìn) 198
7.1.1 基于 VLAN 的二層網(wǎng)絡(luò) 198
7.1.2 基于VXLAN 的大二層SDN 網(wǎng)絡(luò) 200
7.1.3 基于BGP 的三層SDN 網(wǎng)絡(luò) 203
7.2 K8s 和容器化的實(shí)踐 207
7.2.1 部署架構(gòu) 207
7.2.2 網(wǎng)絡(luò) 208
7.2.3 調(diào)度 209
7.2.4 存儲(chǔ) 212
7.2.5 監(jiān)控 214
7.2.6 容器化 215
7.3 混合云 217
7.3.1 混合云整體設(shè)計(jì) 218
7.3.2 混合云網(wǎng)絡(luò)& 安全 220
7.3.3 混合云計(jì)費(fèi)& 對(duì)賬 222
7.3.4 混合云運(yùn)維 224
7.4 持續(xù)交付 226
7.4.1 發(fā)布的藝術(shù) 226
7.4.2 Tars 系統(tǒng)設(shè)計(jì) 229
7.5 本章小結(jié) 232
第8 章 監(jiān)控 233
8.1 指標(biāo)監(jiān)控和告警系統(tǒng)Hickwall 234
8.1.1 指標(biāo)監(jiān)控的應(yīng)用和挑戰(zhàn) 235
8.1.2 指標(biāo)模型的選擇 236
8.1.3 Hickwall 架構(gòu) 238
8.2 開源分布式應(yīng)用監(jiān)控系統(tǒng)CAT 241
8.2.1 為什么需要應(yīng)用監(jiān)控系統(tǒng) 241
8.2.2 應(yīng)用監(jiān)控系統(tǒng)的特點(diǎn) 243
8.2.3 客戶端實(shí)現(xiàn)解析 245
8.2.4 存儲(chǔ)模型解析 247
8.3 公共日志服務(wù)平臺(tái)CLog 250
8.3.1 日志系統(tǒng)的演進(jìn)與特點(diǎn) 251
8.3.2 CLog 的架構(gòu) 252
8.4 告警系統(tǒng) 257
8.4.1 告警系統(tǒng)的需求特點(diǎn) 258
8.4.2 流式告警的實(shí)現(xiàn)和處理 259
8.5 本章小結(jié) 263
第9 章 網(wǎng)站高可用 264
9.1 可用性指標(biāo)與度量 265
9.1.1 Ctrip ATP 266
9.1.2 Ctrip ATP 算法 266
9.1.3 Ctrip ATP 架構(gòu) 267
9.1.4 訂單預(yù)測(cè)模型 268
9.2 服務(wù)熔斷、限流與降級(jí) 270
9.2.1 微服務(wù)架構(gòu)下的可用性 271
9.2.2 熔斷、限流在攜程的落地 272
9.2.3 熔斷、限流的治理問題 274
9.3 災(zāi)備數(shù)據(jù)中心 276
9.3.1 冷備模式 277
9.3.2 熱備模式 278
9.3.3 多活模式 278
9.4 網(wǎng)站單元化部署 281
9.4.1 單元化架構(gòu) 282
9.4.2 單元化思路 283
9.5 基礎(chǔ)組件支持 285
9.5.1 路由調(diào)度 285
9.5.2 數(shù)據(jù)復(fù)制 287
9.6 全鏈路壓測(cè) 292
9.6.1 技術(shù)選型與系統(tǒng)設(shè)計(jì) 292
9.6.2 構(gòu)造與隔離壓測(cè)數(shù)據(jù) 295
9.6.3 全鏈路監(jiān)控設(shè)計(jì) 295
9.7 運(yùn)維工具高可用 296
9.7.1 哪些運(yùn)維工具需要實(shí)現(xiàn)高可用 296
9.7.2 工具的改造 297
9.7.3 定期故障演練 300
9.8 混沌工程 300
9.8.1 混沌工程的起源 301
9.8.2 混沌工程的5 條原則 301
9.8.3 如何進(jìn)行一個(gè)混沌實(shí)驗(yàn) 304
9.9 數(shù)據(jù)驅(qū)動(dòng)運(yùn)營(yíng) 307
9.9.1 智能運(yùn)維AIOps 308
9.9.2 AI 算法在運(yùn)維領(lǐng)域的典型場(chǎng)景 309
9.9.3 運(yùn)維數(shù)據(jù)倉(cāng)庫(kù) 312
9.10 GNOC 314
9.11 本章小結(jié) 319