Apache ShardingSphere權威指南 A Definitive Guide to Apache ShardingSphere: Transform any DBMS into a distributed database with sharding, scaling, encryption features, and more

潘娟 張亮 [阿爾及利亞]亞幸·西·塔伊布(Yacine Si Tayeb)

  • Apache ShardingSphere權威指南-preview-1
  • Apache ShardingSphere權威指南-preview-2
Apache ShardingSphere權威指南-preview-1

商品描述

Apache ShardingSphere 是一個基於可插拔特性和雲原生原則的新開源生態系統,將其用於分佈式數據基礎設施有助於增強數據庫性能。本書首先簡要概述數據庫管理系統在生產環境中面臨的主要挑戰和數據庫軟件的內核概念;然後介紹使用分佈式數據庫解決方案、彈性伸縮、用戶身份認證、SOL授權、全鏈路監控、數據庫網關和 DistSOL的真實示例,全面講解 ShardingSphere 的架構組件,以及如何利用它們配置和插入現有的基礎架構並管理數據和應用;接著介紹生態系統的客戶端 ShardingSphere-JDBC 和 ShardingSphere-Proxy,以及它們如何同時或獨立地工作以滿足實際需求;最後講解如何定製可插拔架構以定義個性化的用戶策略和無縫管理多個配置,並在各種場景下對數據庫進行基準測試和性能測試。

作者簡介

潘娟,SphereEx 联合创始人兼首席技术官(CTO)。她是 Apache 基金会会员和孵化器导师、Apache ShardingSphere 项目管理委员会(project management committee,PMC)成员、AWS 大侠、腾讯云 TVP。她曾负责京东数科数据库智能平台的设计与研发,现专注于分布式数据库和中间件生态及开源领域。她被评为中国开源先锋人物、OSCAR 尖峰开源人物、CSDN IT 领军人物、掘金引力榜年度新锐人物。

张亮,SphereEx 公司创始人兼首席执行官(CEO)。他是数据库领域实践者、Apache 基金会会员、微软 MVP、阿里云 MVP、腾讯云 TVP、华为云 MVP、Apache ShardingSphere 创始人和 PMC 主席。他拥有超过 10 年的数据库领域探索、实践经验,热爱开源,擅长分布式架构,推崇优雅代码。他曾在多个大型互联网公司任职架构、数据库团队负责人。他在 ICDE 发表过论文“Apache ShardingSphere—A Holistic and Pluggable Platform for Data Sharding”,是《未来架构:从服务化到云原生》的作者。

亚幸·西·塔伊布(Yacine Si Tayeb)博士是 Apache 基金会的贡献者,也是 Apache

ShardingSphere 社区的关键贡献者和建设者。他出生于阿尔及利亚,幼年移居意大利,大学期间来到北京,目前已获得企业管理博士学位。出于对技术和创新的热情,他在中国的初创公司和科技领域深耕多年。他的职业生涯和研究领域受到科技和商业交汇的影响。作为一位发表了社会科学引文索引(Social Sciences Citation Index,SSCI)论文的学者,他对技术的浓厚兴趣引导他开展了关于公司治理和财务绩效对公司创新结果的影响的研究。在此期间,他的研究方向逐渐演变成关于 Apache ShardingSphere 大数据生态系统和开源社区的建设。

目錄大綱

第 一部分 ShardingSphere 簡介

第 1 章 DBMS 和 DBA 的演變及ShardingSphere 扮演的角色 3

1.1 DBMS 的演變 4

1.1.1 行業痛點 5

1.1.2 給 DBMS 帶來新機會的行業新需求 6

1.2 DBA 角色的演變 6

1.2.1 壓倒性的流量負載增長 7

1.2.2 用於前端服務的微服務架構 7

1.2.3 雲原生導致原有的交付和部署方式不再可行 7

1.3 DBMS 的機會和發展方向 8

1.3.1 數據庫安全 9

1.3.2 SQL、NoSQL 和 NewSQL 9

1.3.3 新架構 10

1.3.4 擁抱透明的分片中間件 10

1.3.5 數據庫即服務 10

1.3.6 AI 數據庫管理平臺 11

1.3.7 數據庫遷移 11

