關(guān)于我們
書單推薦
新書推薦
|
輕量級微服務(wù)架構(gòu)(上冊)
本系列從開發(fā)與運(yùn)維兩方面分別對微服務(wù)架構(gòu)的實(shí)踐過程進(jìn)行描述,全套分為上下兩冊,上冊偏重于開發(fā),下冊偏重于運(yùn)維。在上冊中讀者會(huì)學(xué)習(xí)到微服務(wù)架構(gòu)所需的開發(fā)技能,包括使用SpringBoot搭建微服務(wù)開發(fā)框架,使用Node.js搭建微服務(wù)網(wǎng)關(guān),使用ZooKeeper實(shí)現(xiàn)微服務(wù)注冊與發(fā)現(xiàn),使用Docker封裝微服務(wù),使用Jenkins部署微服務(wù)。通過閱讀上冊,讀者可輕松搭建一款輕量級微服務(wù)架構(gòu)。
《輕量級微服務(wù)架構(gòu)(上冊)》適合對微服務(wù)實(shí)踐感興趣,以及想成為微服務(wù)架構(gòu)師的人員閱讀。
業(yè)內(nèi)專家聯(lián)合力薦
讓微服務(wù)落地,深入分析踐行微服務(wù)的種種要點(diǎn) 深入闡述微服務(wù)架構(gòu)體系的各種zui佳實(shí)踐
微服務(wù)是近年來備受關(guān)注的話題,它的出現(xiàn)讓我們想起了十年前的 SOA(Service-Oriented Architecture,面向服務(wù)架構(gòu)),但它比傳統(tǒng)的 SOA 更容易理解,也更容易實(shí)踐,它將“面向服務(wù)”的思想做得更加徹底。
當(dāng)國外一些知名技術(shù)公司成功實(shí)踐了微服務(wù)以后,這股熱潮就吹遍了國內(nèi)的大街小巷,大家街頭巷尾都在聊微服務(wù),對它眾說紛紜且褒貶不一。有人說它非常好,但就是“玩不起”,為何會(huì)這樣呢? 我們不妨帶著這個(gè)問題來簡單介紹一下,究竟什么才是微服務(wù)。 微服務(wù)是一種分布式系統(tǒng)架構(gòu),它建議我們將業(yè)務(wù)切分為更加細(xì)粒度的服務(wù),并使每個(gè)服務(wù)的責(zé)任單一且可獨(dú)立部署,服務(wù)內(nèi)部高內(nèi)聚,隱含內(nèi)部細(xì)節(jié),服務(wù)之間低耦合,彼此相互隔離。此外,我們根據(jù)面向服務(wù)的業(yè)務(wù)領(lǐng)域來建模,對外提供統(tǒng)一的 API 接口。微服務(wù)的思想不只是停留在開發(fā)階段,它貫穿于設(shè)計(jì)、開發(fā)、測試、部署、運(yùn)維等軟件生命周期階段。 可見,我們提到的微服務(wù),實(shí)際上是一種架構(gòu)思想,我們不妨稱它為“微服務(wù)架構(gòu)”。 微服務(wù)架構(gòu)看起來如此之好,我們真的就需要它嗎? 微服務(wù)架構(gòu)建議我們按照業(yè)務(wù)來切分服務(wù),我們完全可以選擇最合適的技術(shù)來實(shí)現(xiàn)具體的服務(wù),只需確保對外提供的 API 接口保持一致即可,也就是說,微服務(wù)架構(gòu)使我們技術(shù)選型的自由度更加寬廣了。既然系統(tǒng)可拆分為多個(gè)服務(wù),這樣非常有利于我們對每個(gè)服務(wù)進(jìn)行監(jiān)控,可不斷收集每個(gè)服務(wù)的性能指標(biāo)數(shù)據(jù),當(dāng)某個(gè)服務(wù)出現(xiàn)性能瓶頸時(shí),會(huì)發(fā)出預(yù)警,我們可隨時(shí)水平地?cái)U(kuò)展該服務(wù),以支撐更大的流量,而不至于復(fù)制整個(gè)系統(tǒng)。由于服務(wù)之間彼此隔離,相互之間不會(huì)產(chǎn)生影響,因此我們可借助技術(shù)的手段來實(shí)現(xiàn)自動(dòng)化部署,這會(huì)使我們的部署過程變得更加高效。 其實(shí)微服務(wù)架構(gòu)的優(yōu)點(diǎn)數(shù)不勝數(shù),但是大家可能還是不敢用,因?yàn)樗鼘ξ覀兊募夹g(shù)要求具有一定的挑戰(zhàn)。比如,我們需要一個(gè)自動(dòng)化部署系統(tǒng),也需要解決分布式系統(tǒng)帶來的一系列問題,還需要服務(wù)之間能做到彼此隔離且互不影響,同時(shí)還不能影響通信過程中所帶來的性能開銷。因此很多人認(rèn)為,只有大公司或強(qiáng)悍的技術(shù)團(tuán)隊(duì)才能玩得起微服務(wù)架構(gòu),自己只能“遠(yuǎn)觀”卻不能“近玩”。甚至還有人認(rèn)為,微服務(wù)架構(gòu)實(shí)際上就是以前談?wù)摱嗄甓y以落地的 SOA。 實(shí)際上,我們認(rèn)為微服務(wù)架構(gòu)的本質(zhì)仍然符合 SOA 思想,只不過它比 SOA 更容易落地。為了證明這件事情,我們經(jīng)過了大量的實(shí)踐,借助了許多優(yōu)秀的開源技術(shù),搭建了一款“輕量級微服務(wù)架構(gòu)”。實(shí)踐證明,該架構(gòu)不僅可以適應(yīng)大中型公司的業(yè)務(wù)變化,還能滿足中小型公司的快速增長。我們真心地希望這款輕量級微服務(wù)架構(gòu)能夠幫助更多的技術(shù)愛好者以及更多的技術(shù)團(tuán)隊(duì),順利地走出技術(shù)困境,以全新的視角去迎接新的挑戰(zhàn)。 不得不提醒大家的是:微服務(wù)并不是萬靈丹!它不能包治百病,我們更不要為了微服務(wù)而去微服務(wù)。而是需要根據(jù)自身的情況,靈活地選擇最合適的技術(shù),通過技術(shù)的手段實(shí)現(xiàn)更高的目標(biāo)。 為什么寫這本書? 我一直很關(guān)注服務(wù)化方面的技術(shù),記得在 2014 年,我偶然發(fā)現(xiàn)國外技術(shù)博客中有人在寫關(guān)于“微服務(wù)”方面的概念與技術(shù)。坦白地講,當(dāng)我第一次看到微服務(wù)時(shí),并沒有對它產(chǎn)生濃厚的興趣,我當(dāng)時(shí)認(rèn)為微服務(wù)是笨重的,它和傳統(tǒng)的 SOA 沒有太大的區(qū)別,同樣都是服務(wù)化,只不過微服務(wù)更加細(xì)粒度而已。直到 Docker 容器技術(shù)逐步成熟起來,越來越多的人開始使用Docker 來封裝應(yīng)用程序,并借助 Docker 技術(shù)讓軟件交付變得更加靈活而高效,這讓我不由地對微服務(wù)的未來產(chǎn)生了強(qiáng)烈的期待,我堅(jiān)信微服務(wù)將伴隨著 Docker 技術(shù)成為未來軟件開發(fā)與運(yùn)維的核心武器。 我開始瘋狂地學(xué)習(xí)微服務(wù),研究它的各種架構(gòu)模式與應(yīng)用領(lǐng)域,開始自己動(dòng)手做一些練習(xí),并在公司內(nèi)部大力推廣這種新架構(gòu)。在實(shí)踐中,我獲得了一點(diǎn)收獲,曾在一些技術(shù)大會(huì)與企業(yè)內(nèi)訓(xùn)中講過微服務(wù)的原理與實(shí)踐。我發(fā)現(xiàn)一個(gè)問題,雖然大家對微服務(wù)都非常關(guān)注,但往往卻不知應(yīng)該如何開始,應(yīng)該使用哪些技術(shù)來搭建微服務(wù)架構(gòu),以及在實(shí)踐中應(yīng)該如何避免掉進(jìn)坑里。甚至有些人還認(rèn)為微服務(wù)只是大公司才玩得起的東西,因?yàn)樗枰柚?SOA 那樣重量級的基礎(chǔ)設(shè)施,需要付出大量的成本,但收益卻不一定。其實(shí),我想告訴大家的是,微服務(wù)架構(gòu)并非這樣,它應(yīng)該是輕量級的,它應(yīng)該是很容易上手的,它應(yīng)該是任何公司想用就敢用的。雖然國內(nèi)外已經(jīng)有幾本關(guān)于微服務(wù)方面的好書了,但我仍然希望這本書能為大家在微服務(wù)實(shí)踐方面帶來微薄的價(jià)值。 我們可以把微服務(wù)架構(gòu)想象成海面上的一座冰山,看得見的部分是開發(fā),看不見的部分是運(yùn)維,一個(gè)好的微服務(wù)架構(gòu)需要同時(shí)關(guān)注開發(fā)和運(yùn)維兩個(gè)方面。本系列書分上下兩冊,上冊偏開發(fā),下冊偏運(yùn)維。 您適合看這本書嗎? 如果您還沒聽說過微服務(wù),或者您聽說了但不知道它究竟是什么,或者您正在嘗試微服務(wù)的實(shí)踐,那么這本書就非常適合您。不管您是一名開發(fā)人員還是一名運(yùn)維人員,如果您向往成為一名優(yōu)秀的微服務(wù)架構(gòu)師,那么這本書更加值得您反復(fù)閱讀和實(shí)踐。 本書是如何組織的? 第1 章:微服務(wù)架構(gòu)設(shè)計(jì)概述。 從為什么需要微服務(wù)架構(gòu)開始講起,接著描述微服務(wù)架構(gòu)是什么,以及微服務(wù)架構(gòu)有哪些特點(diǎn),最后以如何搭建微服務(wù)架構(gòu)來結(jié)束本章。本章是全書的概述,從一個(gè)宏觀的視角來講解微服務(wù),為后續(xù)章節(jié)搭建了一個(gè)骨架。 第2 章:微服務(wù)開發(fā)框架。 本章我們將使用流行的 Spring Boot 來搭建微服務(wù)開發(fā)框架,對 Spring Boot 是什么,以及如何使用 Spring Boot 都做了描述,此外還對 Spring Boot 的重要產(chǎn)品級特性做了相關(guān)介紹。通過學(xué)習(xí)本章,大家可掌握 Spring Boot 的基本使用方法,并具備開發(fā)微服務(wù)接口的技能。 第3 章:微服務(wù)網(wǎng)關(guān)。 本章我們將學(xué)習(xí) Node.js 技術(shù),描述 Node.js 是什么,以及如何使用 Node.js,此外還對Node.js 的重要高級特性做了補(bǔ)充。最后我們將使用 Node.js 搭建一個(gè)微服務(wù)網(wǎng)關(guān)基礎(chǔ)框架,后續(xù)章節(jié)會(huì)對此框架進(jìn)行擴(kuò)展。 第4 章:微服務(wù)注冊與發(fā)現(xiàn)。 本章我們將學(xué)習(xí) ZooKeeper 框架,從認(rèn)識 ZooKeeper 開始,到如何使用 ZooKeeper。最后我們將使用 ZooKeeper 實(shí)現(xiàn)一個(gè)簡單的服務(wù)注冊組件,并結(jié)合第3 章中介紹的微服務(wù)網(wǎng)關(guān)框架,使用 Node.js 實(shí)現(xiàn)一個(gè)服務(wù)發(fā)現(xiàn)組件。 第5 章:微服務(wù)封裝。 本章我們將學(xué)習(xí) Docker 技術(shù),從了解 Docker 是什么開始,到如何使用 Docker,并通過手工和Dockerfile 的方式構(gòu)建 Docker 鏡像,此外還會(huì)介紹 Docker Registry 的使用方法,最后將以 Spring Boot 與 Docker 做一個(gè)整合來結(jié)束本章。通過學(xué)習(xí)本章,大家可熟練使用 Docker,為后續(xù)自動(dòng)化運(yùn)維提供基礎(chǔ)。 第6 章:微服務(wù)部署。 本章是上冊的最后一章,我們將使用 Gitlab 管理項(xiàng)目源碼,使用 Jenkins 搭建持續(xù)集成系統(tǒng),最后基于 Jenkins + Gitlab + Docker 搭建一款微服務(wù)的自動(dòng)化部署平臺。通過學(xué)習(xí)本章,大家可將開發(fā)與部署更加高效地銜接起來。 我要致謝的人 我要把這本書送給我的女兒,雖然她根本就看不懂,因?yàn)樗挥腥龤q。記得在她剛出生那年,我開始寫技術(shù)博客;在她一歲那年,我開始做開源項(xiàng)目;在她兩歲那年,我開始寫自己的第一本書;在她三歲之時(shí),這本書出版了。為了自己的事業(yè),我借用了陪伴她成長的時(shí)間,這個(gè)時(shí)間是我這輩子都無法償還給她的,希望她長大后能看到我送給她的這本書,或許她會(huì)理解我現(xiàn)在所做的一切。 我最想感謝的人還是我的妻子,她為了料理家務(wù)和照顧女兒,選擇放棄自己的事業(yè),全力支持我的事業(yè),這種“放棄自己,成全他人”的精神,我是無法做到的。我有這樣的好妻子,讓我感到無比驕傲,同時(shí)我也需要給自己更高的目標(biāo),回報(bào)她對我的付出。 十年前我離開自己的家鄉(xiāng),獨(dú)自來到上海打拼,這些年很少陪伴在自己父母的身邊,因?yàn)楣ぷ魈Χz忘了對父母的問候,我很愧疚自己所做的一切。感謝我的父母對我的無私付出,以及對我事業(yè)的認(rèn)可與鼓勵(lì),希望他們看到這本書后能為我感到高興。 感謝與我一起創(chuàng)業(yè)的伙伴們,大家能在一起共事是一種緣分,他們在工作上給我提供了許多幫助,和他們一起工作是我最開心的事情,我也能感受到自己在成長。他們還為本書提供了專業(yè)的建議,以及為本書提供了大量寶貴的實(shí)踐經(jīng)驗(yàn)。 感謝電子工業(yè)出版社博文視點(diǎn)的陳曉猛編輯,在寫作過程中曉猛多次鼓勵(lì)我,他曾說“寫書就是登山”,每當(dāng)我寫不動(dòng)了,想放棄了,他就會(huì)鼓勵(lì)我“快到山頂了”,他無形中成為了我的“鼓勵(lì)師”,讓我順利地寫完了這本書。 感謝為這本書做評審的專家們,他們的專業(yè)態(tài)度讓我非常感動(dòng)。為了給讀者提供更多的價(jià)值,他們給我提供了大量的建議,這些建議對我的幫助非常大,讓我在后續(xù)寫作道路上更有經(jīng)驗(yàn)了。 感謝一直支持我的讀者們,沒有你們一路的陪伴,我會(huì)失去寫作的動(dòng)力和方向。 最后我想說的是:我并不是微服務(wù)架構(gòu)專家,我只是一名微服務(wù)架構(gòu)的實(shí)踐者,只想把自己實(shí)踐的經(jīng)驗(yàn)分享給大家。由于本人學(xué)識有限,難免會(huì)有不足之處,還請讀者不吝賜教。 黃勇 2016 年7 月27 日于上海
黃勇,現(xiàn)任特贊公司 CTO,曾任阿里巴巴公司系統(tǒng)架構(gòu)師。對微服務(wù)架構(gòu)與大數(shù)據(jù)技術(shù)有深入研究,具有豐富的網(wǎng)站架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)與項(xiàng)目管理經(jīng)驗(yàn),擅長敏捷開發(fā)模式。國內(nèi)開源軟件推動(dòng)者之一,活躍于“開源中國”社區(qū)網(wǎng)站,Smart 開源框架創(chuàng)始人,圖書《架構(gòu)探險(xiǎn):從零開始寫Java Web框架》作者。熱愛技術(shù)交流,樂于分享自己的工作經(jīng)驗(yàn)與生活感悟。
第1章 微服務(wù)架構(gòu)設(shè)計(jì)概述
1.1 為什么需要微服務(wù)架構(gòu) 1.1.1 傳統(tǒng)應(yīng)用架構(gòu)的問題 1.1.2 如何解決傳統(tǒng)應(yīng)用架構(gòu)的問題 1.1.3 傳統(tǒng)應(yīng)用架構(gòu)還有哪些問題 1.2 微服務(wù)架構(gòu)是什么 1.2.1 微服務(wù)架構(gòu)概念 1.2.2 微服務(wù)交付流程 1.2.3 微服務(wù)開發(fā)規(guī)范 1.2.4 微服務(wù)架構(gòu)模式 1.3 微服務(wù)架構(gòu)有哪些特點(diǎn)和挑戰(zhàn) 1.3.1 微服務(wù)架構(gòu)的特點(diǎn) 1.3.2 微服務(wù)架構(gòu)的挑戰(zhàn) 1.4 如何搭建微服務(wù)架構(gòu) 1.4.1 微服務(wù)架構(gòu)圖 1.4.2 微服務(wù)技術(shù)選型 1.5 本章小結(jié) 第2章 微服務(wù)開發(fā)框架 2.1 Spring Boot 是什么 2.1.1 Spring Boot的由來 2.1.2 Spring Boot的特性 2.1.3 Spring Boot相關(guān)插件 2.1.4 Spring Boot的應(yīng)用場景 2.2 如何使用Spring Boot框架 2.2.1 搭建Spring Boot開發(fā)框架 2.2.2 開發(fā)一個(gè)簡單的Spring Boot應(yīng)用程序 2.2.3 運(yùn)行Spring Boot應(yīng)用程序 2.3 Spring Boot生產(chǎn)級特性 2.3.1 端點(diǎn) 2.3.2 健康檢查 2.3.3 應(yīng)用基本信息 2.3.4 跨域 2.3.5 外部配置 2.3.6 遠(yuǎn)程監(jiān)控 2.4 本章小結(jié) 第3章 微服務(wù)網(wǎng)關(guān) 3.1 Node.js是什么 3.1.1 Node.js快速入門 3.1.2 Node.js應(yīng)用場景 3.2 如何使用Node.js 3.2.1 安裝Node.js 3.2.2 使用Node.js開發(fā) Web應(yīng)用 3.2.3 使用Express框架開發(fā)Web應(yīng)用 3.2.4 搭建Node.js集群環(huán)境 3.3 使用Node.js搭建微服務(wù)網(wǎng)關(guān) 3.3.1 什么是微服務(wù)網(wǎng)關(guān) 3.3.2 使用Node.js實(shí)現(xiàn)反向代理 3.4 本章小結(jié) 第4章 微服務(wù)注冊與發(fā)現(xiàn) 4.1 ZooKeeper是什么 4.1.1 ZooKeeper樹狀模型 4.1.2 ZooKeeper集群結(jié)構(gòu) 4.2 如何使用ZooKeeper 4.2.1 運(yùn)行ZooKeeper 4.2.2 搭建ZooKeeper集群環(huán)境 4.2.3 使用命令行客戶端連接ZooKeeper 4.2.4 使用Java客戶端連接ZooKeeper 4.2.5 使用Node.js客戶端連接ZooKeeper 4.3 實(shí)現(xiàn)服務(wù)注冊組件 4.3.1 設(shè)計(jì)服務(wù)注冊表數(shù)據(jù)結(jié)構(gòu) 4.3.2 搭建應(yīng)用程序框架 4.3.3 定義服務(wù)注冊表接口 4.3.4 使用ZooKeeper實(shí)現(xiàn)服務(wù)注冊 4.3.5 服務(wù)注冊模式 4.4 實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)組件 4.4.1 定義服務(wù)發(fā)現(xiàn)策略 4.4.2 搭建應(yīng)用程序框架 4.4.3 使用Node.js實(shí)現(xiàn)服務(wù)發(fā)現(xiàn) 4.4.4 服務(wù)發(fā)現(xiàn)優(yōu)化方案 4.4.5 服務(wù)發(fā)現(xiàn)模式 4.5 本章小結(jié) 第5章 微服務(wù)封裝 5.1 Docker是什么 5.1.1 Docker簡介 5.1.2 虛擬機(jī)與Docker對比 5.1.3 Docker的特點(diǎn) 5.1.4 Docker系統(tǒng)架構(gòu) 5.1.5 安裝Docker 5.2 如何使用Docker 5.2.1 Docker鏡像常用操作 5.2.2 Docker容器常用操作 5.2.3 Docker命令匯總 5.3 手工制作Java鏡像 5.3.1 下載JDK 5.3.2 啟動(dòng)容器 5.3.3 提交鏡像 5.3.4 驗(yàn)證鏡像 5.4 使用Dockerfile構(gòu)建鏡像 5.4.1 了解Dockerfile基本結(jié)構(gòu) 5.4.2 使用Dockerfile構(gòu)建鏡像 5.4.3 Dockerfile指令匯總 5.5 使用Docker Registry管理鏡像 5.5.1 使用Docker Hub 5.5.2 搭建Docker Registry 5.6 Spring Boot與Docker整合 5.6.1 搭建Spring Boot應(yīng)用程序框架 5.6.2 為Spring Boot應(yīng)用添加Dockerfile 5.6.3 使用Maven構(gòu)建Docker鏡像 5.6.4 啟動(dòng)Spring Boot的Docker容器 5.6.5 調(diào)整Docker容器內(nèi)存限制 5.7 本章小結(jié) 第6章 微服務(wù)部署 6.1 Jenkins是什么 6.1.1 Jenkins簡介 6.1.2 自動(dòng)化發(fā)布平臺 6.1.3 安裝Jenkins 6.2 搭建GitLab版本控制系統(tǒng) 6.2.1 GitLab簡介 6.2.2 安裝GitLab 6.2.3 將代碼推送至GitLab中 6.3 搭建Jenkins持續(xù)集成系統(tǒng) 6.3.1 創(chuàng)建構(gòu)建任務(wù) 6.3.2 手工執(zhí)行構(gòu)建 6.3.3 自動(dòng)執(zhí)行構(gòu)建 6.4 使用Jenkins實(shí)現(xiàn)自動(dòng)化發(fā)布 6.4.1 自動(dòng)發(fā)布jar包 6.4.2 自動(dòng)發(fā)布Docker容器 6.5 本章小結(jié)
序一
微服務(wù),應(yīng)用開發(fā)的新起點(diǎn) 研究現(xiàn)在的軟件體系,不難發(fā)現(xiàn):現(xiàn)在的軟件專家們?nèi)孕枰c大量的需求、設(shè)計(jì)、代碼的細(xì)節(jié)打交道。出于項(xiàng)目實(shí)施時(shí)間、投入資源等方面的限制,軟件往往以實(shí)現(xiàn)若干具體的用戶功能需求為目標(biāo)。專家們沒有時(shí)間,也沒有精力去追求軟件的美學(xué)目標(biāo)。日復(fù)一日,隨著用戶功能需求的變化,軟件項(xiàng)目成為大量代碼的隨機(jī)而無序的堆積,奇丑無比。許多功能成一旦完成項(xiàng)目,就恐避之不及,不愿再去碰自己幾個(gè)月來夜以繼日的勞動(dòng)成果。 黃勇的《架構(gòu)探險(xiǎn):輕量級微服務(wù)架構(gòu)》一書,融合了軟件設(shè)計(jì)的最新理念,系統(tǒng)性介紹了微服務(wù)的設(shè)計(jì)、開發(fā)、運(yùn)維等各方面,書中不僅僅是技術(shù)的描述和講解?吹近S勇在技術(shù)方面這么多年的不斷積累和提煉,我很欣慰。 微服務(wù)的興起和移動(dòng)應(yīng)用的快速發(fā)展相對應(yīng)。移動(dòng)應(yīng)用的基本框架是事件和響應(yīng),用戶在碎片化的時(shí)間和地點(diǎn),按自己的節(jié)奏完成綜合起來是一個(gè)復(fù)雜的事情。這不同于傳統(tǒng)軟件,往往是流程和復(fù)雜業(yè)務(wù)驅(qū)動(dòng)的過程和算法。移動(dòng)計(jì)算所需要的跨界溝通和協(xié)作,在傳統(tǒng)應(yīng)用架構(gòu)中則很難實(shí)現(xiàn),而這恰恰是微服務(wù)的優(yōu)勢所在。微服務(wù)從技術(shù)的視角,使用各種協(xié)議和框架,便于不同開發(fā)者軟件碎片之間的協(xié)同工作。但是各種軟件交互協(xié)議并不稀缺,總是不斷地出現(xiàn)各種協(xié)議的標(biāo)準(zhǔn)。微服務(wù)的成功使用,需要注意微服務(wù)在軟件重用方面的能力,正是這種能力,使得微服務(wù)的使用更加具有普遍的意義。不同于傳統(tǒng)的構(gòu)件或服務(wù),微服務(wù)的調(diào)用參數(shù)接口具有更大的融合性和靈活性。微服務(wù)的調(diào)用,不需要拘泥于嚴(yán)格的數(shù)據(jù)類型,而是遵循更高層次的語法結(jié)構(gòu)。特別是應(yīng)用軟件走向人工智能的時(shí)代,微服務(wù)將更深的演化帶來更智能的微服務(wù)對接。微服務(wù)對于傳統(tǒng)的過程式軟件,是一個(gè)破壞性的改變。這一特征既給了微服務(wù)無限的想象空間,也給實(shí)施帶來了很多挑戰(zhàn)。并不是每個(gè)應(yīng)用,特別是成熟領(lǐng)域的軟件應(yīng)用都適合微服務(wù)的改造。但是對于移動(dòng)應(yīng)用領(lǐng)域和跨應(yīng)用跨企業(yè)的對接,是一個(gè)很必要的選擇。 我早年寫了一些關(guān)于 SOA 和“面向構(gòu)件”方面的東西,有人問我:“SOA和微服務(wù)有何差異?”我認(rèn)為:SOA 的核心還是企業(yè)級應(yīng)用。最大的差異,是微服務(wù)對于調(diào)用參數(shù)的宏定義,語義的適應(yīng)性,使得微服務(wù)的復(fù)用性大大提升。比較有意思的是,新的微服務(wù)調(diào)用參數(shù)體系,和普元EOS非常類同,15年前我們就是這樣設(shè)計(jì)的。微服務(wù)是SOA后的一個(gè)突破性的東西,不是簡單的落地,SOA 本身也有落地,比如普元的EOS就是SOA落地后的產(chǎn)品。SOA到微服務(wù)一方面是網(wǎng)絡(luò)協(xié)議的提升,更加適應(yīng)跨應(yīng)用跨企業(yè)的服務(wù)調(diào)用。還有人問我:“構(gòu)件和微服務(wù)到底有什么區(qū)別?”我認(rèn)為:構(gòu)件是裝配、開發(fā)的視角,一臺機(jī)器由一個(gè)個(gè)構(gòu)件裝配而成;服務(wù)是運(yùn)行、傳動(dòng)的視角,能量從活塞到輪胎傳播。微服務(wù)用代碼來開發(fā),但微服務(wù)可以當(dāng)成一個(gè)構(gòu)件裝配到應(yīng)用。兩邊視角不同,但是微服務(wù)給了軟件模塊更多生命力。構(gòu)件是靜態(tài)的,服務(wù)是動(dòng)態(tài)的。 這本書對于微服務(wù)架構(gòu)的介紹非常完整,如果你和你們的企業(yè)正在開發(fā)移動(dòng)應(yīng)用,或者對已有的應(yīng)用正在規(guī)劃架構(gòu)性的重構(gòu),這本書很值得一讀。 黃柳青 序二 微服務(wù),我們?nèi)绾闻c你相處 微服務(wù)來了,有了“服務(wù)”這兩個(gè)字,這注定又是個(gè)一說就明白、一舉例就糊涂、一討論就吵架的概念。微服務(wù)的出現(xiàn)有其必然的商業(yè)背景和架構(gòu)哲學(xué),如何更好地認(rèn)識微服務(wù)的內(nèi)涵、如臂使指地應(yīng)用微服務(wù)架構(gòu),還是有著很多挑戰(zhàn)的,這也許就是本書被命名為“架構(gòu)探險(xiǎn)”的原因。 企業(yè)數(shù)字化轉(zhuǎn)型驅(qū)動(dòng)架構(gòu)升級 互聯(lián)網(wǎng)經(jīng)濟(jì)深刻改變了我們身邊的商業(yè)環(huán)境,消費(fèi)者的生活方式日益數(shù)字化,人們可以在任何時(shí)間、任何地點(diǎn)利用線上、線下渠道體驗(yàn)無縫購物,運(yùn)用社交媒體表達(dá)自我,企業(yè)也在運(yùn)用多種技術(shù)手段,發(fā)揮數(shù)字化潛力,改善客戶聯(lián)系,促進(jìn)企業(yè)業(yè)務(wù)模式的轉(zhuǎn)型。Gartner認(rèn)為,數(shù)字化就是把人、事、物和商業(yè)聯(lián)系起來,建立新的商業(yè)模式。未來的企業(yè)都將是IT企業(yè),IT將從后臺走向前臺,從ERP、CRM等內(nèi)部流程優(yōu)化為主的業(yè)務(wù),逐步轉(zhuǎn)向內(nèi)外兼修的模式,從而實(shí)現(xiàn)商業(yè)創(chuàng)新。 這一變化要求IT架構(gòu)更加靈活地與上下游企業(yè)協(xié)作,更加快速地響應(yīng)客戶的個(gè)性化需求,更加彈性地應(yīng)對無時(shí)不在的客戶請求并提供良好的客戶體驗(yàn),同時(shí)云計(jì)算、大數(shù)據(jù)等技術(shù)的出現(xiàn)也為上述改變提供了新的技術(shù)選擇,我們正面臨B/S多層架構(gòu)出現(xiàn)后新的一次架構(gòu)升級,而微服務(wù)架構(gòu)就在這個(gè)架構(gòu)升級過程中應(yīng)運(yùn)而生。 分而治之的哲學(xué)是微服務(wù)的理論基礎(chǔ) 把大的問題分解為容易解決的小問題,找到小問題的解決辦法,再來解決大問題,這就是分而治之的哲學(xué)。正如萬事萬物由分子、原子組成一樣,軟件也可以分解為基本單元,以這樣的基本單元進(jìn)行開發(fā)、測試、維護(hù),是解決大規(guī)模系統(tǒng)建設(shè)的思路。分而治之首先要解決如何分的問題,企業(yè)軟件的分法應(yīng)該是以業(yè)務(wù)驅(qū)動(dòng)的,而不是以技術(shù)驅(qū)動(dòng)的,也就是分解為獨(dú)立的業(yè)務(wù)邏輯,而這樣的不可再分的業(yè)務(wù)邏輯就是微服務(wù)。 凡事有一利必有一弊,細(xì)分為微服務(wù)后,勢必帶來部署、測試、信息集成難度的提高,分而治之除了“分”,還需要“治”。傳統(tǒng)恐龍型ERP是一個(gè)面向組織的軟件,完備、復(fù)雜、響應(yīng)變化慢,適合業(yè)務(wù)穩(wěn)定的情況,而在數(shù)字化時(shí)代,客戶個(gè)性化的要求讓我們從這種面向組織的軟件逐漸演變?yōu)槊嫦騻(gè)體的軟件。例如,從前的EHR軟件是為人力資源部門服務(wù)的,整體開發(fā)、整體實(shí)施,而現(xiàn)在我們會(huì)從個(gè)體的角度規(guī)劃軟件,可以先從招聘專員開始做一個(gè)面試管理的流程,逐步推出新的流程,完善現(xiàn)有的流程。這些面向個(gè)體的流程就是微應(yīng)用,企業(yè)應(yīng)用將由無數(shù)個(gè)微應(yīng)用組成。微服務(wù)則是一個(gè)技術(shù)概念,能更好地解決微應(yīng)用的技術(shù)實(shí)現(xiàn)問題,是一個(gè)事物的不同側(cè)面,所謂“橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同”,微服務(wù)和微應(yīng)用是事物的一體兩面。正因?yàn)槲⒎⻊?wù)實(shí)際就是一個(gè)業(yè)務(wù)邏輯,因此做好微服務(wù)需要從微應(yīng)用的維度考慮,將分解開的邏輯形成一個(gè)整體,要從多渠道接入、客戶體驗(yàn)、數(shù)據(jù)管理、應(yīng)用交付、運(yùn)維全方位的視角考慮,這就是分而治之中實(shí)現(xiàn)“治”的體驗(yàn),也是微服務(wù)架構(gòu)需要解決的問題。 站在SOA的肩膀上踐行微服務(wù) 微服務(wù)是一個(gè)新概念,但這絕不是一個(gè)全新架構(gòu),更不是一個(gè)包治百病的架構(gòu)。由于有服務(wù)二字,很容易讓人聯(lián)想到面向服務(wù)架構(gòu)(SOA),其實(shí)微服務(wù)架構(gòu)屬于應(yīng)用技術(shù)架構(gòu),和以 B/S 為代表的三層架構(gòu)相對應(yīng),強(qiá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ù)如何實(shí)現(xiàn)并不關(guān)注。因此,面向服務(wù)架構(gòu)的服務(wù)應(yīng)該是一個(gè)業(yè)務(wù)意義的服務(wù),而微服務(wù)是系統(tǒng)中的技術(shù)服務(wù),更關(guān)注服務(wù)的實(shí)現(xiàn),雖然提供了業(yè)務(wù)意義的服務(wù),但是不能混為一談。微服務(wù)使用也不是無限度的,事實(shí)上由于數(shù)據(jù)一致性等問題的限制,不能無限度拆分微服務(wù),可以把微服務(wù)分為系統(tǒng)對外提供的遠(yuǎn)程服務(wù)、系統(tǒng)內(nèi)部的遠(yuǎn)程服務(wù)和系統(tǒng)內(nèi)部的本地服務(wù),顯式聲明、明確職責(zé)。事實(shí)上,在企業(yè)架構(gòu)上使用 SOA 支撐業(yè)務(wù),而在應(yīng)用技術(shù)架構(gòu)上使用微服務(wù)架構(gòu),是一個(gè)合適的選擇。 黃柳青博士是我和黃勇共同的導(dǎo)師,他在2004年所著的《軟件的涅槃》一書中指出:“互聯(lián)網(wǎng)時(shí)代的企業(yè)應(yīng)用定義,正發(fā)生革命性的變化…橫向的部門互動(dòng)、實(shí)時(shí)的企業(yè)間互動(dòng)、多樣的交互渠道、靈活的業(yè)務(wù)規(guī)則,使得原有意義上的獨(dú)立應(yīng)用不復(fù)存在…對軟件設(shè)計(jì)者來說,能直觀地分割并具有最小內(nèi)部耦合的軟件結(jié)構(gòu)是簡約之美…美的軟件是軟件企業(yè)與軟件開發(fā)者的終極目標(biāo)”,那時(shí)候他把這種全新的軟件生產(chǎn)模式稱為“面向構(gòu)件”。回頭看來,微服務(wù)正是“面向構(gòu)件”在數(shù)字化時(shí)代的解讀,用微服務(wù)架構(gòu)實(shí)現(xiàn)軟件之美,加速企業(yè)數(shù)字化轉(zhuǎn)型。 焦烈焱,普元CTO
你還可能感興趣
我要評論
|