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