1.4 理解 ShardingSphere 12

1.4.1 連接 12

1.4.2 增強 13

1.4.3 可插拔 13

1.5 小結 16

第 2 章 ShardingSphere 架構概述 17

2.1 分佈式數據庫架構 18

2.2 基於 SQL 的負載均衡層 18

2.2.1 使用邊車模式改善性能和可用性 20

2.2.2 改變雲原生數據庫開發路徑的數據庫網格 20

2.3 ShardingSphere 和數據庫網格 22

2.4 使用 Database Plus 解決數據庫痛點 22

2.5 基於 Database Plus 的架構 24

2.5.1 功能架構 24

2.5.2 客戶端 25

2.5.3 特性層簡介 26

2.6 部署架構 29

2.7 插件平臺 30

2.7.1 微內核生態 30

2.7.2 簡單下推引擎 32

2.7.3 SQL 聯邦引擎 33

2.8 小結 34

第二部分 ShardingSphere架構、安裝和配置

第 3 章 關鍵特性和應用場景——分佈式數據庫精髓 37

3.1 分佈式數據庫解決方案 37

3.2 數據分片 38

3.2.1 垂直分片 38

3.2.2 水平分片 39

3.2.3 數據分片要點 40

3.2.4 為什麽需要分片 44

3.3 SQL 優化 44

3.3.1 SQL 優化的定義 44

3.3.2 SQL 優化的價值 46

3.4 分佈式事務及其特徵 46

3.4.1 分佈式事務 46

3.4.2 ShardingSphere 對事務的支持 47

3.4.3 事務模式比較 48

3.5 彈性伸縮簡介 49

3.5.1 掌握彈性伸縮 49

3.5.2 彈性伸縮的實現流程 50

3.5.3 彈性伸縮要點 51

3.5.4 如何利用彈性伸縮解決實際問題 53

3.6 讀寫分離 54

3.6.1 讀寫分離的定義 54

3.6.2 讀寫分離功能的要點 55

3.6.3 工作原理 55

3.6.4 應用場景 55

3.7 小結 56

第 4 章 關鍵特性和應用場景——性能和安全 57

4.1 理解高可用性 57

4.1.1 數據庫高可用性 58

4.1.2 ShardingSphere 的高可用性 58

4.2 數據加解密 60

4.2.1 什麽是數據加解密 60

4.2.2 關鍵組件 61

4.2.3 工作流程 62

4.2.4 應用場景 63

4.3 用戶身份認證 66

4.3.1 DBMS 身份認證和分佈式數據庫身份認證 66

4.3.2 機制 67

4.3.3 工作流程 68

4.3.4 配置 68

4.4 SQL 授權 69

4.4.1 定義 SQL 授權 70

4.4.2 機制 70

4.4.3 規劃 71

4.4.4 應用場景 71

4.5 數據庫和應用的全鏈路監控 71

4.5.1 工作原理 71

4.5.2 一個全面的全鏈路監控解決方案 72

4.6 數據庫網關 72

理解數據庫網關 72

4.7 分佈式 SQL 76

4.7.1 DistSQL 簡介 76

4.7.2 應用場景 77

4.7.3 有關 DistSQL 的其他說明 79

4.7.4 對 ShardingSphere 的影響 80

4.8 理解集群模式 80

4.8.1 集群模式的定義 80

4.8.2 核心概念 81

4.8.3 與其他 ShardingSphere 特性的兼容性 81

4.9 集群管理 82

4.9.1 計算節點 82

4.9.2 存儲節點 83

4.10 可觀察性 83

4.10.1 什麽是可觀察性 84

4.10.2 將可觀察性應用於 IT 系統 84

4.10.3 機制 84

4.10.4 應用場景 85

4.11 小結 86

第 5 章 探索 ShardingSphere適配器 87

5.1 技術需求 87

5.2 ShardingSphere-JDBC 和ShardingSphere-Proxy 之間的差別 88

5.3 ShardingSphere-JDBC 88

5.3.1 開發機制 89

5.3.2 適用場景和目標用戶 90

5.3.3 部署和用戶快速入門指南 91

5.4 ShardingSphere-Proxy 92

5.4.1 開發機制 92

5.4.2 適用場景和目標用戶 93

