編輯推薦
√ 雲時代架構系列經典!重磅級架構書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
精彩節摘
推薦序一
從傳統網際網路到移動網際網路再到物聯網,中國乃至全球的網際網路技術在近十年得到了高速發展。作為架構師,我們非常樂意把這些技術傳播出去,讓更多的人享受網際網路技術的紅利,讓技術拓展商業的邊界。阿里巴巴的雙11技術已經越來越成熟,因為阿里巴巴已經逐步具備了基於雲的計算能力,可以輕鬆應對各種業務壓力。
本書的內容包括快取分片、訊息佇列框架、資料庫分庫分表、分散式發號器、大數據查詢系統、分散式定時調度任務系統、微服務和RPC等;並配備了4個開箱即用的開源項目,包括分庫分表框架dbsplit、專業的發號器vesta、訊息佇列框架kclient和快取分片的redic,每個項目都是獨立的網際網路高並發框架,是構建網際網路級項目的重要組件。本書對行業內許多流行的開源項目也有很多介紹,讀者可以在其中學到平台架構設計的方方面面,也可以了解開源項目在構思和實現方面的優秀實踐。
網際網路的技術核心其實源於分散式,這是網際網路具備高性能、高並發特性的基礎,掌握這些核心內容後,你會發現駕馭技術變得如此輕鬆!希望艷鵬的這本書可以帶領大家掌握分散式的精髓,這本書非常棒!也感謝艷鵬邀請我為本書作序!
技術的世界是如此美妙,作為一名深耕架構的技術人,我由衷地希望有更多的人加入,一起為中國的技術添磚加瓦!
焦英俊
未達科技CEO、原阿里巴巴中文站首席架構師
推薦序二
近十年來,網際網路服務在社交網路、搜尋、電商、O2O、視頻、移動和雲計算等領域呈現了井噴式發展,伴隨而來的是數千萬的日訂單量、數億的日活躍用戶、數百億的日訊息傳送量等海量的業務規模。支撐這些海量的業務規模的則是基於廉價伺服器集群的高可用、可伸縮的分散式網際網路技術。
本書以可伸縮服務架構為重點,從理論基礎、架構設計、一線行業的實踐經驗和代碼實現細節等方面,系統化地介紹了分散式網際網路的高可用、可伸縮技術的核心要點,是一本兼具深度和廣度的技術參考書。
雖然本書的主題是“架構”,但是這並不影響本書的易讀性,它比大多數同類書都要講得透徹、明白,也適合有想法、有目標的國中級開發人員閱讀。分庫分表、Dubbo源碼解析等方面的內容,更可以幫助高級技術人員提升自己的技術實力,以及發揮更大的價值。
架構是在長期的生產活動中經過深度思考所積累下來的優秀實踐和可復用的合理抽象,希望你不要錯過本書的精彩內容。
楊延峰
開心網副總裁
推薦序三
楊彪兄弟找我為本書寫序,我欣然從命。我閱讀了這本佳作的若干個章節,發現它有幾個特點:緊扣常見的問題域;結合了開源產品;代碼很講究。這裡,我想談一談開源與寫作的關係,因為我覺得這就是一場修行。
什麼是開源?我的粗淺理解就是,開源就是開源產品,是開放了原始碼的產品。我從業16年,用過不少開源產品,但發現被廣泛使用的項目並不都擁有好的代碼和充分的測試用例,可見知易行難。可喜的是,國人的開源產品在逐漸增多,也有不少好作品出現,艷鵬的vesta-id-generator解決的就是分散式系統中常見的ID生成問題。
古人談學習有“眼到”、“手到”、“心到”之說。
“眼到”指的是閱讀,但閱讀面廣並不見得知識就是自己的,例如一個早晚聽張靚穎歌曲的冬粉不見得就能發出海豚音。
“手到”指的是要不斷練習,當然,這並不是指簡單、重複地練習。佛羅里達州立大學心理學家K. Anders Ericsson首次提出了“刻意練習”的概念,該練習方法的核心假設是:專家級水平是逐漸練出來的,而有效進步的關鍵在於找到一系列小任務讓受訓者按順序完成,這些小任務必須是受訓者正好不會做但又可以學習和掌握的。
我認為,“心到”的一個環節是寫作。寫作能幫我們把脈絡梳理得更通暢。從自己懂,到給別人講明白,再到寫出來且別人還能明白,是進階的關係。
所以,從項目產品實踐,到開源,再到寫作,就是一場修行。修行是外在的表現、是與同行交流、是與世界對話;修行也是內觀,是收穫若干思想的結晶、汲取若干靈感的泉水、沉澱若干系統的對白,在其中收穫更多的就是作者自己。
開卷有益,願讀者也能在閱讀和實踐上收穫知與行的快樂!
於君澤
螞蟻金服高級技術專家
作者簡介
李艷鵬
“雲時代架構”技術社區創始人,著有《分散式服務架構:原理、設計與實戰》,現任某知名支付平台架構組負責人,曾在花旗銀行、甲骨文、路透社、新浪微博等大型IT網際網路公司擔任技術負責人和架構師,現專注於大規模高並發的線上和線下支付平台的套用架構和技術架構的規劃與落地,負責交易、支付、渠道、出款、風控、對賬等核心支付系統的設計與實現,在移動支付、聚合支付、合規賬戶、掃碼支付、標記化支付等業務場景上有產品套用架構規劃與落地的實踐經驗。
楊彪
現任遊戲創業公司技術總監及合伙人,“雲時代架構”技術社區合夥創始人,CSDN達人課講師,著有《分散式服務架構:原理、設計與實戰》。在網際網路和遊戲行業有近十年工作經驗,曾在酷我音樂盒、人人遊戲和掌趣科技等上市公司擔任核心研發職位,在網際網路公司做過日活躍用戶量達千萬的項目,也在遊戲公司做過多款月流水千萬以上的遊戲。
李海亮
現任某網際網路公司搜尋研發經理,有近十年網際網路公司的搜尋及搜尋相關的研發經驗
賈博岩
現任某支付公司高級開發工程師,專注於支付系統領域的開發,例如商戶入網、商戶對外出款等業務。標準90後,喜歡鑽研技術,維護個人簡書部落格“賈博岩”。
劉淏
現任某網際網路公司技術專家,長期在外企從事技術經理和架構工作,對資料庫套用及搜尋引擎套用有很深入的理解和實踐;有大型數據服務集群的架構調優及運維經驗;精通性能問題的解決與調優,以及高性能中間件的編寫。目前主要研究業務數據自動化框架及其實現。
媒體評論
如何實現可伸縮架構,是網際網路套用面臨業務的高速發展時亟須解決的問題,而可伸縮性和高可用性往往是穩定性設計的基石。諸多國外優秀書籍都偏於講解實踐指導原則,讀者在面臨具體場景時仍然難得其法。因此我在兩年前召集了幾位志同道合的朋友編寫了《深入分散式快取》,期望能貫通從原理到實踐的內容。更可喜的是,艷鵬和楊彪諸君更進一步地呈現了滿滿都是案例及乾貨的《可伸縮服務架構:框架與中間件》,本書從分散式發號器、訊息佇列框架、資料庫分庫分表、快取、Elasticsearch、分散式調度任務、RPC服務、Dubbo、高性能網路代理中間件等方面,全面破解了可伸縮服務架構的奧秘,並與《分散式服務架構:原理、設計與實戰》相結合,闡述了網際網路高可用、高性能、高並發、可伸縮、可擴展、敏捷性等核心要點,值得廣大從業人員閱讀。
螞蟻金服高級技術專家 於君澤
分散式系統的設計是一門藝術,作者揮舞著六色畫筆譜寫了上下兩卷:《分散式服務架構:原理、設計與實戰》和《可伸縮服務架構:框架與中間件》,在這兩卷書里,一致性、高性能、高可用、可伸縮、可擴展、敏捷性等精彩內容皆信手拈來。我在多年前和楊彪相識,工作時一起調Bug,休閒時一起讀書,今又與艷鵬結識,如今他們已經成為技術的布道者。
在技術的道路上前行,冷暖自知,卻能收穫內心的平和。願這兩卷書能夠感召更多的朋友,共同享受技術的藝術,享受成長的富足。
BitTiger Co-CEO、北大博士 馮沁原
本書承接《分散式服務架構:原理、設計與實戰》一書的主線,繼續深入講解分散式服務架構,對快取、訊息佇列、分庫分表、定時調用系統、RPC框架等進行了落地與實戰講解,讀者可以通過本書實現分散式服務的高效落地。
暢銷書《億級流量網站架構核心技術》作者 開濤
在艷鵬和楊彪合著的《分散式服務架構:原理、設計與實戰》中,我看到了分散式理論與實踐相結合的全面總結,又從本書中看到了非常實用的分庫分表方案、快取分片方案、訊息佇列框架、發號器、RPC等網際網路架構的重要知識,並在一些內容上開源了公司內部屢試不爽的網際網路框架。通過閱讀本書,能夠更好地提升自己的技術能力,還能夠以這些框架為基礎搭建適合自己公司業務的輕量級框架,輕而易舉地完成業務的功能需求和非功能質量需求。這是一本每個網際網路技術人員都應該通讀的優秀參考書籍。
開心網副總裁 楊延峰
本書以高可用服務架構為主線,側重於講解高可用架構設計的核心要點:可伸縮和可擴展,從資料庫分片、快取分片、訊息佇列框架、大數據查詢系統、分散式定時任務調度系統、微服務RPC等層面,詳細講解了如何設計可伸縮和可擴展的框架,可見作者對分散式系統的理解和實踐是深入骨髓的。希望每一位網際網路架構師、開發者、技術專家、技術總監都通過本書獲取精華,並將其套用到項目實踐中,為項目的順利進行保駕護航。
螞蟻金服技術專家 張義明
能講明白分散式架構並不容易,本書卻做到了。在本書中,不論是對需求場景的剖析,還是對可行方案的仔細研磨及實現,都體現了架構師的專業素養和精益求精。這是一本分散式服務架構方面的好書。
皇包車CTO 賀偉
本書針對分散式服務架構中常用的快取分片、資料庫分庫分表、訊息佇列、任務調度中間件、RPC、大數據查詢系統等技術提供了典型的設計和實現,對我們設計和實現自己的網際網路業務系統有重要的參考價值。
《程式設計師的成長課》作者 安曉輝
網際網路業務是爆發式的,其帶來的流量壓力和對計算能力的要求也是不均衡的,利用廉價的計算機構建分散式計算環境已成為當下的選擇。然而,可伸縮技術在帶來高性價比的同時,也帶來技術上的變革和挑戰。大家可以從本書提供的分庫分表、快取分片、訊息佇列框架、發號器等方案中吸取精髓,快速形成自己的認知,並在工作中積累經驗和提升技能,以更好地為公司和團隊效力。
企辦信息技術有限公司CTO、雲像數位技術顧問 馬星光
隨著企業業務量的增加,流量洪峰在不斷挑戰著業務系統的承載能力,設計高並發、可伸縮的系統已成為軟體架構師的緊迫任務,而分散式、可伸縮的架構模式已成為抵禦洪峰的有效方案之一。本書匯集了作者在多年核心繫統開發中的架構及實踐經驗,以理論與案例相結合的方式展現了分散式系統設計、技術選型、可伸縮架構的設計、框架實現等方面的優秀實踐。不管你是在從0到1構建系統,還是在尋找服務化治理的正確方向,本書都可以幫你解惑。
菜鳥網路技術專家 高春東
在《分散式服務架構:原理、設計與實戰》中,作者通過多年的網際網路架構經驗,總結了服務化的背景和技術演進,提出了網際網路項目技術評審的方法論和提綱,並給出了對真實的線上項目進行性能和容量評估的全過程,可幫助大家輕鬆地設計大規模、高並發的服務化系統,保證服務化項目按照既定的目標進行實施與落地,並保證系統的穩定性、可用性和高性能,等等。本書延續了《分散式服務架構:原理、設計與實戰》的主線,繼續講解在分散式系統設計中非常重要的可伸縮架構設計模式,對資料庫分庫分表、快取分片、訊息佇列處理框架、大數據查詢系統、分散式定時任務系統、微服務和RPC等均有詳細講解,並開源了4個開箱即用的框架級項目,大家也可以以其為基礎,開發適合自己的業務的分散式系統。
愛奇藝高級技術經理 黃福偉
在本書中,作者將理論與實踐相結合,對分庫分表、快取、訊息佇列、大數據查詢及分散式任務調度等的設計與使用進行了深入分析與講解。本書內容豐富,可作為開發利器,值得參考。
金山雲高級開發工程師 李雪冰
金融系統對高並發服務的一致性、高性能及高可用有著強烈的訴求,艷鵬及他的寫作團隊都是一線資深架構師,不僅有豐富的實踐經驗,還有深層次的理論基礎。本書對高可用架構進行了深入講解,使讀者能夠從體系化的角度認識和思考金融系統的本質,其中的方法論是經過實踐檢驗的,更能在工作中應對特定領域的局部問題。
某金控集團總監 王志成
我和本書作者楊彪在多年前相識於工作中,他的踏實、認真給我留下了深刻的印象,後來因為《分散式服務架構:原理、設計與實戰》,我又認識了艷鵬,他們的勤奮和刻苦讓我非常佩服,也讓我非常期待他們的新書。讀書如讀人,本書不僅展現了可伸縮架構的技術,更展現了作者孜孜不倦的精神。希望讀者不僅能從書中學到網際網路分散式架構的知識,更能學到不畏艱辛、知難而上的精神。
北大博士 賈濤
前言
本書的上冊《分散式服務架構:原理、設計與實戰》詳細介紹了如何解決線上高並發服務的一致性、高性能、高可用、敏捷等痛點。本書延續了高可用服務架構的主題,側重於講解高可用架構設計的核心要點:可伸縮和可擴展,從套用層、資料庫、快取、訊息佇列、大數據查詢系統、分散式定時任務調度系統、微服務等層面詳細講解如何設計可伸縮、可擴展的框架,並給出在各個領域解決特定問題的方法論和實踐總結。隨著本書的出版,我們還開源了4個行之有效的網際網路可伸縮框架,包括資料庫分庫分表dbsplit、快取分片redic、專業的發號器vesta和訊息佇列處理機框架kclient,每個框架都開箱即用,且都是獨立的網際網路高並發框架,是構建網際網路級項目的重要組件,也可以作為學習網際網路平台化框架搭建的素材,更可以作為開發開源項目的示例。
在寫作本書的過程中,我們的多位作者根據自身在網際網路大規模、高並發項目中遇到的實際問題,總結了切實有效的方法論和解決方案,最後沉澱出一套適合高並發服務的優秀開源技術框架,其中的方法論可以幫助讀者解決實際問題,開源框架可以幫助讀者快速搭建可伸縮的網際網路高並發項目。無論是對於網際網路的或者傳統的軟體工程師、測試工程師、架構師,還是對於深耕於IT的其他管理人員,本書都有很強的借鑑性和參考價值,是值得每個技術人員閱讀的架構級技術書。
感謝我的作者團隊,楊彪、海亮、劉淏、博岩等無數次地與我一起通宵達旦地趕稿子;感謝汪勤平、史先斌、潘運鵬、張誠、高亮、李繼、周偉、曲源等同學在編輯階段為我閱稿,並提出專業意見;感謝IT行業內的重量級大咖焦英俊、楊延峰、右軍(於君澤)在百忙之中抽出時間為本書作序;也感謝大作者開濤和安曉輝等同學為本書寫評語;感謝各個行業的重量級朋友們對本書的大力支持,包括:馮沁原、賀偉、張義明、馬星光、高春東、黃福偉、李雪冰、付紅雷等;更感謝加入雲時代架構技術社區的小夥伴們的持續關注和支持!
在寫書的過程中,我們每個人都兢兢業業、勤勤懇懇,每增加一部分內容,都互相審核,儘量保證書中案例的準確性和時效性,確保能為讀者帶來很有價值的設計經驗,並且我們想做到“授人以漁”,而不是“授人以魚”。在寫作的過程中有辛苦、有快樂、有價值、有成果,我們希望能持續地為讀者帶來經驗、解決方案、架構思路和快樂。
感謝電子工業出版社博文視點張國霞編輯的認真態度和辛勤工作,本書在經過作者們及國霞編輯大半年的努力後最終順利出版。
最後,感謝我的妻子和父母在我寫書期間對我的全力支持和幫助。