可伸縮服務架構:框架與中間件

可伸縮服務架構:框架與中間件

《可伸縮服務架構:框架與中間件》是2018年電子工業出版社出版的圖書,作者是李艷鵬、楊彪、李海亮、賈博岩、劉淏。

基本介紹

  • 中文名:可伸縮服務架構:框架與中間件
  • 作者:李艷鵬、楊彪、李海亮、賈博岩、劉淏
  • 出版社:電子工業出版社
  • 出版時間:2018年3月
  • 頁數:580 頁
  • 定價:109 元
  • 開本:16 開
  • ISBN: 9787121335723
編輯推薦,內容簡介,圖書目錄,作者簡介,

編輯推薦

√ 雲時代架構系列經典!重磅級架構書2018年重磅上市!
√ 詳解高可用架構設計的核心要點:可伸縮與可擴展
√ 詳解分散式發號器、訊息佇列框架、資料庫分庫分表、快取、Elasticsearch、分散式調度任務、RPC服務、Dubbo、高性能網路代理中間件等
√ 全面破解可伸縮服務架構的奧秘
√ 分散式服務架構:原理、設計與實戰讀者的配套技能升級架構書。

內容簡介

《可伸縮服務架構:框架與中間件》以高可用服務架構為主題,側重於講解高可用架構設計的核心要點:可伸縮和可擴展,從套用層、資料庫、快取、訊息佇列、大數據查詢系統、分散式定時任務調度系統、微服務等層面詳細講解如何設計可伸縮、可擴展的框架,並給出在各個領域解決特定問題的方法論和實踐總結。隨著《可伸縮服務架構:框架與中間件》的出版,我們還開源了4個行之有效的網際網路可伸縮框架,包括資料庫分庫分表dbsplit、快取分片redic、專業的發號器vesta和訊息佇列處理機框架kclient,每個框架都開箱即用,也可以作為學習網際網路平台化框架搭建的素材,更可以作為開發開源項目的示例。
《可伸縮服務架構:框架與中間件》的上冊《分散式服務架構:原理、設計與實戰》詳細介紹了如何解決線上高並發服務的一致性、高性能、高可用、敏捷等痛點,《可伸縮服務架構:框架與中間件》與上冊結合後可覆蓋保證線上高並發服務的各個主題:一致性、高性能、高可用、可伸縮、可擴展、敏捷性等,每個主題都是一個方法論。充分理解這些主題,可保障線上服務健壯運行,對實現服務穩定性的n個9有著不可估量的作用。
無論是對於網際網路的或者傳統的軟體工程師、測試工程師、架構師,還是對於深耕於IT的其他管理人員,《可伸縮服務架構:框架與中間件》都有很強的借鑑性和參考價值,是值得每個技術人員閱讀的架構級技術書。

圖書目錄