5.4.3 部署和用戶快速入門指南 94

5.4.4 從官網下載 94

5.5 混合部署架構簡介 98

5.5.1 適用場景和目標用戶 98

5.5.2 部署和用戶快速入門指南 99

5.6 小結 101

第 6 章 安裝並配置ShardingSphere-Proxy 102

6.1 技術需求 102

6.1.1 使用二進制包安裝 103

6.1.2 使用 Docker 安裝 103

6.2 分佈式 SQL 簡介 103

6.3 配置分片 104

6.3.1 DistSQL 104

6.3.2 YAML 配置項 106

6.4 配置讀寫分離 108

6.4.1 DistSQL 108

6.4.2 YAML 配置項 108

6.5 配置加密 109

6.5.1 DistSQL 109

6.5.2 YAML 配置項 110

6.6 配置影子庫 111

6.6.1 DistSQL 111

6.6.2 YAML 配置項 112

6.7 配置模式 113

6.8 配置彈性伸縮 113

6.8.1 DistSQL 114

6.8.2 YAML 配置項 115

6.9 配置多特性和服務器屬性 115

6.9.1 DistSQL 115

6.9.2 YAML 配置項 116

6.10 配置混合配置 116

6.10.1 DistSQL 117

6.10.2 YAML 配置項 117

6.11 配置服務器 118

6.11.1 授權 118

6.11.2 事務 119

6.11.3 特性配置 119

6.12 小結 121

第 7 章 準備並配置 ShardingSphere-JDBC 122

7.1 技術需求 122

7.2 準備工作和配置方法 122

7.2.1 基本需求簡介 122

7.2.2 配置方法簡介 124

7.3 分片配置 124

7.3.1 Java 配置項 124

7.3.2 YAML 配置項 128

7.3.3 Spring Boot 配置項 129

7.3.4 Spring 命名空間配置項 131

7.4 讀寫分離配置 133

7.4.1 Java 配置項 133

7.4.2 YAML 配置項 134

7.4.3 Spring Boot 配置項 135

7.4.4 Spring 命名空間配置項 135

7.5 數據加密配置 136

7.5.1 Java 配置項 136

7.5.2 YAML 配置項 138

7.5.3 Spring Boot 配置項 139

7.5.4 Spring 命名空間配置項 140

7.6 影子庫配置 141

7.6.1 Java 配置項 141

7.6.2 YAML 配置項 141

7.6.3 Spring Boot 配置示例 142

7.6.4 Spring 命名空間配置項 143

7.7 ShardingSphere 模式配置 143

7.7.1 Java 配置項 144

7.7.2 YAML 配置項 145

7.7.3 Spring Boot 配置項 146

7.7.4 Spring 命名空間配置示例 147

7.8 ShardingSphere-JDBC 屬性配置 147

7.8.1 Java 配置項 147

7.8.2 YAML 配置項 148

7.8.3 Spring Boot 配置項 149

7.8.4 Spring 命名空間配置項 149

7.9 混合配置 149

7.9.1 分片、讀寫分離和集群配置項 149

7.9.2 配置分片、加密和集群模式 151

7.10 小結 153

第三部分 ShardingSphere 實例、性能和場景測試

第 8 章 Database Plus 及可插拔架構 157

8.1 技術需求 157

8.2 Database Plus 簡介 158

8.2.1 ShardingSphere 追求的Database Plus 158

8.2.2 連接—打造數據庫上層標準 158

8.2.3 增強—數據集計算增強引擎 158

8.2.4 可插拔—打造面向數據庫的功能生態 159

8.3 可插拔架構和 SPI 簡介 159

8.3.1 ShardingSphere 的可插拔架構 159

8.3.2 可擴展的算法和接口 160

8.4 用戶定義的功能和策略——SQL 解析引擎、數據分片、讀寫分離和分佈式事務 162

8.4.1 SQL 解析引擎 162

8.4.2 數據分片 163

8.4.3 讀寫分離 165

8.4.4 分佈式事務 166

8.5 用戶定義的功能和策略—數據加密、用戶身份認證、SQL 授權、影子庫、分佈式治理和伸縮 168

8.5.1 數據加密 168

8.5.2 用戶身份認證 169

