本書內容要點:
√ 理解Node.js模塊並掌握在與微服務打交道時的zui佳實踐
√ 將現有的單塊係統重新架構成麵嚮微服務的軟件
√ 使用Seneca和Node.js構建齣健壯且可伸縮的微服務
√ 對微服務進行隔離測試從而創建齣可靠的係統
√ 使用PM2部署並管理微服務
√ 監控微服務的健康狀況(CPU、內存以及I/O)
《Node.js微服務》對如何采用Node.js 及其生態工具進行微服務開發的zui佳實踐做瞭全麵的介紹,內容包括對微服務架構基本概念及設計原則的講解,以及如何采用Node.js 搭配Seneca、PM2 和Docker 等現代化工具來構建、測試、監控以及部署輕量級微服務,同時也闡述瞭Node.js 在微服務實踐中所涉及的相關概念,並就微服務的優缺點、文檔化、安全性以及可追溯性等主題進行瞭探討。
《Node.js微服務》適閤掌握服務端開發基本知識的Node.js 開發者以及使用Java、C#等其他服務端技術棧並對微服務實踐感興趣的所有開發者。
David Gonzalez 是一名在編程語言方麵“極不專一”的軟件工程師,他在金融服務行業“混跡”多年。他嘗試找到抽象層次閤適的解決方案,並探索著如何保證既不過於具體也不過於抽象之間的平衡。
David 曾求學於西班牙,但是不久之後便轉戰都柏林,自2011 年起便定居於此並開啓瞭更為寬廣和有趣的職業生涯。他目前是一名金融技術領域的獨立谘詢師。他的Linkedin賬號地址是:https://ie.linkedin.com/in/david-gonzalez-737b7383。
David 樂於嘗試新的技術和範式,從而能讓自己在軟件開發的復雜世界中不斷拓展齣新的版圖。
審校者
Kishore Kumar Yekkanti 是一名經驗豐富的專傢,他在過去的十年裏曾與不同的領域和技術打過交道。他對軟件開發中的消除浪費尤具熱情。Kishore 是敏捷原則的巨大貢獻者和遵循者。他是一名善於開發端到端係統的全棧開發者,同時也是一名通曉多種語言的程序員。目前他專注於高度分布式應用中的微服務擴展,而這些應用部署於雲端基於容器的係統(Docker)之中。他曾在多傢知名的公司擔任過首席工程師,這些公司包括Thoughtworks、CurrencyFair 等。他曾通過微服務為這些公司的團隊帶來新生。
1 微服務架構1
微服務應運而生1
單塊軟件2
現實世界中的微服務2
麵嚮微服務的架構3
為什麼麵嚮微服務的架構更好3
不足之處3
關鍵設計原則4
從組件到業務單元5
智能的服務,愚蠢的通信管道7
去中心化8
技術對比10
多微纔是足夠的微10
關鍵的好處11
彈性11
可伸縮性11
技術多樣性13
可替換性14
獨立性15
SOA與微服務的比較16
為什麼選擇Node.js18
API聚閤18
展望Node.js19
小結20
2 基於Seneca和PM2構建Node.js微服務21
選擇Node.js的理由21
安裝Node.js、npm、Seneca和PM222
第一個程序——Hello World25
Node.js的綫程模型27
模塊化組織的最佳實踐27
微服務框架Seneca32
實現控製反轉35
Seneca的模式匹配35
PM2——Node.js的任務執行器46
單綫程應用及異常46
PM2——業界標準的任務執行器47
小結52
3 從單塊軟件到微服務53
首先,我們擁有一個單塊軟件53
如何控製自然增長54
多抽象纔是過度抽象57
微服務的齣現58
微服務的缺陷64
分割單塊軟件64
數據纔是分割單塊軟件的主要問題65
組織架構適配66
小結67
4 編寫你的第一個Node.js微服務69
微電子商務概覽69
商品管理服務——雙重核心71
獲取商品信息72
獲取指定類彆的商品73
根據ID獲取商品74
添加商品75
刪除商品75
編輯商品76
整閤各模塊76
集成Express與Seneca——如何創建REST API81
郵件服務:一個常見的問題82
如何發送郵件82
接口定義83
設置Mandrill84
親自動手在微服務中集成Mandrill86
迴退策略91
訂單管理服務92
根據如何獲取非本地數據來定義微服務93
訂單管理服務代碼95
UI——API聚閤的産物99
前端微服務的必要性99
代碼99
服務降級——當齣現非災難性故障時107
斷路器108
Seneca——一塊使我們工作變得更容易的拼圖109
Seneca和promise111
調試115
小結118
5 安全性和可追溯性119
基礎設施的邏輯安全119
利用SSH來對通信加密120
應用程序安全122
保持安全方麵的與時俱進來應對常見威脅123
有效的代碼審閱131
可追溯性132
日誌132
請求追蹤134
審計135
HTTP狀態碼136
小結138
6 Node.js微服務的測試及文檔化140
功能性測試141
自動化測試的金字塔142
采用Node.js測試微服務145
對微服務進行文檔化175
采用Swagger對API進行文檔化175
根據Swagger定義來生成項目182
小結184
7 微服務的監控185
服務監控185
采用PM2和Keymetrics進行監控186
類人猿大軍—來自Netflix的主動監控201
吞吐量和性能的降級204
小結206
8 微服務的部署208
軟件部署的一些概念208
持續集成209
持續交付209
采用PM2進行部署209
PM2中的“生態係統”210
采用PM2來部署微服務212
Docker——一種可用於軟件交付的容器213
組裝容器215
部署Node.js應用221
將Docker容器的創建過程自動化223
Node.js事件循環—入門容易精通難225
Node.js應用的集群化228
為應用增加負載均衡233
NGINX的健康檢查238
小結239
在技術圈裏,微服務已不是一張生麵孔,確切地說,如今已算得上是一名當紅的明星瞭。然而,對於任何一門流行的技術而言,從齣現到被廣泛采納必定都會經曆一個被質疑、被挑戰,以及在實踐的錘煉中不斷進化的過程,微服務也是如此。
作為本書的譯者,我並不打算在這篇序裏給齣太多的劇透。但是對扒一扒“微服務”的成長史卻深感義不容辭。
根據Martin Fowler 大叔的迴憶,“Microservices”一詞是在2011 年5 月於威尼斯附近舉辦的一次架構師工作坊的討論中被首次提齣的。
2012 年,微服務正式齣道。“Microservices”一詞首次在ThoughtWorks 技術雷達2012年3 月的報告中亮相。當時報告對其成熟度的評級位於“評估(Assess)”象限。
不到一年時間,“Microservices”一詞在2012 年10 月的技術雷達中已經進入瞭“試驗(Trial)”象限。這份報告稱,TW 及更廣範圍內的社區都將微服務作為一項分布式係統設計的技術開始采用。
2013 年,可配閤微服務實施的一些框架和工具相繼齣現,比如Spring Boot、Hystrix 等。
在此之後,業界對於微服務的實踐及討論逐漸升溫。2014 年3 月,Adrian Cockcroft(前
Netflix 首席雲架構師,被譽為“讓Netflix 走嚮雲端的男人”)與John Allspaw(現任Etsy的CTO)等人在Twitter 上展開瞭關於“微服務與單塊應用”孰優孰劣的討論1。
而在業界,真正為“微服務架構”這一架構風格正名的當屬Martin Fowler 大叔於2014年3月在其博客發錶的Microservices2一文,也正是此文讓大眾對微服務有瞭更加具體的認識。
2015 年,隨著以Docker 為代錶的容器技術的突飛猛進,微服務的部署難題迎刃而解,甚至有人將2015 年稱為微服務架構元年。
而當我們跨入2016 年甚至是2017 年的時候,微服務已正值壯年。在書店及互聯網上,關於什麼是微服務的書籍、博文已成燎原之勢。對於那些希望瞭解微服務“是什麼”的人來說,這是一個美好的時代。但是就微服務生命周期各個階段該“怎麼做”而言,譯者深感始終缺少一本接地氣的實踐指南。
當電子工業齣版社計算機齣版分社的張春雨編輯嚮我推薦這本書的時候,我的心裏是糾結的。因為我目前本職的工作量是相當飽和的(老闆請看過來~),但是卻無法拒絕這本書。這不就是那部我尋找已久的接地氣的“missing guide”嗎?
尤其是將“微服務”與“Node.js”這兩味如此珍貴的藥材一起入藥時,它們又會對“單塊係統”中的哪些痼疾産生怎樣奇特的療效呢?說好瞭不劇透,那麼就請讀者親自體會這一段接地氣的技術之旅吧。
再次感謝張春雨編輯對我的信任,也非常榮幸能參與這本書的翻譯。當然,翻譯一本書並不是一件輕鬆的事情,我要感謝我的師弟鄭偉傑,他與我共同承擔瞭本書的翻譯工作,正因為有瞭他的加入纔讓我得以工作翻譯兩不誤。其次要感謝偉傑的女友,她為本書譯文做瞭審閱與潤色。最後,我要感謝我的傢人,尤其是我的老婆和父母,你們是我堅強的後盾,讓我能專注於做好自己喜歡的事情。
由於時間及能力所限,我們對於原書的理解及對譯文的錶述難免存在一些不妥之處,希望各位讀者給予理解及反饋。我的郵箱是emsn1026@gmail.com,歡迎各位讀者與我們聯係。
趙震一
2016 年8 月於杭州
作為一個在 Node.js 生態圈裏摸爬滾打多年的開發者,我總覺得在處理分布式係統和高並發場景時,自己的技能樹總有些缺失。尤其是看到其他團隊能夠快速迭代,獨立部署各種服務,而我們還在為單體應用的部署和維護頭疼不已時,那種焦慮感更是難以言喻。《Node.js微服務》這本書,就像是為我量身定製的一劑良藥。它並沒有枯燥地羅列技術棧,而是從一個宏觀的視角,深入淺齣地講解瞭如何將復雜的業務拆分成一個個獨立、可控的微服務。我特彆欣賞書中對“API網關”的講解,它不僅介紹瞭網關的作用,還詳細探討瞭如何選擇閤適的網關技術,以及如何設計統一的API接口。此外,關於“分布式事務”的章節,更是讓我茅塞頓開。之前我對這個問題感到非常棘手,總是模模糊糊的,但作者通過清晰的案例分析,讓我理解瞭“兩階段提交”、“TCC”等不同策略的優缺點,以及在微服務環境下如何權衡選擇。這本書真的讓我對構建大型、可擴展的分布式係統充滿瞭信心。
評分我一直對 Node.js 的異步非阻塞 I/O 模型很著迷,覺得它在構建高性能網絡應用方麵有著獨特的優勢。但當項目規模擴大,需要引入更復雜的架構時,我發現自己陷入瞭睏境。單體應用的維護難度、部署的低效,都讓我開始尋求新的解決方案。《Node.js微服務》這本書,恰恰填補瞭我在這方麵的知識空白。作者並沒有止步於介紹微服務的概念,而是非常實際地探討瞭在 Node.js 環境下如何構建健壯、可維護的微服務。我特彆關注瞭書中關於“容器化”(如 Docker)和“編排”(如 Kubernetes)的內容。雖然這些不是 Node.js 特有的技術,但作者將它們與 Node.js 微服務緊密結閤,展示瞭如何利用這些工具來簡化微服務的部署、擴展和管理。讀完之後,我對如何設計一個具有高可用性和彈性的微服務係統有瞭更清晰的認識。它不僅僅是一本關於 Node.js 的書,更是一本關於現代化軟件架構的寶典。
評分說實話,我拿到《Node.js微服務》這本書的時候,心裏是帶著點忐忑的,因為我對微服務架構的理解還停留在比較錶麵的階段,擔心這本書會過於理論化,難以落地。但讀下來之後,我發現我的擔憂完全是多餘的。作者的寫作風格非常接地氣,大量的案例分析和圖示,讓那些看似復雜的概念變得生動易懂。我尤其喜歡書中關於“灰度發布”和“藍綠部署”的講解,這對於我們在實際項目中平滑地發布新版本、降低風險非常有幫助。書中還分享瞭一些關於“服務降級”和“超時重試”的策略,這些都是在構建高可用係統時必不可少的。而且,作者在講解的過程中,始終圍繞著 Node.js 的特性來展開,比如如何利用其異步特性來優化服務間的通信,如何處理並發請求等。這本書讓我看到瞭 Node.js 在微服務領域巨大的潛力,也為我提供瞭一套切實可行的解決方案。
評分這本書簡直把我從頭到腳地“洗禮”瞭一遍!我一直以來都在用 Node.js 做一些中小型項目,雖然覺得還不錯,但總感覺在架構設計上缺乏一種“大局觀”,尤其是在麵對日益增長的用戶量和業務復雜度時,那種單體應用的瓶頸感越來越明顯。讀完《Node.js微服務》,我纔真正理解瞭什麼是“解耦”、“獨立部署”和“彈性伸縮”。作者並沒有上來就拋齣一堆晦澀的概念,而是從一個實際的業務場景齣發,一步步地剖析瞭為什麼需要微服務,以及如何將一個龐大的單體應用拆分成更小、更易於管理的服務。我特彆喜歡其中關於“領域驅動設計(DDD)”的講解,它提供瞭一種非常清晰的思路來劃分服務的邊界,避免瞭服務之間産生不必要的耦閤。書中還詳細介紹瞭如何利用消息隊列(如 RabbitMQ)來實現服務間的異步通信,這對於降低係統延遲、提高可用性簡直是點睛之筆。我甚至覺得,即使你現在沒有立刻開始做微服務,單單是學習這本書中的設計理念和通信模式,對你未來的技術選型和項目規劃都會有巨大的幫助。它不是那種“看完就忘”的速食讀物,更像是一本可以反復研讀的“武功秘籍”,每次翻閱都能有新的領悟。
評分坦白說,我一開始是被這本書的標題吸引過來的,畢竟 Node.js 在後端開發領域的熱度一直居高不下,而微服務又是當前非常流行的架構模式。我本來期望能看到一些關於如何快速搭建微服務框架、使用特定庫來實現服務治理的“乾貨”。然而,這本書並沒有完全走我預期的路綫。它更側重於“為什麼”和“如何思考”,而不是“如何一步步照做”。作者花瞭大量的篇幅去闡述微服務的優勢和挑戰,以及在實際落地過程中可能遇到的坑。我讀到瞭一些關於“CAP定理”和“最終一緻性”的討論,雖然不是微服務獨有的概念,但作者將它們與微服務架構的實踐緊密結閤,讓我對這些理論有瞭更深刻的理解。書中對“服務發現”、“熔斷”、“限流”等話題的探討,雖然沒有提供現成的代碼示例,但卻給瞭我很多設計上的啓發。它引導我思考如何在沒有中心化服務治理平颱的情況下,實現服務的可觀測性和健壯性。對於想要深入理解微服務底層原理和設計哲學的朋友來說,這本書絕對是不可多得的寶藏。它讓你不僅僅是“學會”構建微服務,而是“理解”微服務的精髓。
評分這本書不錯 大體上理清瞭node 開發微服務的思路
評分不錯!東西很好,價格還可以!
評分這本書不錯 大體上理清瞭node 開發微服務的思路
評分哈哈哈哈哈哈哈呼呼呼呼
評分看完第一章,本書剩餘的內容看看目錄就夠瞭,不要迷戀國外的作者,現在越來越差瞭。
評分挺好的
評分包裝很結實 配送很給力
評分書比較薄,彆人推薦之後來看的。希望不錯。
評分Node.js微服務
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有