1. 程式人生 > >雲原生Java:SpringBoot、SpringCloud與CloudFoundry彈性系統設計

雲原生Java:SpringBoot、SpringCloud與CloudFoundry彈性系統設計

網站

更多書籍點選進入>> CiCi島

下載

電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支援正版,喜歡的請購買正版書籍

封頁

封頁

編輯推薦

傳統企業與亞馬遜、Netflix和Etsy這類企業之間的區別是什麼?這些公司有完善雲原生開發方法,這些方法使得他們能夠保持優勢並領先於競爭對手。本實踐指南向Java/JVM開發人員展示如何使用Spring Boot、Spring Cloud和Cloud Foundry更快更好地構建軟體。很多組織都已涉足雲端計算、測試驅動開發、微服務,以及持續整合和交付領域。本書作者Josh Long和Kenny Bastani將帶您深入研究這些工具和方法,並幫助您將傳統應用程式轉變為真正的雲原生應用程式。本書四部分內容分別介紹: √ 基礎知識:瞭解雲原生思維背後的動機;配置和測試Spring Boot應用程式;將您的傳統應用程式遷移至雲端 √ 微服務:使用Spring構建HTTP和RESTful服務;在分散式系統中路由請求;建立更接近資料的邊緣服務 √ 資料整合:使用Spring Data管理資料,並將分散式服務與——Spring對事件驅動、以訊息傳遞為中心架構的支援——整合起來 √ 生產:讓您的系統可觀察;使用服務代理來連線有狀態的服務;瞭解持續交付背後的重要思想

內容簡介

無論是傳統IT行業,還是網際網路行業,都正處於行業歷劇烈的變革中 :大量的系統正在從傳統的IT架構轉向基於雲的架構, 開發模式也正在從開發和運維分工的傳統模式,逐漸轉向統一的“DevOps”模式。Java技術已經進入了新的生命週期,大量被用於構建現代的、基於雲的應用程式。 本書詳細闡述了開發雲原生應用程式的機遇和挑戰,明確指出了成功實現的方向,並且重點介紹了微服務框架Spring Boot。Spring Boot可以輕鬆建立任何粒度的 Spring服務,並部署到現代的容器環境中。本書主要面向正在使用 Spring Boot、SpringCloud和Cloud Foundry, 以便更快、更好地構建軟體的Java/JVM 開發人員。本書一共分為4個部分共15章。第1章和第2章介紹了雲原生思想產生的背景,然後介紹了Spring Foundry。第3章介紹瞭如何配置Spring Boot應用程式。第4章介紹瞭如何測試Spring應用程式,從如何測試

簡單的元件到測試分散式系統。第5章介紹了可以將應用程式遷移到Cloud Foundry等雲平臺的輕量級重構方式。第6章介紹瞭如何使用Spring構建HTTP和RESTful服務。第7章介紹了在分散式系統中控制請求進出的常用方法。第8章介紹瞭如何構建一個響應外部請求的服務。第9章介紹瞭如何使用Spring Data在Spring中管理資料。這為領域驅動的思想奠定了基礎。第10章介紹瞭如何使用Spring中事件驅動、訊息中心化的能力,來整合分散式服務和資料。第11章介紹瞭如何利用雲平臺(如Cloud Foundry)的能力來處理長期執行的工作。第12章介紹了在分散式系統中管理狀態的一些方法。第13章介紹瞭如何構建具備可觀測性和可操作性的系統。第14章介紹瞭如何構建類似於Cloud Foundry平臺的服務代理。第15章介紹了持續交付背後的思想。

作者簡介