8.5.3 SQL 授權 170

8.5.4 影子庫 172

8.5.5 分佈式治理 174

8.5.6 伸縮 178

8.6 ShardingSphere-Proxy 的屬性調整和應用場景 180

8.6.1 屬性參數簡介 180

8.6.2 可擴展的算法 183

8.7 小結 187

第 9 章 基準和性能測試系統簡介 188

9.1 技術需求 188

9.2 基準測試 189

9.2.1 Sysbench 189

9.2.2 BenchmarkSQL 191

9.2.3 另一款有必要知道的基準測試工具 193

9.2.4 數據庫 195

9.2.5 ShardingSphere 196

9.3 性能測試 197

9.3.1 測試準備 197

9.3.2 性能測試工作流程 198

9.3.3 搭建環境 199

9.3.4 壓力測試 199

9.3.5 結果報告分析 201

9.4 小結 201

第 10 章 測試常見的應用場景 202

10.1 技術需求 202

10.2 測試分佈式數據庫場景 203

10.2.1 為測試分佈式系統做準備 203

10.2.2 部署和配置 203

10.2.3 如何測試分佈式系統 206

10.2.4 分析 ShardingSphere-Proxy 分片特性 209

10.3 基於場景的數據庫安全測試 210

10.3.1 為測試數據庫安全做準備 211

10.3.2 部署和配置 211

10.3.3 如何運行數據庫安全測試 212

10.3.4 報告分析 213

10.4 全鏈路監控 214

10.4.1 為測試全鏈路監控做準備 214

10.4.2 部署和配置 214

10.4.3 如何執行全鏈路監控測試 216

10.4.4 報告分析 217

10.5 數據庫網關 217

10.5.1 為測試數據庫網關做準備 217

10.5.2 部署和配置 218

10.5.3 如何運行數據庫網關測試 219

10.5.4 報告分析 221

10.6 小結 223

第 11 章 探索最佳的 ShardingSphere 使用案例 224

11.1 技術需求 224

11.2 推薦的分佈式數據庫解決方案 225

11.2.1 可供選擇的兩個客戶端 226

11.2.2 DBMS 227

11.2.3 分片策略 227

11.2.4 分佈式事務 229

11.2.5 高可用性和讀寫分離策略 230

11.2.6 彈性伸縮 231

11.2.7 分佈式治理 232

11.3 推薦的數據庫安全解決方案 233

11.3.1 使用 ShardingSphere 實現數據庫安全 233

11.3.2 可供選擇的兩個客戶端 234

11.3.3 對 DBMS 應用數據安全解決方案 234

11.3.4 數據加密/數據脫敏 235

11.3.5 包含加密的數據遷移 235

11.3.6 身份認證 235

11.3.7 SQL 授權/權限檢查 236

11.4 推薦的全鏈路監控解決方案 236

11.4.1 流量網關 237

11.4.2 應用性能監控和 Cyborg 237

11.4.3 數據庫保護 238

11.5 推薦的數據庫網關解決方案 238

11.5.1 概述與架構 238

11.5.2 數據庫管理 239

11.5.3 讀寫分離 241

11.6 小結 242

第 12 章 將理論付諸實踐 243

12.1 技術需求 243

12.2 分佈式數據庫解決方案 244

12.2.1 案例 1:ShardingSphere-Proxy+ShardingSphere-JDBC+PostgreSQL+分佈式事務+集群模式+分片算法MOD 244

12.2.2 案例 2:ShardingSphere-Proxy+MySQL+讀寫分離+集群模式+高可用性+分片算法 RANGE+彈性伸縮 248

12.3 數據庫安全 255

12.3.1 案例 3:ShardingSphere-Proxy+ShardingSphere-JDBC+PostgreSQL+數據加密 255

12.3.2 案例 4:ShardingSphere-Proxy+MySQL+數據脫敏+ 身份認證+權限檢查 258

12.4 全鏈路監控 262

案例 5:全鏈路監控 262

12.5 數據庫網關 269

12.5.1 部署架構 269

12.5.2 示例配置 270

12.5.3 推薦的雲端/ 自有服務器 271

12.5.4 啟動並測試 271

12.6 小結 275

附錄 A 276