第1章 如何設計一款永不重複的高性能分散式發號器 1
1.1 可選方案及技術選型 2
1.1.1 為什麼不用UUID 2
1.1.2 基於資料庫的實現方案 2
1.1.3 Snowflake開源項目 3
1.1.4 小結 4
1.2 分散式系統對發號器的基本需求 4
1.3 架構設計與核心要點 6
1.3.1 發布模式 6
1.3.2 ID類型 7
1.3.3 數據結構 7
1.3.4 並發 9
1.3.5 機器ID的分配 9
1.3.6 時間同步 10
1.3.7 設計驗證 11
1.4 如何根據設計實現多場景的發號器 11
1.4.1 項目結構 12
1.4.2 服務接口的定義 14
1.4.3 服務接口的實現 15
1.4.4 ID元數據與長整型ID的互相轉換 22
1.4.5 時間操作 25
1.4.6 機器ID的生成 27
1.4.7 小結 32
1.5 如何保證性能需求 32
1.5.1 嵌入發布模式的壓測結果 33
1.5.2 中心伺服器發布模式的壓測結果 33
1.5.3 REST發布模式(Netty實現)的壓測結果 33
1.5.4 REST發布模式(Spring Boot + Tomcat實現)的壓測結果 34
1.5.5 性能測試總結 34
1.6 如何讓用戶快速使用 35
1.6.1 REST發布模式的使用指南 35
1.6.2 服務化模式的使用指南 38
1.6.3 嵌入發布模式的使用指南 41
1.7 為用戶提供API文檔 43
1.7.1 RESTful API文檔 44
1.7.2 Java API文檔 45
第2章 可靈活擴展的訊息佇列框架的設計與實現 49
2.1 背景介紹 50
2.2 項目目標 50
2.2.1 簡單易用 50
2.2.2 高性能 51
2.2.3 高穩定性 51
2.3 架構難點 51
2.3.1 執行緒模型 51
2.3.2 異常處理 53
2.3.3 優雅關機 53
2.4 設計與實現 54
2.4.1 項目結構 54
2.4.2 項目包的規劃 55
2.4.3 生產者的設計與實現 57
2.4.4 消費者的設計與實現 58
2.4.5 啟動模組的設計與實現 67
2.4.6 訊息處理器的體系結構 76
2.4.7 反射機制 79
2.4.8 模板項目的設計 80
2.5 使用指南 82
2.5.1 安裝步驟 82
2.5.2 Java API 83
2.5.3 與Spring環境集成 84
2.5.4 對服務源碼進行註解 85
2.6 API簡介 87
2.6.1 Producer API 87
2.6.2 Consumer API 88
2.6.3 訊息處理器 88
2.6.4 訊息處理器定義的註解 90
2.7 訊息處理機模板項目 91
2.7.1 快速開發嚮導 91
2.7.2 後台監控和管理 92
第3章 輕量級的資料庫分庫分表架構與框架 93
3.1 什麼是分庫分表 94
3.1.1 使用資料庫的三個階段 94
3.1.2 在什麼情況下需要分庫分表 95
3.1.3 分庫分表的典型實例 96
3.2 三種分而治之的解決方案 97
3.2.1 客戶端分片 97
3.2.2 代理分片 100
3.2.3 支持事務的分散式資料庫 101
3.3 分庫分表的架構設計 102
3.3.1 整體的切分方式 102
3.3.2 水平切分方式的路由過程和分片維度 106
3.3.3 分片後的事務處理機制 107
3.3.4 讀寫分離 119
3.3.5 分庫分表引起的問題 119
3.4 流行代理分片框架Mycat的初體驗 123
3.4.1 安裝Mycat 123
3.4.2 配置Mycat 124
3.4.3 配置資料庫節點 128
3.4.4 數據遷移 129
3.4.5 Mycat支持的分片規則 129
3.5 流行的客戶端分片框架Sharding JDBC的初體驗 138
3.5.1 Sharding JDBC簡介 138
3.5.2 Sharding JDBC的功能 139
3.5.3 Sharding JDBC的使用 141
3.5.4 Sharding JDBC的使用限制 152
3.6 自研客戶端分片框架dbsplit的設計、實現與使用 153
3.6.1 項目結構 154
3.6.2 包結構和執行流程 155
3.6.3 切片下標命名策略 159
3.6.4 SQL解析和組裝 167
3.6.5 SQL實用程式 168
3.6.6 反射實用程式 173
3.6.7 分片規則的配置 177
3.6.8 支持分片的SplitJdbcTemplate和SimpleSplitJdbcTemplate接口API 179
3.6.9 JdbcTemplate的擴展SimpleJdbcTemplate接口API 184
3.6.10 用於創建分庫分表資料庫的腳本工具 187
3.6.11 使用dbsplit的一個簡單示例 192
3.6.12 使用dbsplit的線上真實示例展示 199
第4章 快取的本質和快取使用的優秀實踐 201
4.1 使用快取的目的和問題 202
4.2 自相似,CPU的快取和系統架構的快取 203
4.2.1 CPU快取的架構及性能 205
4.2.2 CPU快取的運行過程分析 206
4.2.3 快取行與偽共享 208
4.2.4 從CPU的體系架構到分散式的快取架構 218
4.3 常用的分散式快取解決方案 221
4.3.1 常用的分散式快取的對比 221
4.3.2 Redis初體驗 225
4.4 分散式快取的通用方法 229
4.4.1 快取編程的具體方法 229
4.4.2 套用層訪問快取的模式 233
4.4.3 分散式快取分片的三種模式 235
4.4.4 分散式快取的遷移方案 238
4.4.5 快取穿透、快取並發和快取雪崩 244
4.4.6 快取對事務的支持 246
4.5 分散式快取的設計與案例 248
4.5.1 快取設計的核心要素 248
4.5.2 快取設計的優秀實踐 250
4.5.3 關於常見的快取線上問題的案例 253
4.6 客戶端快取分片框架redic的設計與實現 257
4.6.1 什麼時候需要redic 258
4.6.2 如何使用redic 258
4.6.3 更多的配置 258
4.6.4 項目結構 260
4.6.5 包結構 261
4.6.6 設計與實現的過程 261
第5章 大數據利器之Elasticsearch 268
5.1 Lucene簡介 269
5.1.1 核心模組 269
5.1.2 核心術語 270
5.1.3 檢索方式 271
5.1.4 分段存儲 273
5.1.5 段合併策略 275
5.1.6 Lucene相似度打分 278
5.2 Elasticsearch簡介 286
5.2.1 核心概念 286
5.2.2 3C和腦裂 289
5.2.3 事務日誌 291
5.2.4 在集群中寫索引 294
5.2.5 集群中的查詢流程 295
5.3 Elasticsearch實戰 298
5.3.1 Elasticsearch的配置說明 298
5.3.2 常用的接口 300
5.4 性能調優 305
5.4.1 寫最佳化 305
5.4.2 讀最佳化 308
5.4.3 堆大小的設定 313
5.4.4 伺服器配置的選擇 315
5.4.5 硬碟的選擇和設定 316
5.4.6 接入方式 318
5.4.7 角色隔離和腦裂 319
第6章 全面揭秘分散式定時任務 321
6.1 什麼是定時任務 322
6.2 分散式定時任務 341
6.2.1 定時任務的使用場景 342
6.2.2 傳統定時任務存在的問題 342
6.2.3 分散式定時任務及其原理 344
6.3 開源分散式定時任務的用法 347
6.3.1 Quartz的分散式模式 347
6.3.2 TBSchedule 356
6.3.3 Elastic-Job 365
第7章 RPC服務的發展歷程和對比分析 377
7.1 什麼是RPC服務 378
7.2 RPC服務的原理 379
7.2.1 Sokcet套接字 379
7.2.2 RPC的調用過程 380
7.3 在程式中使用RPC服務 382
7.4 RPC服務的發展歷程 383
7.4.1 第一代RPC:以ONC RPC和DCE RPC為代表的函式式RPC 384
7.4.2 第二代RPC:支持面對象的編程 388
7.4.3 第三代RPC:SOA和微服務 398
7.4.4 架構的演進 402
7.5 主流的RPC框架 403
7.5.1 Thrift 403
7.5.2 ZeroC Ice 410
7.5.3 gRPC 418
7.5.4 Dubbo 430
第8章 Dubbo實戰及源碼分析 436
8.1 Dubbo的四種配置方式 437
8.1.1 XML配置 437
8.1.2 屬性配置 440
8.1.3 API配置 441
8.1.4 註解配置 443
8.2 服務的註冊與發現 446
8.2.1 註冊中心 446
8.2.2 服務暴露 449
8.2.3 引用服務 451
8.3 Dubbo通信協定及序列化探討 455
8.3.1 Dubbo支持的協定 455
8.3.2 協定的配置方法 456
8.3.3 多協定暴露服務 457
8.3.4 Dubbo協定的使用注意事項 458
8.3.5 Dubbo協定的約束 459
8.4 Dubbo中高效的I/O執行緒模型 459
8.4.1 對Dubbo中I/O模型的分析 459
8.4.2 Dubbo中執行緒配置的相關參數 460
8.4.3 在Dubbo執行緒方面踩過的坑 461
8.4.4 對Dubbo中執行緒使用的建議 462
8.5 集群的容錯機制與負載均衡 462
8.5.1 集群容錯機制的原理 462
8.5.2 集群容錯模式的配置方法 464
8.5.3 六種集群容錯模式 464
8.5.4 集群的負載均衡 465
8.6 監控和運維實踐 467
8.6.1 日誌適配 467
8.6.2 監控管理後台 467
8.6.3 服務降級 473
8.6.4 優雅停機 475
8.6.5 灰度發布 475
8.7 Dubbo項目線上案例解析 477
8.7.1 線上問題的通用解決方案 477
8.7.2 耗時服務耗盡了執行緒池的案例 480
8.7.3 容錯重試機制引發服務雪崩的案例 481
8.8 深入剖析Dubbo源碼及其實現 483
8.8.1 Dubbo的總體架構設計 483
8.8.2 配置檔案 486
8.8.3 Dubbo的核心RPC 488
8.8.4 Dubbo巧妙的URL匯流排設計 491
8.8.5 Dubbo的擴展點載入SPI 492
8.8.6 Dubbo服務暴露的過程 493
8.8.7 服務引用 502
8.8.8 集群容錯和負載均衡 503
8.8.9 集群容錯 504
8.8.10 負載均衡 509
第9章 高性能網路中間件 512
9.1 TCP/UDP的核心原理及本質探索 513
9.1.1 網路模型 513
9.1.2 UDP、IP及其未解決的問題 515
9.1.3 TCP詳解 519
9.1.4 是否可以用UDP代替TCP 527
9.1.5 網路通信的不可靠性討論 529
9.2 網路測試優秀實踐 530
9.2.1 網路測試的關鍵點 530
9.2.2 那些必不可少的網路測試工具 532
9.2.3 典型的測試報告 539
9.3 高性能網路框架的設計與實現 544
9.3.1 對代理功能的測試及分析 545
9.3.2 網路中間件的使用介紹 549
9.3.3 記憶體和快取的最佳化 551
9.3.4 快速解析流數據 554

