【新書推薦】《ASP.NET Core微服務實戰:在雲環境中開發、測試和部署跨平臺服務》 帶你走近微服務開發
《ASP.NET Core 微服務實戰》譯者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-translator/
“微服務”的概念在 2014 年正式提出之後,越來越多的團隊開始用它來設計自己的業務系統,各種微服務框架和開發過程管理方法也同時興起、不斷成熟。微服務設計方法清晰地定義了各個開發團隊的業務邊界,微服務框架以不同的方式實現了服務之間的協作與整合,根據康威定律我們可以推導這樣一種產品開發方法必然會對映到人員協作方式上去。還有同步興起的 DevOps 運動,它及時恰當地補齊了微服務開發過程中的技術方法,讓微服務生態如虎添翼。
經過幾年的積累,人們開始意識到,微服務從概念到實現,最後推廣到整個組織,這整個過程期間存在大量的挑戰:服務之間的依賴管理、大量服務例項的運維、單個服務的獨立部署,以及承擔不同角色的微服務在同一個生態系統中的身份認證等,都開始成為微服務團隊需要直接面對的挑戰。與此同時,各類微服務框架也層出不窮,讓開始接觸微服務的開發人員眼花繚亂,既難以區分它們的優劣、做出合適的選型,又難以找到高效的學習路徑。
在 .NET 技術領域,微服務的挑戰比起很多其他技術棧有過之而無不及。.NET 技術在企業應用開發領域有著長久的運用,因此有大量的存量應用需要面向服務化改造。而 .NET Core 技術作為新一代 .NET 技術方向,無論是這一技術生態自身的完整性,還是基於它的微服務框架體系,都處於持續的完善之中。最後,在傳統的企業應用開發領域,並沒有普遍採用持續交付等實踐,當時所開發的應用也難以滿足雲原生應用所要求的諸多特性,因此改造過程難度較大。
所幸 .NET Core 作為全新的 .NET 技術,它不僅完全開源、跨平臺,更面向雲原生開發進行了大量而細緻的優化。它完全模組化,不依賴特定作業系統,同時其檔案系統、網路和配置等基礎功能模組對跨平臺、命令列等現代化輕量級開發所要求的特性提供了優秀的支援。正是由於 .NET Core 作為基礎開發平臺天然適合雲原生開發,因此基於 ASP.NET Core 開發微服務也天然具有這些優勢。
本書“麻雀雖小,五臟俱全”,它從 .NET Core 開發環境安裝開始,緊接著詳細介紹了持續交付、API 優先和測試驅動等重要開發方法和思想。本書探討了人們對微服務的各種理解,以實際專案從各方面體現出本書作者對微服務的全方面詮釋,引導讀者在直觀的體驗中建立自己的理解;同時,本書還主張把微服務和雲原生實踐結合運用,書中通過解析十二因子應用的各項特性,並分析它們在本書示例專案中的體現,讓讀者對微服務和雲原生的結合更為體系化。在本書的講解過程中,每當遇到可能存在不同做法的場景,作者總是詳細論述各項考量、仔細比較各種可能的做法,引發讀者思考;同時,本書還大量探討了傳統應用開發中的典型做法,以及在微服務和雲原生開發時應該採納的新方法,仔細解析其中緣由,為存量應用的改造提供了直接指導。
在本書英文原版寫作時,.NET Core 還處於早期的 1.1 版本,而現在中文版翻譯期間,.NET Core 的最新版已經是 2.2 版了。為了讓讀者在基於最新版 .NET Core 練習書中的示例專案時更為順暢,譯者對書中所涉及的示例程式碼進行了升級。在升級過程中,部分程式碼需要經過改寫才能與新版本的執行時或者依賴模組配合工作。讀者在使用書中的程式碼時,請自行將書中所涉及的 GitHub 倉庫地址由 https://github.com/microservices-aspnetcore 替換為 https://github.com/microservices-aspnetcore-zh ,在使用 Docker 映象的方式執行示例專案時,將書中的 Docker 映象由 dotnetcoreservices
字首替換為 dotnetcoreserviceszh
。如果使用翻譯版的程式碼遇到問題,請在這些 GitHub 倉庫中提交 issue,譯者將樂意為讀者解答各類常見問題。
限於譯者水平等各方面原因,本書在翻譯時難免留下一些紕漏與錯誤,如承蒙讀者指正,則譯者將倍感榮幸,其他讀者也將一起獲益。請訪問本書中文版程式碼倉庫 https://github.com/microservices-aspnetcore-zh 或者使用電子郵件 [email protected] 與譯者取得聯絡。
本書中文版的引進必將為 .NET 技術領域的微服務實踐和雲原生技術的普及做出重要貢獻。在此,譯者特此感謝清華大學出版社的大力支援,感謝張善友老師為本書譯文提出的寶貴建議,感謝曾一起共事的翻譯小組 WorkSharp 的同事們、特別是劉夏先生的指導,感謝社群中關注本書的各位熱心人士的激勵和幫助。最後,最需要致以真誠感謝的,是時常關心我的翻譯工作、提醒我及時休息的父母;以及忍受我用幾個月的業餘時間來翻譯、卻仍然要在翻譯時隨時提供參謀的愛人張聖奇:是你們無限的耐心和持續的支援才讓本書的翻譯工作得以順利完成。
以下是我寫的推薦:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
幾乎所有的當代軟體工程都專注於縮短產品的上市時間。微服務是一種以服務為導向的演進式體系結構模式, 它優雅地消除了組織摩擦, 讓團隊和工程師們擁有在不斷地進行交付、迭代和改進時所需的自主權。可以預見,雲原生時代的應用都是以微服務的形式出現。
關於微服務,有不少書籍堪稱經典。但結合最新的Web框架ASP.NET Core來講解微服務的書籍卻不多。本書完整的介紹了使用ASP.NET Core進行微服務開發時的思路、步驟和工具,是一本不可多的的必讀手冊,本書由於成書較早,其示例程式碼所基於的.NET Core版本略顯陳舊,譯者的努力一定程度上彌補了這一問題。最重要的是,書中用大量篇幅講述的關於開發功能強大且具有高伸縮性和韌性的微服務的思想不會過時的。另外,本書還關注使用ASP.NET Core實現雲原生模式,以及要讓應用成為雲原生生態中的好公民需要關注的方方面面。這些在具體技術框架之外的經驗與思考,更是彌足珍貴。
微服務開發並非只是將程式碼物理分離,開發過程中還要面對與微服務開發模式一同到來的服務整合、團隊協作等一系列新挑戰。相對於單體應用,開發人員之所以選擇微服務,一個很重要的原因就是想通過一種能將服務獨立地、快速地部署上線的能力。本書講解了ASP.NET Core是如何通過與容器技術的無縫相容輕鬆提供這一能力的。微服務的職責單一,這意味著服務之間需要相互呼叫才能完成多個任務,或者各方合力才能完成較大的任務。服務間的依賴與整合也是一項不可忽視的基本議題。基於事件整合,以及藉助服務發現機制為相互依賴的服務提供靈活排程是兩項常見的服務整合方法,本書對這兩種方法都進行了完整介紹。由於各個後端服務未必直接面對使用者,因此微服務系統中的安全認證也與直接面對使用者的系統有所不同,本書深入講解了幾種常見的安全機制,供開發者根據實際情況選用。
與本書基於ASP.NET Core開發微服務的主題相呼應,ASP.NET Core本身就是一系列的模組化元件,可新增到現有應用中。同時,由於ASP.NET Core提供自宿主Web伺服器對REST風格介面的支援非常友好,自身量級足夠輕量並且效能強勁,因此ASP.NET Core自然適合作為微服務開發的基礎框架。有了優秀的框架,接下來我們要考慮的是,如何避免再次陷入用一項新技術繼續開發“新版本的一溜單體應用”。本書通過實際專案的深入演練,以及同步的理論講解,讓讀者在面對微服務生態構建過程中的各種場景時,能做好充分準備。
不過我個人認為,這本書還是缺少了一部分關於微服務生態系統的內部編排的內容, 容器是微服務部署的最佳方式,容器作為現代基礎設施上一種更細粒度的抽象,能有效降低佔用空間和縮短啟動時間、同時由於它提供了一種新的元件重用性級別,所以能輕鬆地整合到整個開發生態系統中(例如持續整合和交付生命週期),微服務生態治理包括排程(包括部署、複製、擴充套件、復活、重新排程、升級、降級等)、資源管理(記憶體、CPU、儲存空間、埠、IP、映象等)和服務管理(即使用標籤、分組、名稱空間、負載均衡和準備就緒檢查將多個容器編排在一起)。
一直以來,在我運營的“dotnet跨平臺”公眾號和各種線上線下場合,我與很多朋友探討和分享過微服務開發相關的經驗。曾有很多朋友關心,有沒有微服務相關的入門材料。這本書藉助實際專案,系統地梳理了微服務開發的脈絡,給初學者提供了行之有效的學習素材。所以本書的引進是以見值得高興的事情。
書籍目錄如下:
第1章 ASP.NETCore基礎
1.1 核心概念
1.1.1 CoreCLR
1.1.2 CoreFX
1.1.3.NETPlatformStandard
1.1.4 ASP.NETCore
1.2 安裝.NETCore
1-3開發控制檯應用
1.4 開發第一個ASP.NETCore應用
1.4.1 向專案新增ASP.NET包
1.4.2 新增Kestrel伺服器
1.4.3 新增啟動類和中介軟體
1.4.4 執行應用
1.5 本章小結
第2章 持續交付
2.1 Docker簡介
2.1.1 安裝Docker
2.1.2 執行Docker映象
2.2 使用Wercker持續整合
2.3 用Wercker構建服務
2.3.1 安裝Wercker命令列工具
2.3.2 新增wercker.yml配置檔案
2.3.3 執行Wercker構建
2.4 使用CircleCI持續整合
2.5 部署到dockerhub
2.6 本章小結
第3章 使用ASP.NETCore開發微服務
3.1 微服務的定義
3.2 團隊服務簡介
3.3 API優先的開發方式
3.3.1 為什麼要用API優先
3.3.2 團隊服務的API
3.4 以測試優先的方式開發控制器
3.4.1 注入一個模擬的倉儲
3.4.2 完成單元測試套件
3.5 建立持續整合流水線
3.6 整合測試
3.7 執行團隊服務的Docker映象
3.8 本章小結
第4章 後端服務
4.1 微服務生態系統
4.1.1 資源繫結
4.1.2 服務間模型共用的策略
4.2 開發位置服務
4.3 優化團隊服務
4.3.1 使用環境變數配置服務的URL
4.3.2 消費RESTful服務
4.3.3 執行服務
4.4 本章小結
第5章 建立資料服務
5.1 選擇一種資料儲存
5.2 構建Postgres倉儲
5.2.1 建立資料庫上下文
5.2.2 實現位置記錄倉儲介面
5.2.3 用EFCore記憶體提供程式進行測試
5.3 資料庫是一種後端服務
5.4 對真實倉儲進行整合測試
5.5 試執行資料服務
5.6 本章小結
……
第6章 事件溯源與CQRS
第7章 開發ASP.NETCoreWeb應用
第8章 服務發現
第9章 微服務系統的配置
第10章 應用和微服務安全
第11章 開發實時應用和服務
第12章 設計彙總
ASP.NET Core微服務實戰:在雲環境中開發、測試和部署跨平臺服務 已經在京東上線,京東連線: https://item.jd.com/12611071.html,組織大家一起來團購這本書,看情況如果人多的話我們是否可以一起組織一次團購活動。因此建立了一個團購微信群。