Josh Long是一名Spring developer advocate,是InfoQ.com Java團隊的編輯。他也是多部著作的主要作者,如Spring Recipes,2nd Edition(Apress)。Kenny Bastani是Pivotal的一名Spring developer advocate。作為一名開源貢獻者和軟體架構博主(WWW.kennybastani.com),他為軟體開發者提供關於構建事件驅動的微服務和無伺服器架構方面的教程。他也在一些行業會議上做演講,如OSCON、SpringOne Platform和GOTO大會。 宋淨超,就職於螞蟻金服,Kubernetes及雲原生應用佈道師,ServiceMesher社群創始人。樂於分享,擁抱開源,活躍於Kubernetes及微服務開發者社群。經常作為講師在Qcon、ArchSummit等技術會議上進行分享,也常參與雲棲大會等行業會議和線下Meetup。喜歡在個人部落格(https://jimmysong.io)上發表見解,釋出開源教程。業餘時間喜歡攝影和旅遊。 張若飛,TGO會員,曾任易通貸CTO,宜人貸首席架構師,在雅虎北研、金山雲、POLYCOM等知名公司擔任架構師。十餘年網際網路研發及技術管理經驗,管理過超過百人的技術研發團隊,對搭建海量資料、大型分散式系統有豐富經驗,對網際網路金融領域有廣泛涉獵。著有十餘本技術譯著,包括《Grails權威指南》《給大忙人看的JavaSE 8》《程式碼不朽:編寫可維護軟體的十大原則》《面向可伸縮架構》等書,總計300餘萬字。

目 錄

序言(James Watters)  xvii

序言(Rod Johnson)   xix

前言   xxi

 

第Ⅰ部分 基礎知識

 

第1 章 雲原生應用程式   3

第2 章 訓練營:Spring Boot 和Cloud Foundry   21

第3 章 符合十二要素程式風格的配置   67

第4章 測試   85

第5 章 遷移遺留的應用程式   115

 

第Ⅱ部分 Web 服務

 

第6 章 REST API   137

第7 章 路由   179

第8 章 邊緣服務   197

 

第Ⅲ部分 資料整合

 

第9 章 資料管理   251

第10 章 訊息系統   303

第11 章 批處理和任務   325

第12 章 資料整合   363

 

第IV 部分 生產

 

第13 章 可觀測的系統   411

第14 章 服務代理   469

第15 章 持續交付   497

 

第V 部分 附錄

 

附錄A 在Java EE 中使用Spring Boot   527

前 言

序言(James Watters)

你不能兩次踏入同一條河流。

——赫拉克利特(希臘哲學家)

2015 年夏天,在威尼斯海灘的一家咖啡店裡,我坐在Josh Long 旁邊,我知道我們要開始幹一件大事了。因為開發者不斷要求瞭解我們的新技術——Spring Boot,所以他的行程幾乎都被排滿了。我們的雲原生平臺Pivotal Cloud Foundry,正在迅速成為流行的雲原生應用程式執行時環境。隨著Spring Boot 越來越受到歡迎,Spring Cloud 的到來有望成為一個爆炸點。“這將是一件大事,而且正在發生。”我跟他說。

工作中的力量是巨大的。在CIO 全力尋求如何提升開發者生產力的時候,Spring Boot 提供了一個微服務和DevOps 友好的企業級開發方式。 隨著Spring Boot 和PCF 之間的整合日益完善,生產環境部署成為一個簡單的流水線和API 呼叫工作。Spring Cloud 不僅提供了世界上第一個微服務網格,並且誕生了一種新的、基於雲的Java 標準。

這些技術的獨特組合,不僅僅是表面看上去開發風格的變化,而是改變了大型組織的交付結構。由於對傳統Java 應用程式來說,伺服器和運維的複雜性太高,因此開發人員被禁止與生產環境接觸。我們經常聽到,客戶部署一次程式要花費幾天這樣恐怖的故事。

我們知道我們的平臺會改變他們的生活。有一些粉絲客戶開始給我們寫郵件,描述他們在PCF 上採用Spring Boot 之後,如何將生產環境的更新從幾個月的時間,降低到幾分鐘之內。

自2015 年以來,現實已經證明,所有遷移到這種開發方式的企業,開發速度至少提高了50%,超過了MTTR(平均維護時間)/ 停機時間的一半,並且他們與許多小型的平臺團隊一起運行了成千上萬的JVM 例項。 最重要的是,採用雲原生Java 的企業,可以拿出更多的時間來思考他們的客戶和市場,同時對開發和運維複雜性的擔憂大大減少。

本書對現代企業軟體設計中重要的模式,逐一進行了詳細的論述。 在許多例子中,你可以看到Josh 和Kenny 與許多世界頂級企業一同努力所帶來的實踐經驗。

我建議每個開發者和IT 主管,做好充分的準備,挖掘企業的適應性和柔韌性,來享受這份工作。

James Watters,Pivotal Cloud Foundry 高階副總裁,

Pivotal,@wattersjames

 

序言(Rod Johnson)

我們正處於行業歷史上最劇烈的變革中:從傳統架構轉向雲的架構,從傳統開發和運維分工轉向統一的DevOps。本書可幫助你進行轉型,在本書中詳細闡述了開發雲原生應用程式的機遇和挑戰,並明確指出了成功實現的方向。

轉型不會一夜之間發生。這本書最好的一點,是它強調了如何將以現有經驗構建的環境,逐步遷移到雲上。特別是第5 章中“用Spring 實現服務平等”一節,提供了一個傳統企業轉向雲端的優秀實戰案例。

本書是理論和實踐的完美結合,既解釋了現代應用的架構原理,又給出了有效的、經過驗證的實現方法。實踐需要我們做出選擇,不只是程式語言的選擇,更主要是選擇開源框架,因為現代應用程式幾乎都是建立在通用問題的開源解決方案之上的。如果你選擇了Java 語言,或是對程式語言持開放態度——本書就是你需要的書。

我的死亡報告是誇大的。

——馬克· 吐溫

幾年前,報道Java 死亡的訊息不絕於耳。今天,Java 仍在蓬勃發展,本書會告訴你為什麼。Java 已經進入了新的生命週期,部分原因是因為Java 技術已經用於構建現代的、基於雲的應用程式了。使Netflix 成功的兩個關鍵因素,就是開源專案和Spring。本書在這兩個方面都做得非常出色。

Spring 最初的核心思想,是降低過去Java EE 的複雜性,它經受住了時間的考驗,成為了雲應用的完美基礎。十多年前,我們曾經談論過“Spring 三原則”:依賴注入、可移植服務抽象和AOP。如今,將業務邏輯與環境完美分離比以往任何時候都重要,所有這一切都沒有發生變化。

本書的重點是介紹Spring Boot,它是在微服務時代一種使用Spring 的新方式,我們無法拒絕使用它。 Spring Boot 可以輕鬆建立任何粒度的Spring 服務,並部署到現代的容器環境中。傳統的“企業級”Java 應用程式,都是隻能執行在更大伺服器上的單體程式,而Spring Boot 以它的簡單和效率改變了這一切:服務聚焦精準,以足夠的伺服器來執行。

書中的案例展示了Spring 團隊的最新工作,例如,Spring Cloud Stream 和改進的整合測試支援,以及與Netflix 開源專案不斷的整合。

我很高興看到Spring 的持續創新,以及專注於簡單化開發人員的工作。雖然在過去的5年中,我只是以一個使用者的身份與Spring 進行了互動,但是看到它繁榮發展,成功解決了許多複雜的問題,還是很高興的。今天,我仍然在Atomist 從事這類工作,我們的目標是讓所有事情自動化,讓Spring 來為所有的開發團隊和開發過程做Java 應用程式的事情。Spring 為Java 開發人員所關心的每件事情,都提供了一個簡單的、有效的結構和抽象,同時,Atomist 也希望為專案原始碼、系統構建、問題跟蹤器、環境部署等提供同樣的東西。無論是為了提高團隊協作能力而使用Slack 管理專案,還是為了監控部署事件,Atomist 都可以提供強大的開發自動化能力。

自動化的基本組成部分是測試。我特別喜歡本書對測試的介紹,書中對如何解決微服務測試中的許多難題提出了寶貴的意見。我也喜歡書中許多註釋詳盡的程式碼清單,作者很好地堅持了這個O'Reilly 一貫的風格。

我非常榮幸,可以為同道好友作序。Josh 是一個善於溝通的人。他的文字功底和他現場編寫的程式碼一樣好。Josh 和Kenny 是兩位充滿激情的、好奇並且見多識廣的導遊,很高興與他們一起走過這個旅程。我在旅途中學到了很多東西,我相信你也會學到很多。

Rod Johnson,Spring Framework、Atomist 創始人兼CEO,

twitter 賬號@springrod

前言

更快!更快!更快!!每個人都想走得更快,但很少人知道如何做到。市場的需求在不斷增長,機會也越來越多,但我們中的一些人根本無法跟上節奏!傳統企業與亞馬遜,以及Netflix 和Etsy 之間的區別是什麼?我們知道這些公司已經成長到擁有令人瘋狂的規模,但不知什麼原因,它們仍然能夠保持競爭優勢,保持領先地位。它們究竟是如何做到的?

一個想法從概念到實現,需要做大量的工作。要了解一個想法,既要看它的效用,也要看它的價值。這些工作要經歷很多不同的環節,從涉及使用者體驗的產品管理到測試,再到執行,最終才進入生產環境。從歷史的角度看,這其中的每一道工序都會讓整個工作變慢。我們作為一個開源社群,隨著時間的推移,已經優化了這個流程中的一些部分。

我們有了雲端計算,所以不再需要機架和機櫃。我們使用測試驅動開發和持續整合來實現自動化測試。我們以小步迭代的方式來發布軟體,通過微服務來減小程式碼變更的範圍和成本。我們擁抱DevOps 背後的理念(武裝的同理心)來增強對整個系統的瞭解,增進開發人員與運維人員之間的感情,減少不同優先順序事項之間的巨大協同成本。這些事情本身並不有趣,改進也不大,但是如果將它們結合起來,我們就可以將整個價值鏈中的每件重要事情都隔離開來。總而言之,這些東西就是我們所說的雲原生。

作為行業中的一員和理論的實踐者,軟體開發人員今天處於一個激情的時代。我們在基礎設施、測試、中介軟體、持續整合和交付、開發框架和雲平臺等方面,都擁有可靠的、開源的、穩定和自助服務的解決方案。這些基礎條件讓企業可以專注於如何低成本地提供高商業價值,以及擴張到更大的規模。

誰應該閱讀本書

本書主要面向正在使用Spring Boot、Spring Cloud 和Cloud Foundry,以更快、更好地構建軟體的Java / JVM 開發人員。相信你已經聽說過微服務的概念,也許你已經看到了Spring Boot 的不斷髮展,並且想知道為什麼今天大多數企業都在使用Cloud Foundry。

那麼本書可以告訴你答案。

為什麼我們寫這本書

在Pivotal,我們通過傳授持續交付的知識,以及通過Cloud Foundry、Spring Boot 和Spring Cloud 來幫助客戶向數字化企業轉型。我們已經知道了什麼是可行的(以及什麼不可行),並且希望把客戶的實踐和我們的經驗總結出來。我們並不想面面俱到,但我們試圖清晰地向你介紹整個雲原生世界的關鍵概念。

如果你像我們一樣,你不會從前到後來閱讀本書。如果你真的像我們一樣,你通常不會閱讀前言。但是,既然你看到了這裡,我們給出以下一些建議:

y 無論你是做什麼的,請閱讀第 1 章和第 2 章。這兩章為本書的其餘部分奠定了基礎。如果沒有第1 章中所介紹的動機和業務背景,本書中所有的技術討論就都沒有了意義。而所有的技術討論都依賴於在第2 章中所建立的基礎。

y 第 3 ~ 6 章介紹了任何 Spring 開發人員都應該注意的事項。這些概念不僅適用於較舊版本的Spring 應用程式,也適用於新的應用程式。第5 章介紹瞭如何同時相容新舊版本的應用程式(無論是否使用了Spring)。

y 第7章和第8章介紹了一些基於HTTP的微服務系統中的概念,包括安全性和路由。

y 第 9 ~ 12 章可以幫助你更好地管理和處理分散式系統中的資料。

y 第 13 章介紹了一個真正的核心概念,因為它依賴於其他一些技術概念,所以我們在本書前半部分介紹核心概念和測試時沒有介紹它。可運維的應用程式應該是可觀測的。儘早瞭解本章的基本原理,會幫助你理解本書的其他內容。

y 第 14 章介紹瞭如何使用 Spring(一個雲原生的開發框架)來構建平臺和雲端的元件。本章對開放服務代理的討論尤為深刻。

y 最後,第15章提煉了有關持續交付的知識。整本書是按照持續交付的方式編寫的,這對於我們正在努力做的事情至關重要,因為我們選擇用結果來證明一切。務必閱讀本章。

線上資源

我們提供了很多有用的線上資源來幫助你理解書中的內容:

y 本書的程式碼可以在 GitHub 資料庫(http://github.com/cloud-native-java/)中找到。

y 從 Spring 網站(http://spring.io/)上能找到關於 Spring 的一切資料,包括文件、技術問答論壇等。

y Cloud Foundry 網站(http://cloudfoundry.org)是由 Cloud Foundry 基金會的所有貢獻者通力完成的。你會在上面找到相關的視訊、教程、新聞等。

使用程式碼示例

你可以從http://github.com/Cloud-Native-Java 下載補充材料(程式碼示例、練習等)。

這本書是為了幫助你完成工作而編寫的。一般來說,如果本書提供了示例程式碼,那麼你可以在程式和文件中使用它們。除非你大量使用本書中的程式碼,否則不需要與我們聯絡。例如,編寫一段使用了本書中多段程式碼的程式不需要我們授權。銷售或者發行O'Reilly書中程式碼示例的CD-ROM 需要授權。引用本書內容和示例程式碼來回答問題不需要授權。

將本書中重要的示例程式碼用於產品文件中需要授權。

使用我們的程式碼時,希望你能標明它的出處。出處一般要包含書名、作者、出版商和ISBN,例如,“Book Title by Josh Long and Kenny Bastani (O’Reilly). Copyright 2017 Josh Long, Kenny Bastani, 978-1-449-37464-8.”。

如果還有其他使用程式碼的情形需要與我們溝通,可以隨時與我們聯絡:[email protected]