易燃物匯聚 YouTube 有聲書與書評
微服務實戰(Dubbox +Spring Boot+Docker) 封面

微服務實戰(Dubbox +Spring Boot+Docker)

肖睿 吳剛山 黃興

492人在讀
7.6萬字總字數
¥18.5定價

內容簡介

在這個凡事皆互聯的時代,越來越多的人和物成爲互聯網上的節點,不斷擴充着互聯網這張大網的邊界。節點即價值,更多的節點意味着更大的價值。那麼如何去承載更多的節點就成爲IT從業人士首要解決的問題。本書圍繞秒殺搶購應用場景,對當下流行的Dubbox+SpringBoot+Docker微服務架構解決方案進行講解。主要內容包括微服務架構介紹、Dubbox原理及運用、使用SpringBoot實現微服務、使用ActiveMQ+Redis承載高併發流量、使用ActiveMQ實現分佈式事務、分佈式下的第三方接入等。本書以項目爲驅動,引領讀者對相關技術進行實踐性學習。同時爲了提升讀者對相關技術的實際運用能力,本書將實際開發經驗注入到整個項目開發週期中,使用目前較爲流行的Dubbox+SpringBoot+Docker微服務架構實現“雙11”搶購項目。爲保證最優學習效果,本書配以完善的學習資料和支持服務,包括視頻教程、案例素材下載、學習交流社區、討論組等終身學習內容,爲開發者帶來全方位的學習體驗。

讀者書評

★★★☆☆

