本書將重點關(guān)注微服務(wù)基礎(chǔ)設(shè)施方面,其中大部分內(nèi)容涉及微服務(wù)運維相關(guān)技術(shù)。全書以實踐的角度進行編寫,讀者首先將學(xué)習(xí)輕量級微服務(wù)架構(gòu)的全景視圖,隨后的各個章節(jié)將圍繞微服務(wù)的日志、監(jiān)控、通信、解耦、測試、配置六大方面進行展開。讀者可親自動手,從零開始搭建輕量級微服務(wù)架構(gòu),充分享受架構(gòu)探險的樂趣。
推薦序
微服務(wù),我們?nèi)绾闻c你相處
微服務(wù)來了,有了服務(wù)這兩個字,這注定又是個一說就明白、一舉例就糊涂、一討論就吵架的概念。微服務(wù)的出現(xiàn)有其必然的商業(yè)背景和架構(gòu)哲學(xué),如何更好地認識微服務(wù)的內(nèi)涵、如臂使指地應(yīng)用微服務(wù)架構(gòu),還是有著很多挑戰(zhàn)的,這也許就是本書被命名為架構(gòu)探險的原因。
企業(yè)數(shù)字化轉(zhuǎn)型驅(qū)動架構(gòu)升級
互聯(lián)網(wǎng)經(jīng)濟深刻改變了我們身邊的商業(yè)環(huán)境,消費者的生活方式日益數(shù)字化,人們可以在任何時間、任何地點利用線上、線下渠道體驗無縫購物,運用社交媒體表達自我,企業(yè)也在運用多種技術(shù)手段,發(fā)揮數(shù)字化潛力,改善客戶聯(lián)系,促進企業(yè)業(yè)務(wù)模式的轉(zhuǎn)型。Gartner認為,數(shù)字化就是把人、事、物和商業(yè)聯(lián)系起來,建立新的商業(yè)模式。未來的企業(yè)都將是IT企業(yè),IT將從后臺走向前臺,從ERP、CRM等內(nèi)部流程優(yōu)化為主的業(yè)務(wù),逐步轉(zhuǎn)向內(nèi)外兼修的模式,從而實現(xiàn)商業(yè)創(chuàng)新。
這一變化要求IT架構(gòu)更加靈活地與上下游企業(yè)協(xié)作,更加快速地響應(yīng)客戶的個性化需求,更加彈性地應(yīng)對無時不在的客戶請求并提供良好的客戶體驗,同時云計算、大數(shù)據(jù)等技術(shù)的出現(xiàn)也為上述改變提供了新的技術(shù)選擇,我們正面臨B/S多層架構(gòu)出現(xiàn)后新的一次架構(gòu)升級,而微服務(wù)架構(gòu)就是在這個架構(gòu)升級過程中應(yīng)運而生的。
分而治之的哲學(xué)是微服務(wù)的理論基礎(chǔ)
把大的問題分解為容易解決的小問題,找到小問題的解決辦法,再來解決大問題,這就是分而治之的哲學(xué)。正如萬事萬物由分子、原子組成一樣,軟件也可以分解為基本單元,以這樣的基本單元進行開發(fā)、測試、維護,是解決大規(guī)模系統(tǒng)建設(shè)的思路。分而治之首先要解決如何分的問題,企業(yè)軟件的分法應(yīng)該是以業(yè)務(wù)驅(qū)動的,而不是以技術(shù)驅(qū)動的,也就是分解為獨立的業(yè)務(wù)邏輯,而這樣的不可再分的業(yè)務(wù)邏輯就是微服務(wù)。
凡事有一利必有一弊,細分為微服務(wù)后,勢必帶來部署、測試、信息集成難度的提高,分而治之除了分,還需要治。傳統(tǒng)恐龍型ERP是一個面向組織的軟件,完備、復(fù)雜、響應(yīng)變化慢,適合業(yè)務(wù)穩(wěn)定的情況,而在數(shù)字化時代,客戶個性化的要求讓我們從這種面向組織的軟件逐漸演變?yōu)槊嫦騻體的軟件。例如,從前的EHR軟件是為人力資源部門服務(wù)的,整體開發(fā)、整體實施,而現(xiàn)在我們會從個體的角度規(guī)劃軟件,可以先從招聘專員開始做一個面試管理的流程,逐步推出新的流程,完善現(xiàn)有的流程。這些面向個體的流程就是微應(yīng)用,企業(yè)應(yīng)用將由無數(shù)個微應(yīng)用組成。微服務(wù)則是一個技術(shù)概念,能更好地解決微應(yīng)用的技術(shù)實現(xiàn)問題,是一個事物的不同側(cè)面,所謂橫看成嶺側(cè)成峰,遠近高低各不同,微服務(wù)和微應(yīng)用是事物的一體兩面。正因為微服務(wù)實際就是一個業(yè)務(wù)邏輯,因此做好微服務(wù)需要從微應(yīng)用的維度考慮,將分解開的邏輯形成一個整體,要從多渠道接入、客戶體驗、數(shù)據(jù)管理、應(yīng)用交付、運維全方位的視角考慮,這就是分而治之中實現(xiàn)治的體驗,也是微服務(wù)架構(gòu)需要解決的問題。
站在SOA的肩膀上踐行微服務(wù)
微服務(wù)是一個新概念,但這絕不是一個全新架構(gòu),更不是一個包治百病的架構(gòu)。由于有服務(wù)二字,很容易讓人聯(lián)想到面向服務(wù)架構(gòu)(SOA),其實微服務(wù)架構(gòu)屬于應(yīng)用技術(shù)架構(gòu),和以 B/S 為代表的三層架構(gòu)相對應(yīng),強調(diào)將巨石型應(yīng)用拆分為由微服務(wù)組成的應(yīng)用,在數(shù)據(jù)上也視情況從集中的存儲拆解為更小的存儲單元。而SOA屬于企業(yè)架構(gòu)的范疇,從企業(yè)架構(gòu)出發(fā)把業(yè)務(wù)分解為不同領(lǐng)域的服務(wù),不同物理系統(tǒng)提供不同服務(wù),注重系統(tǒng)之間通過服務(wù)互聯(lián)互通的規(guī)范,對服務(wù)如何實現(xiàn)并不關(guān)注。因此,面向服務(wù)架構(gòu)的服務(wù)應(yīng)該是一個業(yè)務(wù)意義的服務(wù),而微服務(wù)是系統(tǒng)中的技術(shù)服務(wù),更關(guān)注服務(wù)的實現(xiàn),雖然提供了業(yè)務(wù)意義的服務(wù),但是不能混為一談。微服務(wù)使用也不是無限度的,事實上由于數(shù)據(jù)一致性等問題的限制,不能無限度拆分微服務(wù),因此可以把微服務(wù)分為系統(tǒng)對外提供的遠程服務(wù)、系統(tǒng)內(nèi)部的遠程服務(wù)和系統(tǒng)內(nèi)部的本地服務(wù),顯式聲明、明確職責(zé)。事實上,在企業(yè)架構(gòu)上使用SOA支撐業(yè)務(wù),而在應(yīng)用技術(shù)架構(gòu)上使用微服務(wù)架構(gòu),是一個合適的選擇。
黃柳青博士是我和黃勇共同的導(dǎo)師,他在2004年所著的《軟件的涅槃》一書中指出:互聯(lián)網(wǎng)時代的企業(yè)應(yīng)用定義,正發(fā)生革命性的變化……橫向的部門互動、實時的企業(yè)間互動、多樣的交互渠道、靈活的業(yè)務(wù)規(guī)則,使得原有意義上的獨立應(yīng)用不復(fù)存在……對軟件設(shè)計者來說,能直觀地分割并具有最小內(nèi)部耦合的軟件結(jié)構(gòu)是簡約之美……美的軟件是軟件企業(yè)與軟件開發(fā)者的終極目標,那時候他把這種全新的軟件生產(chǎn)模式稱為面向構(gòu)件。回頭看來,微服務(wù)正是面向構(gòu)件在數(shù)字化時代的解讀,用微服務(wù)架構(gòu)實現(xiàn)軟件之美,加速企業(yè)數(shù)字化轉(zhuǎn)型。
焦烈焱,普元CTO
前言
2017年,微服務(wù)三歲了。我們一直期盼它能快速長大,希望微服務(wù)技術(shù)社區(qū)能推出更多框架與工具,可以幫助我們更好地落地微服務(wù),并從中獲得微服務(wù)給我們帶來的甜頭,但實際情況卻讓我們感到有些失望。我們至今還在尋找適合自身技術(shù)需求的微服務(wù)架構(gòu),甚至仍然覺得微服務(wù)離自己有些距離。
因此我們更多的是在觀望,希望看到有成功實踐微服務(wù)的企業(yè)能夠?qū)⒆约旱募夹g(shù)分享出來,以供更多的企業(yè)來使用,但實際情況仍然讓我們感到失望。我們不得不選擇Spring Cloud這樣的全家桶式的微服務(wù)框架來實現(xiàn)微服務(wù)架構(gòu),此時我們就需要基于Spring Boot來開發(fā)微服務(wù),Spring Cloud提供的大量基礎(chǔ)設(shè)施雖然可與Spring Boot進行無縫整合,但這樣的架構(gòu)給微服務(wù)的技術(shù)選型帶來了一定的局限性。此外,Spring Cloud包含了大量的Spring官方所提供的開源項目,目前不同的版本在兼容性方面也存在一些不穩(wěn)定現(xiàn)象。
我們認為,微服務(wù)是一個靈活的技術(shù)架構(gòu),它不能綁定在特定的技術(shù)平臺上,微服務(wù)不應(yīng)該存在任何的局限性,同時還要確保有較強的兼容性。比如,雖然我們也使用Spring Boot開發(fā)微服務(wù),但也允許使用其他更適合的開發(fā)框架或編程語言來實現(xiàn)微服務(wù)。再比如,我們目前通過ZooKeeper來實現(xiàn)服務(wù)注冊,但也能輕松地切換為其他技術(shù)選型,對于整個應(yīng)用程序而言,這些都是無感知的。微服務(wù)所提倡的理念就是,用最合適的技術(shù)以最高效的方式來解決實際應(yīng)用中的問題。
經(jīng)過兩年多的實踐過程,我們找到了一款能讓微服務(wù)架構(gòu)快速且穩(wěn)定落地的解決方案,并將此方案的核心內(nèi)容匯集成本書,希望該方案能給微服務(wù)世界帶一點新的能量。
本書將重點關(guān)注微服務(wù)基礎(chǔ)設(shè)施方面,其中大部分內(nèi)容涉及微服務(wù)運維相關(guān)技術(shù)。全書以實踐的角度進行編寫,讀者首先將學(xué)習(xí)輕量級微服務(wù)架構(gòu)的全景視圖,隨后的各個章節(jié)將圍繞微服務(wù)的日志、監(jiān)控、通信、解耦、測試、配置六大方面進行展開。讀者可親自動手,從零開始搭建輕量級微服務(wù)架構(gòu),充分享受架構(gòu)探險的樂趣。
本書是如何組織的?
第1章:輕量級的微服務(wù)。
本章將從宏觀上描述輕量級微服務(wù)架構(gòu)。首先我們將從架構(gòu)與架構(gòu)師開始講起,簡單回顧架構(gòu)演進的過程與微服務(wù)的發(fā)展趨勢。隨后我們將探討在搭建微服務(wù)架構(gòu)之前需要準備的工作,認識微服務(wù)架構(gòu)的冰山模型,介紹切分微服務(wù)邊界的方法和技巧。最后我們將從部署與運行兩個角度來觀察微服務(wù)架構(gòu),并以一幅架構(gòu)全景圖來結(jié)束本章。
第2章:微服務(wù)日志。
本章將關(guān)注點放在微服務(wù)日志上。首先我們將從Spring Boot日志框架入手,使應(yīng)用日志可以輸出到Docker容器外部,以便我們可隨時查看日志文件。隨后我們將學(xué)習(xí)Docker日志驅(qū)動,使日志信息輸出到Linux的Syslog中。最后我們將Syslog與ELK技術(shù)棧整合,搭建一款微服務(wù)的日志中心。
第3章:微服務(wù)監(jiān)控。
本章將視角放在微服務(wù)監(jiān)控方面。首先我們將學(xué)習(xí)Spring Boot應(yīng)用程序自帶的監(jiān)控特性,接著將介紹Spring Boot Admin開源監(jiān)控系統(tǒng)的使用方法。隨后我們將集成InfluxDB、cAdvisor、Grafana等開源工具,搭建一款微服務(wù)的監(jiān)控中心。最后我們將學(xué)習(xí)Zipkin工具的使用方法,將其用于微服務(wù)的追蹤中心。
第4章:微服務(wù)通信。
本章將圍繞微服務(wù)之間的通信來展開。首先我們將在Spring Boot應(yīng)用程序中實現(xiàn)基于HTTP的同步調(diào)用,同時我們也會對比Spring RestTemplate、OkHttp、Retrofit等工具的使用方法。隨后我們將使用gRPC框架實現(xiàn)基于RPC的同步調(diào)用,并將gRPC與Spring Boot進行整合。最后我們將親自動手,搭建一款輕量級分布式RPC框架。
第5章:微服務(wù)解耦。
本章將使用消息隊列的異步方式來解耦微服務(wù)調(diào)用問題。首先我們將對比ActiveMQ與RabbitMQ,它們是兩款經(jīng)典的開源消息隊列。隨后我們將使用RabbitMQ來實現(xiàn)請求應(yīng)答模式,并通過RabbitMQ來實現(xiàn)RPC同步調(diào)用。最后我們將使用Event-Sourcing與MQ相結(jié)合,巧妙地解決分布式事務(wù)問題。
第6章:微服務(wù)測試。
本章將聚焦在微服務(wù)測試方面。首先我們將以Spring Boot應(yīng)用程序為例,分別針對Service層與REST API進行單元測試。隨后我們將使用Postman來充當(dāng)REST API的測試工具,并結(jié)合Jenkins與Newman搭建一款REST API的自動化測試框架。最后我們將分別使用Swagger與apiDoc工具來自動生成REST API文檔,并比較這兩款工具的優(yōu)缺點。
第7章:微服務(wù)配置。
本章將解決微服務(wù)的配置參數(shù)問題。首先我們將通過一些實例,快速學(xué)習(xí)Ansible自動化運維工具的使用方法。隨后將Ansible作為微服務(wù)的配置中心,并將Jenkins與Ansible相結(jié)合,可用于優(yōu)化我們現(xiàn)有的微服務(wù)部署框架。最后我們將使用Registrator所提供的自注冊特性,實現(xiàn)微服務(wù)的平滑升級目標。
如何獲取本書源碼?
可通過以下鏈接下載本書源碼。
http://git.oschina.net/huangyong/msa-book-2
如何參與線上互動?
歡迎加入輕量級微服務(wù)架構(gòu)QQ群,申請加入時請注明架構(gòu)探險。
群號:528265294
此
現(xiàn)任上海特贊科技CTO,曾任阿里巴巴公司系統(tǒng)架構(gòu)師。具有豐富的互聯(lián)網(wǎng)產(chǎn)品架構(gòu)經(jīng)驗與技術(shù)管理經(jīng)驗,擅長敏捷開發(fā)模式,推崇輕量級系統(tǒng)架構(gòu)。國內(nèi)開源軟件推動者,Smart開源框架創(chuàng)始人,圖書《架構(gòu)探險:從零開始寫Java Web框架》作者。技術(shù)大會講師、培訓(xùn)師、咨詢師。熱愛技術(shù)交流,樂于分享自己的成長經(jīng)驗。