- 高可用可伸縮微服務(wù)架構(gòu):基于Dubbo、Spring Cloud和Service Mesh
- 程超 梁桂釗 秦金衛(wèi) 方志斌 張逸等
- 4295字
- 2019-07-26 18:50:56
前言
微服務(wù)這個(gè)概念最早是在2011年5月在意大利威尼斯的一個(gè)軟件架構(gòu)會(huì)議上討論并提出的,用于描述一些作為通用架構(gòu)風(fēng)格的設(shè)計(jì)原則。2012年3月在波蘭克拉科夫舉行的“第33屆學(xué)位會(huì)議”上,ThoughtWorks公司的首席咨詢師James Lewis做了題為“Microservices - Java, the Unix Way”的演講(http://2012.33degree.org/talk/show/67),這次演講里James討論了微服務(wù)的一些原則和特征,例如單一服務(wù)職責(zé)、康威定律、自動(dòng)擴(kuò)展、DDD等。
微服務(wù)架構(gòu)則是由Fred George在2012年的一次技術(shù)大會(huì)上所提出的(http://oredev.org/oredev2012/2012/sessions/micro-service-architecture.html),在大會(huì)的演講中,他講解了如何分拆服務(wù),以及如何利用MQ來進(jìn)行服務(wù)間的解耦,這就是最早的微服務(wù)架構(gòu)的雛形。而后由Martin Fowler發(fā)揚(yáng)光大,并且在2014年發(fā)表了一篇著名的文章(https://martinfowler.com/articles/microservices.html),這篇文章深入全面地講解了什么是微服務(wù)架構(gòu)。隨后,微服務(wù)架構(gòu)逐漸成為一種非常流行的架構(gòu)模式,一大批的技術(shù)框架和文章涌現(xiàn)出來,越來越多的公司借鑒和使用微服務(wù)架構(gòu)。
然而微服務(wù)并不能“包治百病”,我們?cè)趯?shí)施的過程中不能簡(jiǎn)單地使用某些個(gè)微服務(wù)框架或組件一蹴而就,而是需要將業(yè)務(wù)、技術(shù)和運(yùn)維有機(jī)地結(jié)合起來,配合同步實(shí)施,并且在此過程中還需要踩過很多的“坑”才能取得成功。
本書的每一個(gè)章節(jié)都是相關(guān)領(lǐng)域的專家經(jīng)過多年的技術(shù)積累提煉而成的。秉承以理論為基礎(chǔ),以大量企業(yè)實(shí)戰(zhàn)案例為核心的宗旨。本書深入全面地介紹微服務(wù)架構(gòu)的實(shí)施方法,以及在實(shí)施過程中所遇到的問題和解決方案,是一本內(nèi)容翔實(shí)、“可落地”的理論與實(shí)踐相結(jié)合的技術(shù)書籍。
不忘初心,方得始終
在2017年8月份的一次技術(shù)大會(huì)上,我與電子工業(yè)出版社博文視點(diǎn)公司的編輯陳曉猛相識(shí)。我們溝通了很久,并且在很多想法上是高度一致的,由此我萌生了想寫一本技術(shù)書籍的念頭。關(guān)于書的主題,我考慮了很久,特別是對(duì)于自己近幾年的工作經(jīng)驗(yàn)的思考和總結(jié),最終決定以“微服務(wù)”作為主題。
最初我邀請(qǐng)了秦金衛(wèi)和方志斌作為寫作團(tuán)隊(duì)的成員。我們?nèi)嗽趧?chuàng)作思路上一拍即合,計(jì)劃以微服務(wù)架構(gòu)的概念和內(nèi)容,Dubbo和Spring Cloud的原理和實(shí)踐,以及我們?cè)诠ぷ髦械母鞣N思考和最佳實(shí)踐為主體內(nèi)容,三人分工協(xié)作,創(chuàng)作一本業(yè)內(nèi)前沿的微服務(wù)架構(gòu)書籍。然而寫作卻是一個(gè)漫長(zhǎng)的過程,需要的不僅是一腔熱血,還需要持之以恒的精神。這個(gè)過程中我們?nèi)硕家驗(yàn)楦髯缘氖虑楹苊?dǎo)致寫作時(shí)停時(shí)續(xù),甚至想過放棄,但我們始終沒有忘卻初心,互相鼓勵(lì)堅(jiān)持下去。志斌工作較忙經(jīng)常出差,以至于我看到他經(jīng)常在凌晨二三點(diǎn)的時(shí)候還在更新文章;金衛(wèi)一直有很多好的想法,給我們寫作提供了很多有用的建議,我們也是經(jīng)常溝通到半夜。在這個(gè)不斷有思想火花碰撞的過程中,我們決定增加了一些章節(jié)使本書的整體內(nèi)容更豐富全面、實(shí)用性更強(qiáng)。于是我又邀請(qǐng)了梁桂釗、杜琪、張逸、殷琦和肖冠宇五位朋友加入,為本書注入新的能量。桂釗雖然加入較晚,但卻非常投入,參與寫作了很多章節(jié);杜琪在加入寫作之時(shí)寶寶還沒有降生,現(xiàn)在應(yīng)該也有半歲了;張逸、殷琦和冠宇在本書快完成之時(shí)緊急馳援,高效地完成了各自負(fù)責(zé)的章節(jié)。我們寫作團(tuán)隊(duì)的成員都不在一個(gè)城市,來自祖國(guó)各地,但我們?yōu)榱顺跣亩墼谝黄穑@就是大家的團(tuán)隊(duì)精神。
歷時(shí)近一年半的書即將出版了,我內(nèi)心的激動(dòng)難以言表。除了感謝寫作團(tuán)隊(duì),我還要感謝編輯陳曉猛對(duì)我的不斷鼓勵(lì)和大力支持,感謝好友王文斌提供了好多有用的建議。我也要感謝家人對(duì)我的支持,在這本書出版之際,我的兒子多多剛滿三歲,我要感謝兒子,讓我“借用”了很多原本陪伴他成長(zhǎng)的寶貴時(shí)間。
最后我想說的是,我們團(tuán)隊(duì)不全是微服務(wù)架構(gòu)方面的技術(shù)專家,但是大家基于共同的對(duì)微服務(wù)架構(gòu)技術(shù)的熱愛和樂于分享知識(shí)經(jīng)驗(yàn)的精神,我們把微服務(wù)架構(gòu)領(lǐng)域的各類知識(shí),以及自己平常的經(jīng)驗(yàn)和積累做了完整的梳理和總結(jié),凝結(jié)為這樣一本技術(shù)書,作為2019年的一份禮物呈現(xiàn)給大家,歡迎大家共同探討和交流。
本書適合的讀者
本書講解如何通過Dubbo、Spring Cloud、Service Mesh等技術(shù)來構(gòu)建微服務(wù)體系,并深入淺出地介紹了微服務(wù)架構(gòu)發(fā)展歷程、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、穩(wěn)定性保證的常用手段、分布式事務(wù)的一致性方案;本書還通過大量的案例探討微服務(wù)落地方案,例如雙活體系建設(shè)、分布式監(jiān)控、微服務(wù)編排、百億流量微服務(wù)網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)、基于支付場(chǎng)景下的微服務(wù)改造等;書籍后半部展示了實(shí)現(xiàn)微服務(wù)架構(gòu)的完整藍(lán)圖,并讓讀者了解如何借助微服務(wù)來增強(qiáng)和重構(gòu)現(xiàn)有的遺留系統(tǒng)。無論剛接觸微服務(wù)的新手,還是正在嘗試借助微服務(wù)解放生產(chǎn)力的開發(fā)人員或運(yùn)維人員,或者是立志于構(gòu)建高可用可伸縮的微服務(wù)體系的架構(gòu)師,閱讀本書,對(duì)讀者必有裨益。
本書內(nèi)容
本書共14章,每章的具體內(nèi)容如下。
第1章:微服務(wù)架構(gòu)概述(作者秦金衛(wèi))。
本章從軟件架構(gòu)的發(fā)展歷程講起,分別對(duì)單體架構(gòu)、SOA架構(gòu)和微服務(wù)架構(gòu)的演進(jìn)過程做了深入淺出的講解,同時(shí)深入介紹了微服務(wù)架構(gòu)的特點(diǎn),希望以宏觀的視角為讀者打開微服務(wù)的大門。
第2章:微服務(wù)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(作者張逸)。
本章介紹了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是什么,常見的領(lǐng)域架構(gòu)有哪些,如何將領(lǐng)域驅(qū)動(dòng)應(yīng)用到微服務(wù)中,以及如何使用領(lǐng)域驅(qū)動(dòng)進(jìn)行合理的服務(wù)劃分等,幫助讀者在正式學(xué)習(xí)微服務(wù)前修煉“內(nèi)功”。
第3章:Apache Dubbo框架的原理與實(shí)現(xiàn)(作者程超)。
目前Dubbo已經(jīng)被阿里巴巴技術(shù)團(tuán)隊(duì)重新維護(hù)并且得到了大力的發(fā)展和推廣,使用Dubbo可以很好地進(jìn)行微服務(wù)建設(shè),本章較為深入地講解了Dubbo的使用和技巧,以及通過時(shí)源碼的深入分析能夠讓讀者對(duì)Dubbo的原理實(shí)現(xiàn)有一個(gè)全面的認(rèn)識(shí)。
第4章:Spring Boot/Spring Cloud實(shí)踐(作者方志斌)。
Spring Boot/Cloud是目前較為流行的微服務(wù)框架,本章以大量的實(shí)戰(zhàn)案例為線索,為讀者講解如何才能使用好Spring Cloud框架,講解如何避免在使用過程中“踩坑”。
第5章:微服務(wù)穩(wěn)定性保證的常用手段(作者杜琪)。
在業(yè)務(wù)發(fā)展越來越快,規(guī)模也越來越大的情況下,我們所面臨的就是如何在服務(wù)越來越多的情況下保證微服務(wù)架構(gòu)的穩(wěn)定性,本章講解保障穩(wěn)定性的常用技巧和手段。
第6章:微服務(wù)下如何保證事務(wù)的一致性(作者梁桂釗)。
本章介紹了從本地事務(wù)到分布式事務(wù)的演變,深入分析了微服務(wù)在強(qiáng)一致性場(chǎng)景和最終一致性場(chǎng)景下的解決方案,探討了二階段提交協(xié)議、三階段提交協(xié)議、TCC模式、補(bǔ)償模式、可靠事件模式等。同時(shí),對(duì)開源項(xiàng)目的分布式事務(wù)進(jìn)行解讀,包括RocketMQ和ServiceComb。
第7章:百億流量微服務(wù)億級(jí)網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)(作者秦金衛(wèi))。
本章從百億流量交易系統(tǒng)微服務(wù)網(wǎng)關(guān)(API Gateway)的現(xiàn)狀和面臨問題出發(fā),闡述微服務(wù)架構(gòu)與API網(wǎng)關(guān)的關(guān)系,理順流量網(wǎng)關(guān)與業(yè)務(wù)網(wǎng)關(guān)的脈絡(luò),分享全面的API網(wǎng)關(guān)知識(shí)與經(jīng)驗(yàn)。
第8章:微服務(wù)編排(作者程超)。
本章以Netflix Conductor框架為核心,從框架的使用和原理的角度深入介紹了什么是微服務(wù)編排,為微服務(wù)執(zhí)行復(fù)雜的業(yè)務(wù)邏輯提供了一種新的思路。
第9章:微服務(wù)數(shù)據(jù)抽取與統(tǒng)計(jì)(作者肖冠宇)。
在微服務(wù)架構(gòu)下,服務(wù)必將越來越多,在這種情況下進(jìn)行數(shù)據(jù)統(tǒng)計(jì)和分析將變得非常困難,本章將深入講解如何從不同服務(wù)的數(shù)據(jù)庫(kù)中抽取數(shù)據(jù)到統(tǒng)一的大數(shù)據(jù)平臺(tái)中,幫忙使用者更方便地進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)。
第10章:微服務(wù)雙活體系建設(shè)(作者程超)。
在企業(yè)發(fā)展規(guī)模越來越大的情況下,用戶對(duì)系統(tǒng)的穩(wěn)定性要求也越來越高,那么單機(jī)房部署勢(shì)必成為發(fā)展的瓶頸,本章將以實(shí)際案例出發(fā)講解同城雙活的建設(shè)。
第11章:基于支付場(chǎng)景下的微服務(wù)改造與性能優(yōu)化(作者程超)。
本章從實(shí)際的案例出發(fā),在具體的支付業(yè)務(wù)場(chǎng)景下,從一個(gè)新項(xiàng)目開始逐步講解如何利用領(lǐng)域驅(qū)動(dòng)劃分服務(wù),如何利用微服務(wù)框架進(jìn)行服務(wù)治理,以及項(xiàng)目完成后怎樣提升微服務(wù)架構(gòu)的性能。
第12章:遺留系統(tǒng)的微服務(wù)架構(gòu)改造(作者梁桂釗)。
本章介紹了遺留系統(tǒng)的微服務(wù)架構(gòu)改造,梳理了代碼分層結(jié)構(gòu)的轉(zhuǎn)變,提出一個(gè)新的代碼分層思路來應(yīng)對(duì)微服務(wù)的流行與普及,并深入思考了遺留系統(tǒng)的債券,深入探討單體系統(tǒng)拆分服務(wù)的方法論。同時(shí),對(duì)遺留系統(tǒng)的微服務(wù)架構(gòu)改造的解決方案給出9個(gè)切實(shí)可行的核心實(shí)踐思路。
第13章:Service Mesh詳解(作者殷琦)。
隨著微服務(wù)的持續(xù)發(fā)展,下一代微服務(wù)架構(gòu)已然出現(xiàn),本章將深入介紹Service Mesh的發(fā)展歷程,以及結(jié)合具體案例帶領(lǐng)讀者使用Istio進(jìn)行具體實(shí)踐。
第14章:微服務(wù)監(jiān)控實(shí)戰(zhàn)(作者程超)。
本章重點(diǎn)介紹APM的原理,從零開始開發(fā)APM監(jiān)控系統(tǒng),還深入介紹Prometheus的安裝和原理,以及如何使用Prometheus進(jìn)行監(jiān)控和預(yù)警。
作者簡(jiǎn)介
程超,網(wǎng)名小程故事多,現(xiàn)任某公司高級(jí)架構(gòu)師,超過12年的Java研發(fā)經(jīng)驗(yàn),8年技術(shù)管理和架構(gòu)經(jīng)驗(yàn),熟悉支付和電商領(lǐng)域,擅長(zhǎng)微服務(wù)生態(tài)建設(shè)和運(yùn)維監(jiān)控,對(duì)Dubbo、Spring Cloud和gRPC等微服務(wù)框架有深入研究,幫助多家公司進(jìn)行過微服務(wù)建設(shè)和改造。合著作品《深入分布式緩存》,阿里云MVP、云棲社區(qū)外部專家、Codingfly社區(qū)特聘技術(shù)專家、CSDN博主專家。
梁桂釗,現(xiàn)任某互聯(lián)網(wǎng)公司高級(jí)開發(fā)工程師,參與過內(nèi)容分發(fā)、K12教育、淘系電商等項(xiàng)目。目前,專注于新零售電商服務(wù)的業(yè)務(wù)摸索和電商服務(wù)創(chuàng)新實(shí)踐。具有Java核心技術(shù)、微服務(wù)、分布式、高并發(fā)等領(lǐng)域一線實(shí)戰(zhàn)經(jīng)驗(yàn),并對(duì)新興技術(shù)方向和各種開源框架有濃厚興趣。公眾號(hào)“服務(wù)端思維”的作者。
秦金衛(wèi)(KimmKing),現(xiàn)任某公司高級(jí)技術(shù)總監(jiān)/Apache Dubbo PPMC,阿里前架構(gòu)師/某商業(yè)銀行北京研發(fā)中心負(fù)責(zé)人。關(guān)注互聯(lián)網(wǎng)、電商、金融、支付、區(qū)塊鏈等領(lǐng)域,10多年研發(fā)管理和架構(gòu)經(jīng)驗(yàn),對(duì)于中間件、SOA、微服務(wù),以及各種開源技術(shù)非常熱衷,活躍于Dubbo、Fastjson、Mule、ActiveMQ等多個(gè)開源社區(qū)。個(gè)人博客http://kimmking.github.io。
方志斌,現(xiàn)任某物聯(lián)網(wǎng)公司高級(jí)研發(fā)工程師。目前專注于大型物聯(lián)網(wǎng)平臺(tái)架構(gòu)的設(shè)計(jì)與開發(fā)工作。對(duì)于微服務(wù)、分布式、集群有一定的研究和實(shí)戰(zhàn)經(jīng)驗(yàn)。對(duì)Java領(lǐng)域的開源框架有濃厚的興趣,喜歡深入分析、總結(jié)框架源碼。SpringForAll社區(qū)核心成員,組織多次社區(qū)技術(shù)專題、問答等活動(dòng)。
張逸,架構(gòu)編碼實(shí)踐者,微服務(wù)架構(gòu)設(shè)計(jì)者,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)布道師,大數(shù)據(jù)平臺(tái)架構(gòu)師。著譯作包括《軟件設(shè)計(jì)精要與模式》《恰如其分的軟件架構(gòu)》《人件》等。個(gè)人微信公眾號(hào)為“逸言”,個(gè)人博客:http://zhangyi.xyz。
杜琪,網(wǎng)名阿杜,現(xiàn)任螞蟻金服高級(jí)研發(fā)工程師,2015年6月畢業(yè)于南開大學(xué),計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)碩士。畢業(yè)后開始接觸分布式業(yè)務(wù)系統(tǒng)開發(fā),曾在有贊負(fù)責(zé)用戶中心基礎(chǔ)服務(wù),對(duì)分布式業(yè)務(wù)系統(tǒng)的穩(wěn)定性、可靠性有豐富的經(jīng)驗(yàn)。喜歡研究底層技術(shù),喜歡研究疑難技術(shù)問題,例如JVM內(nèi)存問題排查、GC調(diào)優(yōu),等等。有對(duì)外輸出分享的習(xí)慣,是公眾號(hào)javaadu的維護(hù)者。
殷琦,網(wǎng)名滌生,現(xiàn)任“美團(tuán)點(diǎn)評(píng)”技術(shù)專家,2015年3月畢業(yè)于東華大學(xué),軟件工程碩士。2015年3月加入“美團(tuán)點(diǎn)評(píng)”基礎(chǔ)架構(gòu)部,開始接觸微服務(wù)架構(gòu),之后一直從事服務(wù)框架的研發(fā)工作,對(duì)微服務(wù)架構(gòu)發(fā)展與演進(jìn)有非常深刻的認(rèn)識(shí)。個(gè)人比較喜歡研究并分享新技術(shù),時(shí)刻關(guān)注并實(shí)踐微服務(wù)架構(gòu)最前沿的技術(shù),如Service Mesh、Serverless等。
肖冠宇,曾就職于小米、人民網(wǎng)等互聯(lián)網(wǎng)公司,具有豐富的大數(shù)據(jù)一線實(shí)戰(zhàn)經(jīng)驗(yàn),專注大數(shù)據(jù)處理技術(shù)及機(jī)器學(xué)習(xí)算法研究。著有《企業(yè)大數(shù)據(jù)處理:Spark、Druid、Flume與Kafka應(yīng)用實(shí)踐》《Python3快速入門與實(shí)戰(zhàn)》等書籍。
由于本書寫作匆忙,難免有錯(cuò)漏之處,后續(xù)可以通過勘誤的方式不斷優(yōu)化,歡迎讀者多提寶貴意見。
程超
2019年3月于北京
- ASP.NET Web API:Build RESTful web applications and services on the .NET framework
- Java技術(shù)手冊(cè)(原書第7版)
- FreeSWITCH 1.6 Cookbook
- Practical DevOps
- Getting Started with React Native
- 一本書講透Java線程:原理與實(shí)踐
- Odoo 10 Implementation Cookbook
- R語(yǔ)言:邁向大數(shù)據(jù)之路(加強(qiáng)版)
- CodeIgniter Web Application Blueprints
- 高效使用Greenplum:入門、進(jìn)階與數(shù)據(jù)中臺(tái)
- C語(yǔ)言程序設(shè)計(jì)
- Java并發(fā)實(shí)現(xiàn)原理:JDK源碼剖析
- Koa與Node.js開發(fā)實(shí)戰(zhàn)
- Apache Kafka 1.0 Cookbook
- Eclipse開發(fā)(學(xué)習(xí)筆記)