《微服務實戰(Dubbox + Spring Boot + Docker)》 第一章:架構設計 (一)業務場景與需求分析 1. 業務場景介紹 “雙11”搶購項目是基於真實搶購需求的解決方案,用戶操作流程包括登錄項目首頁、點擊搶購商品,庫存充足時搶購成功生成訂單並鎖定庫存,用戶需在規定時間內支付訂單,否則釋放庫存。 2. 業務需求分析 高併發:搶購時可能有大量用戶同時在線,如小米手機搶購某時刻可能超十萬用戶同時搶購,用戶訪問量龐大。 單用戶多次操作:用戶爲增加搶到商品概率常多次點擊搶購按鈕,系統需判斷用戶是否已搶購成功。 保證搶購順序:必須按照用戶點擊操作順序保證先來後到,實現先到先得。 (二)架構設計內容 1. 業務架構設計 項目主業務是大量用戶搶購少量商品,業務架構圖涵蓋微信登錄、支付寶支付、搶購等功能,主要業務功能包括用戶業務(登錄、註銷、權限驗證、密碼修改等)、商品業務(查詢、庫存判斷、搶購等)、訂單業務(生成、查詢、取消、支付訂單等)、支付業務(支付寶、微信支付及支付結果處理等)。 2. 應用架構設計 將“雙11”搶購項目業務劃分爲用戶、商品、訂單、支付四個子業務模塊。 3. 技術架構設計 高併發解決方案:採用消息隊列緩存消息降低服務器請求壓力。 消息冪等性解決方案:用Redis分佈式鎖及保存機制記錄用戶操作狀態,保證一個用戶多次重複操作只成功執行一次。 搶購順序解決方案:利用消息隊列的消息排隊機制保證搶購公平性。 4. 部署架構設計 考慮系統高併發需求,使用Docker技術實現分佈式集羣部署項目,如“雙11”搶購項目部署架構圖中涉及PC、H5、APP、Nginx集羣、API、Dubbo協議、ZooKeeper註冊中心、Spring Boot、MyBatis、MySQL、MQ、Redis、Docker等組件,包括用戶和商品等消費者與提供者的相關部署。 第二章:微服務架構 (一)軟件行業與架構分類 1. 軟件行業分類 分爲傳統軟件行業(面向企業開發應用軟件,最終使用者爲企業內部員工,用戶量小、併發考慮少、項目代碼量少、數據量小、採用單體式架構、單個開發團隊、單個服務器部署、運維複雜度低)和互聯網軟件行業(面向廣大互聯網用戶,用戶量大、必須考慮併發、項目代碼量大、海量數據、採用分佈式微服務架構、多個開發團隊、集羣服務器部署、運維複雜度高)。 2. 軟件架構分類 單體式架構:項目所有源碼置於一個總項目中開發、部署和管理,雖可分模塊但源碼同屬一個項目。其存在項目迭代不靈活(代碼多且亂,修改困難易引發風險)、項目組職責權限不清(源碼暴露給所有成員易引發風險)、項目併發配置不靈活(無法針對模塊擴展易造成資源浪費)等問題。 微服務架構:將龐大項目切分,每個模塊獨立成新服務,服務間可分佈式通信。優勢包括項目複雜度降低(分解爲多個可管理服務,易開發、理解和維護)、團隊界限明確(每個服務可由專門團隊完成,開發者可自由選擇技術)、擴展靈活(每個服務可獨立擴展,可按需部署規模和選擇硬件資源)。 (二)微服務架構相關概念 1. Provider和Consumer Provider是提供服務的一方,Consumer是調用服務的一方。爲防止項目互相依賴,一般將提供者和消費者拆分成獨立項目,如“雙11”搶購項目的微服務拆分架構。 2. RPC和RESTful 微服務架構項目間通信方式有RPC(Remote Procedure Call,遠程過程調用,如Dubbo及其升級版Dubbox支持,可像調用本地服務一樣調用其他項目服務)和RESTful(Representational State Transfer,表述性狀態傳遞,參數封裝於URL內部,項目間可採用RESTful風格HTTP方式調用,Spring Cloud及Dubbox均支持)。 3. 分佈式和集羣 分佈式架構按業務功能將系統拆分成獨立子系統(服務),服務可部署在不同機器上,通過RPC或RESTful通信。集羣是一組相互獨立、通過高速網絡互聯的計算機,以單一系統模式管理,多個服務/機器一起提供相同服務,可提高系統性能和擴展性。 (三)微服務架構設計原則與解決方案 1. 設計原則 圍繞業務切分:按業務拆分項目,避免業務交叉和接口實現複雜,如打車應用可拆成乘客、車主、支付服務,各服務業務不同,可獨立維護和擴展。 單一職責:每個服務職責儘可能單一,保證模塊化協作,多個服務搭配完成整體功能。 誰創建,誰負責:對應項目組負責項目創建及維護,開發團隊直接負責項目開發、維護、部署,減少溝通成本。 2. 解決方案 選擇微服務框架:可選擇Dubbo系列(如Dubbo是阿里巴巴開發的高性能開源服務框架,能通過RPC實現服務輸入輸出,可與Spring框架無縫集成,Dubbox爲其升級版)或Spring Cloud系列(基於Spring Boot的一整套微服務框架,提供多種組件)。 根據業務拆分項目:按照設計原則圍繞業務、單一職責進行拆分。 選擇部署策略:如採用Docker虛擬化部署等。 第三章:Docker環境搭建 1. 任務1:瞭解Docker相關概念 Docker是基於LXC技術、用Go語言開發、遵循Apache 2.0協議開源的容器引擎,可將服務器隔離成容器,容器創建和停止快速,資源需求少。與虛擬機不同,其運行架構少了虛擬機系統層和虛擬機操作系統層,通過Docker Daemon基於LXC技術共享宿主機操作系統內核並隔離空間形成容器。 Docker Container(容器)是宿主機隔開的獨立空間,像普通系統一樣操作,使用沙箱機制,相互隔離無性能開銷,不依賴語言和框架,可使服務器像集羣運行。 Docker Image(鏡像)是對某一時刻容器狀態備份,內容構建後不變,可複用和生成更多容器。 Docker Registry(記錄中心)有官方和第三方的,提供常用容器打包的鏡像,方便開發者下載後啓動爲本地容器。 Docker運行原理:Client可從Registry下載鏡像、運行本地鏡像成容器、通過Dockerfile構建新鏡像,這些操作都通過Docker Daemon完成,它是核心。Docker有host、container、none、bridge四種網絡模式,bridge爲默認模式,會分配IP但容器停止重啓可能IP變化,實際工作中常需設置固定IP,且要規劃好網段,同時Docker端口映射可將容器內部端口映射到宿主機實現訪問。Docker集羣可運行相同程序提供相同服務提高負載能力。 2. 任務2:掌握Docker安裝步驟 以Ubuntu 16.04.3爲例,安裝步驟:獲取安裝包並安裝(如使用apt get install y docker.io);啓動Docker後臺服務(sudo service docker start);查看Docker版本(docker version),若顯示版本號則安裝成功,Docker官方還提供CentOS、Windows、MacOS等系統的安裝包及相應支持版本。 3. 任務3:掌握Docker常用命令 鏡像操作命令 查看:docker images查看本地鏡像列表,IMAGE ID是鏡像唯一標識,後續操作常基於此或鏡像名稱。 搜索:docker search鏡像關鍵詞可從Registry搜索鏡像,默認從Docker官方Hub下載,可修改Registry地址。 拉取:docker pull [OPTIONS] NAME[:TAG|@DIGEST]可拉取線上鏡像爲本地鏡像,拉取後可用docker images | grep鏡像關鍵詞查看是否成功。 刪除:docker rmi鏡像ID或鏡像名稱可刪除本地鏡像。 製作:編寫Dockerfile(包含基礎鏡像、創建者信息、文件拷貝、端口監聽等內容)後,執行docker build t鏡像名稱.Dockerfile路徑可生成新鏡像, t指定鏡像名稱,.表示Dockerfile所在路徑。 容器操作命令 生成:docker run d p宿主機端口:容器端口 name容器名稱鏡像名稱可啓動鏡像成容器並設置端口映射和名稱,啓動後可通過宿主機端口訪問容器服務。 查看:docker ps | grep容器關鍵詞查正在運行容器,docker ps a | grep容器關鍵詞查全部容器。 進入:docker exec it容器ID或容器名稱/bin/bash可進入容器內部操作。 退出:在容器內輸入exit可退出。 停止:docker stop容器ID或容器名稱停止運行容器。 啓動:docker start容器ID或容器名稱重新運行已停止容器。 刪除:docker rm容器ID或容器名稱刪除已停止容器(注意與刪除鏡像命令區分)。 複製文件:docker cp宿主機目錄及文件容器名稱:容器目錄可複製宿主機文件到容器內。 設置固定IP:先創建自定義網絡(docker network create subnet = 172.18.0.0/16自定義名稱),啓動容器時指定IP(docker run it d net自定義名稱ip 172.18.0.8 name mytomcat tomcat)。 4. 任務4:瞭解Docker可視化 常見可視化管理工具:DockerUI和Shipyard,可單獨安裝,方便管理鏡像和容器,但具體安裝步驟需查閱相關資料。 5. 任務5:使用Docker搭建項目環境 環境要求:搭建分佈式微服務架構項目的服務器(運行Docker環境),內存最少16GB(DDR3或以上),CPU標準電壓版i5 3470(或以上)4核單線程(雙線程更好),硬盤500GB以上;其他機器內存8GB以上,CPU標準電壓版i5 +雙核 +,硬盤500GB以上。 搭建步驟 安裝Ubuntu系統,設置固定IP,若遠程連接需安裝ssh服務並解決root遠程連接拒絕問題。 安裝Docker和Shipyard。 下載基礎鏡像(如docker pull centos,下載慢可用阿里雲鏡像加速)。 執行初始化腳本創建鏡像(上傳dockerfiles master.zip並解壓,對env 10.1下.sh文件授權,執行./im 1.sh all n,注意腳本基於SSH,遠程連接時不能關閉,若鏡像創建失敗需單獨重新創建,命令爲./im 1.sh鏡像名稱n Dockerfile路徑)。 執行初始化腳本創建容器(./InitContainers 2.sh init,若有問題先刪除容器,修改鏡像後重新執行腳本)。 相關配置和檢查 MySQL:通過Shipyard選擇MySQL容器進入控制檯,執行配置命令(登錄、修改密碼、授權等),若找不到grant命令,需進入容器執行ln s /usr/local/mysql/bin/mysql /usr/bin,配置完成後可通過客戶端遠程訪問,注意需開放3306端口。 Redis:開放6379端口(執行./run.sh redis,即刪除舊容器並啓動新容器開放端口映射),修改Redis.conf文件(bind 127.0.0.1改爲bind 0.0.0.0,protected mode yes改爲protected mode no,去掉requirepass註釋並設置密碼),修改完後通過stop、start命令重啓容器,注意不能用/run.sh redis創建容器以免覆蓋修改內容,若連接提示失敗信息可能是本地代理問題,需關閉IE瀏覽器代理後重新測試。 測試服務:容器創建成功後,在宿主機hosts裏配置域名(如192.168.9.151對應相關域名),在宿主機瀏覽器訪問域名測試Nginx穩定性,訪問http://mq.local.com驗證ActiveMQ是否正常啓動,若不能訪問,進入ActiveMQ容器目錄執行/activemq start,啓動成功後再訪問,還可查看註冊的提供者和消費者(訪問http://da.local.com/governance/providers)。 生成鏡像:若容器有數據增加或配置更改,可用commit命令生成新鏡像(如使用Shipyard提交),新建鏡像名稱可加日期信息方便定位版本(尤其是數據庫鏡像)。 發佈服務 上傳腳本和Jar包(provider和consumer服務的Jar包及相關腳本)到服務器。 執行腳本,先切換到腳本所在目錄執行./createContainer.sh創建容器,然後修改deploy provider.sh裏的路徑爲上傳地址後執行,最後執行/deploy.consumer.sh,注意腳本要按順序執行,先啓動提供者,在Dubbo管理界面查看服務註冊成功後再創建消費者,服務啓動後可通過配置的域名訪問前端頁面(如http://192.168.9.151:8888)。 第四章:Spring Boot初體驗 1. 任務1:掌握Spring Boot的定義和作用 定義:Spring Boot遵循“約定優於配置”原則,以精簡配置降低開發成本爲目的,能自動完成很多項目框架搭建中的約定配置,可快速創建SSM框架,簡化了傳統SSH或SSM框架中的配置工作。 作用 使編碼變簡單:內部集成衆多自動配置,涵蓋主流框架及近百項技術,還可自定義自動配置。開發時配置集中於application.properties或application.yml文件,且有豐富元數據可代碼提示配置,如集成MyBatis只需添加註解和少量配置信息。 使部署變簡單:內置Web容器,提供啓動類,寫完代碼運行啓動類即可自動部署運行,對微服務架構意義重大。 使監控變簡單:提供運行時應用監控和管理功能,可通過HTTP、JMX、SSH協議操作。能監控程序運行時的配置、環境變量、自動化配置信息,獲取內存、線程池、HTTP請求統計等度量指標,還可對應用進行關閉等操作,減少中小團隊監控系統開發量。 2. 任務2:掌握Spring Boot項目環境搭建的步驟 環境要求:JDK1.7及以上版本、Maven3.2及以上版本、IDEA14及以上版本。 環境搭建步驟 打開IDEA,新建Project或Module,JDK版本默認1.8(1.7及以上均可)。 點擊Next,設置Maven座標(如Group、Artifact等)、項目名稱和版本號等信息。 繼續點擊Next,選擇Maven依賴(如Web相關依賴)和Spring Boot版本號(系統默認穩定版本即可)。 再次點擊Next,設置項目名稱和存放位置,點擊Finish完成項目創建。 3. 任務3:整合MyBatis和Redis 整合MyBatis 整合步驟 創建Spring Boot項目後,在pom.xml添加mybatis spring boot starter(MyBatis相關依賴)和mysql connector java(MySQL持久化依賴)。 在application.properties或application.yml中配置數據源,如指定驅動類名、數據庫URL、用戶名和密碼。 繼續配置文件,指定mapper映射文件位置(如classpath:mapper/*.xml)。 配置mapper接口位置,可使用@MapperScan註解標註mapper接口類所在package,或在mapper接口上使用@Mapper註解。 編寫mapper中的SQL映射語句,啓動項目測試,在瀏覽器輸入相應URL訪問,若能展示從數據庫查詢的數據則整合成功。 添加事務:在啓動類添加@EnableTransactionManagement註解,在需要添加事務的方法上添加@Transactional註解。 整合Redis 整合步驟 創建Spring Boot項目後,在pom.xml添加spring boot starter redis依賴。 在application.properties中配置Redis連接參數,如數據庫索引、服務器地址、端口、密碼等。 創建RedisTemplate的Bean組件,通過創建RedisConfig類管理,RedisTemplate提供快速使用Redis的API,無需自行維護連接和事務。 創建RedisUtil工具類,調用RedisTemplate操作Redis服務端進行數據存取。 編寫控制器類進行測試,啓動項目,請求測試方法,若能獲取預期的Redis數據則證明整合成 功。 4. 任務4:自定義Spring Boot的自動配置 實現效果:在項目中引入自定義自動配置後,在application.yml配置helloMsg參數,可實現輸出“hello某某”功能。 步驟 創建Maven項目autoconfigdemo,打包方式爲jar,作爲自動配置項目。 添加自動配置相關依賴,如spring boot autoconfigure。 編寫三個關鍵類 屬性讀取類:使用@ConfigurationProperties(prefix = "hello")註解,屬性helloMsg默認值爲“spring boot”,用於讀取配置文件中hello.helloMsg的值。 核心事件類:包含核心方法sayHello(),方法中使用屬性讀取類中的屬性值。 整合類:添加@Configuration、@EnableConfigurationProperties、@ConditionalOnClass、@ConditionalOnProperty、@ConditionalOnMissingBean等註解,整合屬性讀取類和核心事件類,實現條件判斷和屬性賦值等功能。 在項目資源目錄創建spring.factories文件,添加org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.example.demo.SayHelloAutoConfiguration,使依賴項目能識別自動配置類並自動配置。 創建Spring Boot項目testAutoConfig,引入autoconfigdemo項目作爲依賴,創建Controller類,注入核心事件類實例,在類中編寫請求處理方法,在application.properties中配置hello.helloMsg參數,啓動項目,在瀏覽器訪問相應URL,若顯示預期結果則自動配置生效。

★★★★★

這本書的不是着眼一個點,而是以宏觀架構的角度分析現在互聯網公司使用的架構。對深陷細節,而無法從瞭解公司整體技術架構佈局的人有益

★☆☆☆☆

太差了,內容是csdn劣質博客的複製,給的配套代碼的項目都是錯的!

書籍信息

作者肖睿 吳剛山 黃興
出版社人民郵電出版社
出版時間2018-07-01
ISBN9787115486691
分類計算機-計算機綜合
格式EPUB
完結狀態連載中
章節數115