Serverless核心技術和大規(guī)模實踐
定 價:79.8 元
- 作者:ByteFaaS函數(shù)計算團隊
- 出版時間:2023/1/1
- ISBN:9787115605290
- 出 版 社:人民郵電出版社
- 中圖法分類:TN929.53
- 頁碼:208
- 紙張:
- 版次:01
- 開本:16開
本書著眼于 Serverless 方向,重點介紹 FaaS 的架構和實現(xiàn)原理。本書從 Serverless 的理念和基礎知識出發(fā),介紹業(yè)內(nèi)具有代表性的 Serverless 產(chǎn)品,進而引出字節(jié)跳動函數(shù)計算產(chǎn)品 ByteFaaS,并介紹 ByteFaaS 的定位、特點和生態(tài),以及整體架構等;詳細介紹傳統(tǒng) FaaS 架構,包括 FaaS 控制面、FaaS 數(shù)據(jù)面、FaaS 運行時、FaaS 觸發(fā)器、FaaS 彈性伸縮等核心組件的設計與實現(xiàn);闡述 FaaS 助推 PaaS 演進的思路和技術實踐,并延伸到 FaaS 輕量級函數(shù)與云邊一體;介紹 Serverless 在字節(jié)跳動的落地實踐和對 Serverless 未來的展望。
1.本書著眼于Serverless方向,重點介紹了FaaS的架構和實現(xiàn)原理,內(nèi)容設計合理,適合Serverless領域的用戶、開發(fā)者與架構師學習參考
2.內(nèi)容豐富,系統(tǒng)的分享了字節(jié)跳動在Serverless領域的核心技術和大規(guī)模實踐
3.字節(jié)跳動基礎架構函數(shù)計算團隊的Serverless大規(guī)模實踐技術分享,團隊在 FaaS 領域有大規(guī)模實踐經(jīng)驗,專業(yè)性強,實用性強
ByteFaaS函數(shù)計算團隊
楊華輝:字節(jié)跳動基礎架構函數(shù)計算團隊負責人,主要關注分布式系統(tǒng)、容器化、高可用、可擴展架構設計等領域,具備大規(guī)模系統(tǒng)的落地實踐經(jīng)驗。
陳輝:就職于字節(jié)跳動 Serverless 團隊,目前主要負責大規(guī)模二進制分發(fā)、異步任務、網(wǎng)關服務、控制面系統(tǒng)以及 FaaS 場景下服務網(wǎng)格生態(tài)等相關工作。
吳桂勇:就職于字節(jié)跳動 Serverless 團隊,目前主要負責 FaaS 數(shù)據(jù)面架構、系統(tǒng)高可用方面的工作。
闊鑫:就職于字節(jié)跳動 Serverless 團隊,目前主要負責字節(jié)跳動內(nèi)部微服務上的 FaaS 方案推進和火山引擎 FaaS 類型產(chǎn)品的迭代。
李博:就職于字節(jié)跳動 Serverless 團隊,目前主要負責 FaaS 平臺側、觸發(fā)器、彈性伸縮方面的工作。
彭璟文:加入字節(jié)跳動以來,一直專注于 Serverless 領域,目前主要負責 FaaS 數(shù)據(jù)面架構、輕量級函數(shù)和云邊一體方面的工作。
于童:入職字節(jié)跳動后,負責 CronJob 平臺研發(fā)和 FaaS 平臺研發(fā),目前主要專注于邊緣計算云邊一體化、輕量級函數(shù)方向,負責整體穩(wěn)定性和可用性相關工作。
第 1 章 Serverless 基礎知識 1
1.1 Serverless 基礎概念 1
1.1.1 Serverless 理念 1
1.1.2 Serverless 技術特點 2
1.2 Serverless 技術能力 4
1.3 Serverless 應用場景 4
1.4 本章小結 7
第 2 章 業(yè)內(nèi)概況 9
2.1 業(yè)界產(chǎn)品 9
2.1.1 AWS Lambda 9
2.1.2 Google Cloud Platform 10
2.1.3 Cloudflare Workers 11
2.1.4 Compute@Edge 13
2.2 開源項目 13
2.2.1 OpenFaaS 13
2.2.2 Fission 14
2.2.3 Knative 15
2.3 字節(jié)跳動 ByteFaaS 15
2.3.1 定位、特點和生態(tài) 15
2.3.2 整體架構 16
2.3.3 應用規(guī)模 18
2.4 本章小結 18
第 3 章 FaaS 控制面 19
3.1 控制面的整體架構 19
3.2 多地區(qū)多機房部署 21
3.2.1 單地區(qū)多機房容災部署 21
3.2.2 多地區(qū)統(tǒng)一控制面 22
3.3 構建和發(fā)布 24
3.3.1 構建 24
3.3.2 發(fā)布 25
3.4 可觀測性 27
3.4.1 日志 27
3.4.2 監(jiān)控 29
3.4.3 鏈路追蹤 31
3.5 開發(fā)體驗 31
3.5.1 ByteFaaS CLI 32
3.5.2 本地調(diào)試 33
3.5.3 在線調(diào)試 34
3.6 本章小結 37
第 4 章 FaaS 數(shù)據(jù)面 39
4.1 數(shù)據(jù)面整體架構 39
4.2 函數(shù)實例管理 41
4.2.1 函數(shù)實例的服務發(fā)現(xiàn) 41
4.2.2 函數(shù)實例的就緒檢測 42
4.3 函數(shù)流量調(diào)度 44
4.3.1 函數(shù)請求并發(fā)控制 45
4.3.2 函數(shù)分片 46
4.3.3 函數(shù)實例緩存 48
4.3.4 自適應降載 49
4.4 函數(shù)冷啟動優(yōu)化 51
4.4.1 冷啟動問題背景 51
4.4.2 鏡像代碼分離 52
4.4.3 函數(shù)實例預熱 53
4.4.4 冷啟動實例調(diào)度 54
4.4.5 用戶側優(yōu)化 56
4.5 函數(shù)代碼分發(fā) 57
4.5.1 多級緩存 58
4.5.2 下載優(yōu)化 59
4.5.3 大規(guī)模分發(fā) 59
4.6 本章小結 61
第 5 章 FaaS 運行時 63
5.1 函數(shù)運行時 63
5.1.1 函數(shù)運行時規(guī)范 64
5.1.2 函數(shù)實例生命周期 67
5.2 函數(shù)運行時隔離技術 70
5.2.1 基于 Docker 的容器封裝隔離 . 70
5.2.2 從 Docker 到 containerd 的遷移 71
5.2.3 輕量級虛擬化:從 runC 到 Kata Containers 73
5.2.4 Unikernel 76
5.2.5 進程內(nèi)隔離 78
5.3 函數(shù)運行時性能優(yōu)化 80
5.3.1 RuntimeAgent 進程和數(shù)據(jù)面性能損耗 81
5.3.2 在 net/http 基礎上的優(yōu)化 81
5.3.3 更優(yōu)的 CPU、內(nèi)存分配策略 84
5.4 本章小結 86
第 6 章 FaaS 觸發(fā)器 87
6.1 FaaS 平臺常見的觸發(fā)器 87
6.1.1 觸發(fā)器的分類 87
6.1.2 HTTP 觸發(fā)器的設計與實現(xiàn) . 88
6.1.3 服務發(fā)現(xiàn)觸發(fā)器的設計與實現(xiàn) 89
6.1.4 定時觸發(fā)器的設計與實現(xiàn) 89
6.2 MQ 觸發(fā)器的設計與實現(xiàn) 90
6.2.1 MQ 觸發(fā)器的整體設計 . 90
6.2.2 觸發(fā)函數(shù)的并發(fā)控制 92
6.2.3 函數(shù)調(diào)用的反壓控制 93
6.2.4 觸發(fā)函數(shù)的限流控制 94
6.3 MQ 觸發(fā)器在大規(guī)模場景下的優(yōu)化 . 96
6.3.1 消息的高效過濾 96
6.3.2 觸發(fā)器的重新平衡優(yōu)化 . 99
6.3.3 超大規(guī)模函數(shù)的連接數(shù)分片優(yōu)化 101
6.4 基于 MQ 觸發(fā)器的第三方觸發(fā)器的接入 102
6.4.1 基于 Event Gateway 的接入 103
6.4.2 基于 MQ 的接入 103
6.5 本章小結 104
第 7 章 FaaS 彈性伸縮 105
7.1 彈性伸縮系統(tǒng)的定義和架構 105
7.1.1 彈性伸縮系統(tǒng)的定義 105
7.1.2 彈性伸縮系統(tǒng)的架構 106
7.2 彈性伸縮系統(tǒng)的策略設計 108
7.2.1 策略的分級和結合 108
7.2.2 策略的詳細設計 109
7.2.3 評分和策略反饋機制 110
7.3 彈性伸縮系統(tǒng)的指標設計 111
7.3.1 整體的架構設計 111
7.3.2 如何對指標數(shù)據(jù)進行存儲 . 113
7.3.3 FaaS MAS 自適應云原生分片方案 114
7.4 彈性伸縮系統(tǒng)的分片架構 115
7.4.1 分片架構設計方案 115
7.4.2 分片架構的容錯機制 116
7.5 本章小結 117
第 8 章 FaaS 助推 PaaS 演進 119
8.1 FaaS Native:開發(fā)原生應用的解決方案 119
8.1.1 FaaS Native 的目標 120
8.1.2 運行原生應用代碼 120
8.1.3 自定義鏡像 121
8.2 多協(xié)議支持 124
8.2.1 數(shù)據(jù)調(diào)用與流量調(diào)度的解耦 124
8.2.2 HTTP/2 支持 126
8.2.3 gRPC 協(xié)議支持 128
8.2.4 Thrift 協(xié)議支持 131
8.2.5 客戶端流量接入 133
8.3 融入字節(jié)跳動微服務治理體系ByteMesh 135
8.3.1 ByteMesh: 字節(jié)跳動內(nèi)部 Service Mesh 服務治理體系 136
8.3.2 上游服務訪問下游 FaaS . 137
8.3.3 上游 FaaS 訪問下游服務 138
8.3.4 FaaS 接入 ByteMesh 入流量代理 139
8.4 異步長時間執(zhí)行任務支持 140
8.4.1 架構設計 140
8.4.2 任務管理 142
8.4.3 適用場景 144
8.5 本章小結 144
第 9 章 FaaS 輕量級函數(shù)與云邊一體 . 145
9.1 輕量級函數(shù) 145
9.2 WebAssembly 輕量級函數(shù)運行時 146
9.2.1 什么是 WebAssembly 146
9.2.2 Hostcall + WASI 147
9.2.3 運行時架構 149
9.2.4 冷啟動優(yōu)化 150
9.2.5 代碼樣例 151
9.3 JavaScript 輕量級函數(shù)運行時 152
9.3.1 背景知識 153
9.3.2 Host API 153
9.3.3 運行時架構 154
9.3.4 冷啟動優(yōu)化 155
9.3.5 代碼樣例 156
9.3.6 兩種函數(shù)輕量級運行時對比 157
9.4 精簡架構 158
9.4.1 整體架構 158
9.4.2 請求路徑 160
9.4.3 流量調(diào)度 161
9.4.4 冷啟動優(yōu)化 162
9.4.5 高密度部署 164
9.5 云邊架構 165
9.5.1 理念介紹 165
9.5.2 流量接入 166
9.5.3 云邊通信 167
9.5.4 邊緣可用性 169
9.6 存儲服務 171
9.6.1 存儲資源 172
9.6.2 Global KV 172
9.6.3 Local Cache 174
9.6.4 多層緩存機制 176
9.7 開發(fā)者工具 177
9.7.1 代碼在線預覽工具 177
9.7.2 JavaScript 輕量級函數(shù)開發(fā)工具 179
9.8 本章小結 180
第 10 章 Serverless 在字節(jié)跳動的落地實踐 181
10.1 突破 Serverless 資源和性能的瓶頸 181
10.2 基于 Kubernetes 的云原生體系 183
10.3 觸發(fā)器和自動擴縮容,承載大規(guī)模消費場景 184
10.3.1 一鍵配置,支持活動業(yè)務的快速迭代 184
10.3.2 彈性伸縮,潮汐流量的省錢“利器” 185
10.4 通用型 Serverless,多協(xié)議支持PaaS 演進 186
10.4.1 早期嘗試:基于 HTTP 的Thrift RPC 186
10.4.2 原生支持:與周邊團隊深度合作,打通 RPC 生態(tài) . 187
10.4.3 進一步發(fā)揮 FaaS 優(yōu)勢,RPC 與事件驅(qū)動架構結合 . 188
10.5 輕量級函數(shù),打造云邊一體架構 188
10.5.1 收斂長尾函數(shù),承載突發(fā)流量 188
10.5.2 邊緣業(yè)務上線 189
10.6 本章小結 191
第 11 章 Serverless 展望 193
11.1 規(guī)范標準 193
11.2 通用型 Serverless 194
11.3 云邊一體 196
11.4 本章小結 197