分布式系統常用技術及案例分析(第2版)( 簡體 字) | |
作者:柳偉衛 | 類別:1. -> 程式設計 -> 綜合 |
出版社:電子工業出版社 | 3dWoo書號: 50435 詢問書籍請說出此書號! 有庫存 NT售價: 495 元 |
出版日:12/1/2018 | |
頁數:556 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121356773 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章 分布式系統基礎知識
1.1 概述 1.1.1 什么是分布式系統 1.1.2 集中式系統與分布式系統 1.1.3 如何設計分布式系統 1.1.4 分布式系統所面臨的挑戰 1.2 線程 1.2.1 什么是線程 1.2.2 進程和線程 1.2.3 線程和纖程 1.2.4 編程語言中的線程對象 1.2.5 SimpleThreads示例 1.3 通信 1.3.1 網絡I/O模型的演進 1.3.2 遠程過程調用(RPC) 1.3.3 面向消息的通信 1.4 一致性 1.4.1 以數據為中心的一致性模型 1.4.2 以客戶為中心的一致性 1.5 容錯性 1.5.1 基本概念 1.5.2 故障分類 1.5.3 使用冗余來掩蓋故障 1.5.4 分布式提交 1.6 CAP理論 1.6.1 什么是CAP理論 1.6.2 為什么CAP只能三選二 1.6.3 CAP常見模型 1.6.4 CAP的意義 1.6.5 CAP最新發展 1.7 安全性 1.7.1 基本概念 1.7.2 加密算法 1.7.3 安全通道 1.7.4 訪問控制 1.8 并發 1.8.1 線程與并發 1.8.2 并發與并行 1.8.3 并發帶來的風險 1.8.4 同步(Synchronization) 1.8.5 原子訪問(Atomic Access) 1.8.6 無鎖化設計提升并發能力 1.8.7 緩存提升并發能力 1.8.8 更細顆粒度的并發單元 第2章 分布式系統架構體系 2.1 基于對象的體系結構 2.1.1 分布式對象 2.1.2 Java RMI 2.2 面向服務的架構(SOA) 2.2.1 SOA的基本概念 2.2.2 基于Web Services的SOA 2.2.3 SOA的演變 2.3 REST風格的架構 2.3.1 什么是REST 2.3.2 REST有哪些特征 2.3.3 Java實現REST的例子 2.3.4 REST API最佳實踐 2.4 微服務架構(MSA) 2.4.1 什么是MSA 2.4.2 MSA與SOA 2.4.3 何時采用MSA 2.4.4 如何構建微服務 2.5 容器技術 2.5.1 虛擬化技術 2.5.2 容器與虛擬機 2.5.3 基于容器的持續部署 2.6 Serverless架構 2.6.1 什么是Serverless架構 2.6.2 Serverless典型的應用場景 2.6.3 Serverless架構原則 2.6.4 例子:使用Serverless實現游戲全球同服 第3章 分布式消息服務 3.1 分布式消息概述 3.1.1 基本概念 3.1.2 使用場景 3.1.3 常用技術 3.2 Apache ActiveMQ 3.2.1 例子:producer-consumer 3.2.2 例子:使用JMX來監控ActiveMQ 3.2.3 例子:使用Java實現producer-consumer 3.3 RabbitMQ 3.3.1 例子:Work Queues 3.3.2 例子:Publish/Subscribe 3.3.3 例子:Routing 3.3.4 例子:Topics 3.3.5 例子:RPC 3.4 Apache RocketMQ 3.4.1 例子:使用Java實現producer-consumer 3.4.2 RocketMQ最佳實踐 3.5 Apache Kafka 3.5.1 Apache Kafka的核心概念 3.5.2 Apache Kafka的使用場景 3.6 實戰:基于JMS的消息發送和接收 3.6.1 項目概述 3.6.2 項目配置 3.6.3 編碼實現 3.6.4 運行 第4章 分布式計算 4.1 分布式計算概述 4.1.1 使用場景 4.1.2 常用技術 4.2 MapReduce 4.2.1 MapReduce簡介 4.2.2 MapReduce的編程模型 4.2.3 MapReduce接口實現 4.2.4 MapReduce的使用技巧 4.3 Apache Hadoop 4.3.1 Apache Hadoop的核心組件 4.3.2 例子:詞頻統計WordCount程序 4.4 Spark 4.4.1 Spark簡介 4.4.2 Spark與Hadoop的關系 4.4.3 Spark 2.0的新特性 4.4.4 Spark集群模式 4.5 Mesos 4.5.1 Mesos簡介 4.5.2 設計高可用的Mesos framework 4.6 實戰:基于Spark的詞頻統計 4.6.1 項目概述 4.6.2 項目配置 4.6.3 編碼實現 4.6.4 運行 第5章 分布式存儲 5.1 分布式存儲概述 5.1.1 使用場景 5.1.2 常用技術 5.2 Bigtable 5.2.1 Bigtable的數據模型 5.2.2 Bigtable的實現 5.2.3 Bigtable的性能優化 5.3 Apache HBase 5.3.1 Apache HBase的基本概念 5.3.2 Apache HBase的架構 5.4 Apache Cassandra 5.4.1 Apache Cassandra簡介 5.4.2 Apache Cassandra的應用場景 5.4.3 Apache Cassandra的架構和數據模型 5.4.4 用于配置Apache Cassandra的核心組件 5.5 Memcached 5.5.1 Memcached簡介 5.5.2 Memcached的架構 5.5.3 Memcached客戶端 5.6 Redis 5.6.1 Redis簡介 5.6.2 Redis的下載與簡單使用 5.6.3 Redis的數據類型及抽象 5.7 MongoDB 5.7.1 MongoDB簡介 5.7.2 MongoDB核心概念 5.7.3 MongoDB的數據模型 5.7.4 示例:Java連接MongoDB 5.8 實戰:基于Redis的分布式鎖 5.8.1 項目概述 5.8.2 項目配置 5.8.3 編碼實現 5.8.4 運行 第6章 分布式監控 6.1 分布式監控概述 6.1.1 使用場景 6.1.2 常用技術 6.2 Nagios 6.2.1 Nagios監控 6.2.2 Nagios插件 6.3 Zabbix 6.3.1 Zabbix對容器的支持 6.3.2 Zabbix的基本概念 6.4 Consul 6.4.1 Consul架構 6.4.2 Consul agent 6.5 ZooKeeper 6.5.1 ZooKeeper簡介 6.5.2 ZooKeeper內部工作原理 6.5.3 例子:ZooKeeper實現barrier和producer-consumer queue 6.6 實戰:基于ZooKeeper的服務注冊和發現 6.6.1 項目概述 6.6.2 項目配置 6.6.3 編碼實現 6.6.4 運行 第7章 分布式版本控制系統 7.1 分布式版本控制系統概述 7.1.1 集中式與分布式 7.1.2 分布式版本控制系統的核心概念 7.2 Bazaar 7.2.1 Bazaar的核心概念 7.2.2 Bazaar的使用 7.3 Mercurial 7.3.1 Mercurial的核心概念 7.3.2 Mercurial的使用 7.4 Git 7.4.1 Git的基礎概念 7.4.2 Git的使用 7.5 Git Flow—團隊協作最佳實踐 7.5.1 分支定義 7.5.2 新功能開發工作流 7.5.3 Bug修復工作流 7.5.4 版本發布工作流 第8章 RESTful API、微服務及容器技術 8.1 Jersey 8.1.1 Jersey簡介 8.1.2 Jersey的模塊和依賴 8.1.3 JAX-RS核心概念 8.1.4 例子:用SSE構建實時Web應用 8.2 Spring Boot 8.2.1 Spring Boot簡介 8.2.2 Spring Boot的安裝 8.2.3 Spring Boot的使用 8.2.4 Spring Boot的屬性與配置 8.3 Docker 8.3.1 Docker簡介 8.3.2 Docker的核心組成、架構及工作原理 8.3.3 Docker的使用 8.4 實戰:基于Docker構建、運行、發布微服務 8.4.1 編寫微服務 8.4.2 微服務容器化 8.4.3 構建Docker image 8.4.4 運行image 8.4.5 訪問應用 8.4.6 發布微服務 本書分兩部分,第一部分主要介紹分布式系統基礎理論知識,總結一些在設計分布式系統時需要考慮的范式、知識點以及可能會面臨的問題,其中包括線程、通信、一致性、容錯性、CAP理論、安全性和并發等相關內容;同時講述分布式系統的常見架構體系,其中也包括最近比較火的RESTful風格架構、微服務、容器技術等。第二部分主要列舉了在分布式系統應用中經常用到的一些主流技術,并介紹這些技術的作用和用法;這些技術涵蓋了分布式消息服務、分布式計算、分布式存儲、分布式監控系統、分布式版本控制、RESTful、微服務、容器等領域的內容。
再 版 序
時光荏苒,歲月匆匆,距離《分布式系統常用技術及案例分析》第1版出版已經一載有余。熱心的讀者對于本書也投以了極大的關注,提了很多中肯的建議。對于這些建議,不管褒貶,一并全收,于是才有了第2版的出版。 對于技術型書籍的創作,筆者傾向于采用當今軟件開發主流的方式—敏捷。敏捷寫作打通了編寫、校稿、出版、發行的整個流程,讓知識可以在第一時間呈現給讀者。讀者在閱讀本書之后,也可以及時對書中的內容進行反饋,從而幫助作者完善書中內容,最終形成良好的反饋閉環。第2版所更新的內容,希望正是讀者所期待的。 第2版修改篇幅較大,修改內容大致包括以下幾個方面: (1)刪除軟件安裝等比較簡單的內容。 (2)每章的開頭新增“概述”,讓各個章節的技術點可以關聯起來。 (3)每章增加“實戰”案例,讓技術點更具可操作性。 (4)修改第1版中的措辭、插圖。 完整的修改內容,讀者可以掃描封面上的二維碼,參閱本書的在線文檔“本書第1版與第2版的差異對比”。 柳偉衛 前言 寫作背景 我一直想寫一本關于分布式系統的書。一方面想把個人工作中涉及的分布式技術做一下總結,另一方面想把個人多年的經驗分享給廣大的讀者朋友。由于我的開發工作大都以Java為主,所以一開始設想的主題是“分布式Java”,書也以開源方式發布在互聯網上(網址為https://github.com/waylau/distributed-java)。 后來,陳曉猛編輯看到了這本開源書,以及我關于分布式系統方面的博文,問我是否有興趣出版分布式相關題材的圖書。當然,書的內容不僅僅是“分布式Java”。 對于出書一事,我猶豫良久。首先,本身工作挺忙,實在無暇顧及其他;其次,雖然我之前寫過超過一打的書籍(https://waylau.com/books/),但多是開源電子書,時間、內容方面自然不會有太多約束,幾乎是“想寫就寫,沒有時間就不寫”,這個跟正式出版還是存在比較大的差異的;最后,這本書涉及面相對較廣,需要查閱大量資料,實在是太耗費精力。 但陳曉猛編輯還是鼓勵我去做這個事情。思索再三,最終我答應了。當然,最后這本書還是在規定時間內完成了。它幾乎耗盡了我寫作期間所有的業余和休息時間。 “不積跬步,無以至千里;不積小流,無以成江海。”雖然整本書從構思到編寫完成的時間不足一年,但書中的大部分知識點,都是我在多年的學習、工作中積累下來的。之所以能夠實現快速寫作,一方面是做了比較嚴格的時間管理,另一方面得益于我多年堅持寫博客和開源書的習慣。 內容介紹 本書為兩部分,即分布式系統基礎理論和分布式系統常用技術。第一部分為第1章和第2章,主要介紹分布式系統基礎理論知識,總結一些在設計分布式系統時需要考慮的范式、知識點及可能會面臨的問題。第二部分為第3章到第8章,主要列舉了在分布式系統應用中的一些主流技術,并介紹這些技術的作用和用法。 第1章介紹分布式系統基礎理論知識,總結一些在設計分布式系統時需要考慮的范式、知識點及可能會面臨的問題,包括線程、通信、一致性、容錯性、CAP理論、安全性和并發等相關內容。 第2章詳細介紹分布式系統的架構體系,包括傳統的基于對象的體系結構、SOA。 第3章介紹常用的分布式消息服務框架,包括Apache ActiveMQ、Apache RabbitMQ、Apache RocketMQ、Apache Kafka等。 第4章介紹分布式計算理論和應用框架方面的內容,包括MapReduce、Apache Hadoop、Apache Spark、Apache Mesos 等。 第5章介紹分布式存儲理論和應用框架方面的內容,包括Bigtable、Apache HBase、Apache Cassandra、Memcached、Redis、MongoDB等。 第6章介紹分布式監控方面常用的技術,包括Nagios、Zabbix、Consul、ZooKeeper等。 第7章介紹常用的分布式版本控制工具,包括Bazaar、Mercurial、Git等。 第8章介紹RESTful API、微服務及容器相關的技術,著重介紹Jersey、Spring Boot、Docker等技術的應用。 源代碼 本書提供源代碼下載,下載地址為https://github.com/waylau/distributed-systems-technologies- and-cases-analysis。 勘誤和交流 本書如有勘誤,會在https://github.com/waylau/distributed-systems-technologies-and-cases- analysis上發布。由于筆者能力有限,時間倉促,書中難免有錯漏,歡迎讀者批評指正。讀者也可以到博文視點官網的本書頁面進行交流(www.broadview.com.cn/00000)。 您也可以直接聯系我: 博客:https://waylau.com 郵箱:waylau521@gmail.com 微博:http://weibo.com/waylau521 GitHub:https://github.com/waylau 致謝 首先,感謝電子工業出版社博文視點公司的陳曉猛編輯,是您鼓勵我將本書付諸成冊,并在我寫作過程中審閱了大量稿件,給予我很多指導和幫助。感謝工作在幕后的電子工業出版社評審團隊對于本書在校對、排版、審核、封面設計、錯誤改進方面所給予的幫助,使本書得以順利出版發行。 其次,感謝在我十幾年求學生涯中教育過我的所有老師,是你們將知識和學習方法傳遞給了我。感謝我曾經工作過的公司和單位,感謝和我一起共事過的同事和戰友,你們的優秀一直是我追逐的目標,你們所給予的壓力正是我不斷改進的動力。 感謝我的父母、妻子Funny和兩個女兒。由于撰寫本書,我犧牲了很多陪伴家人的時間。感謝你們對于我工作的理解和支持。 最后,特別要感謝這個時代,互聯網讓所有人可以公平地享受這個時代的成果。感謝那些為計算機、互聯網做出貢獻的先驅,是你們讓我可以站在更高的“肩膀”上!感謝那些為本書提供靈感的佳作,包括《分布式系統原理與范式》、UNIX Network Programming、Enterprise SOA、MapReduce Design Patterns、Hadoop: The Definitive Guide Learning Hbase、Advanced Analytics with Spark、Pro Git、Docker in Action、《淘寶技術這十年》、Hatching Twitter,等等,詳細的書單可以參閱本書在線資源中的“參考文獻”部分。 柳偉衛 |