作者簡介

李艷鵬
“雲時代架構”技術社區創始人,著有《分散式服務架構:原理、設計與實戰》,現任某知名支付平台架構組負責人,曾在花旗銀行、甲骨文、路透社、新浪微博等大型IT網際網路公司擔任技術負責人和架構師,現專注於大規模高並發的線上和線下支付平台的套用架構和技術架構的規劃與落地,負責交易、支付、渠道、出款、風控、對賬等核心支付系統的設計與實現,在移動支付、聚合支付、合規賬戶、掃碼支付、標記化支付等業務場景上有產品套用架構規劃與落地的實踐經驗。
楊彪
現任遊戲創業公司技術總監及合伙人,“雲時代架構”技術社區合夥創始人,CSDN達人課講師,著有《分散式服務架構:原理、設計與實戰》。在網際網路和遊戲行業有近十年工作經驗,曾在酷我音樂盒、人人遊戲和掌趣科技等上市公司擔任核心研發職位,在網際網路公司做過日活躍用戶量達千萬的項目,也在遊戲公司做過多款月流水千萬以上的遊戲。
李海亮
現任某網際網路公司搜尋研發經理,有近十年網際網路公司的搜尋及搜尋相關的研發經驗
賈博岩
現任某支付公司高級開發工程師,專注於支付系統領域的開發,例如商戶入網、商戶對外出款等業務。標準90後,喜歡鑽研技術,維護個人簡書部落格“賈博岩”。
劉淏
現任某網際網路公司技術專家,長期在外企從事技術經理和架構工作,對資料庫套用及搜尋引擎套用有很深入的理解和實踐;有大型數據服務集群的架構調優及運維經驗;精通性能問題的解決與調優,以及高性能中間件的編寫。目前主要研究業務數據自動化框架及其實現。

相關詞條

熱門詞條

聯絡我們