本书内容要点:
√ 理解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 的异步非阻塞 I/O 模型很着迷,觉得它在构建高性能网络应用方面有着独特的优势。但当项目规模扩大,需要引入更复杂的架构时,我发现自己陷入了困境。单体应用的维护难度、部署的低效,都让我开始寻求新的解决方案。《Node.js微服务》这本书,恰恰填补了我在这方面的知识空白。作者并没有止步于介绍微服务的概念,而是非常实际地探讨了在 Node.js 环境下如何构建健壮、可维护的微服务。我特别关注了书中关于“容器化”(如 Docker)和“编排”(如 Kubernetes)的内容。虽然这些不是 Node.js 特有的技术,但作者将它们与 Node.js 微服务紧密结合,展示了如何利用这些工具来简化微服务的部署、扩展和管理。读完之后,我对如何设计一个具有高可用性和弹性的微服务系统有了更清晰的认识。它不仅仅是一本关于 Node.js 的书,更是一本关于现代化软件架构的宝典。
评分这本书简直把我从头到脚地“洗礼”了一遍!我一直以来都在用 Node.js 做一些中小型项目,虽然觉得还不错,但总感觉在架构设计上缺乏一种“大局观”,尤其是在面对日益增长的用户量和业务复杂度时,那种单体应用的瓶颈感越来越明显。读完《Node.js微服务》,我才真正理解了什么是“解耦”、“独立部署”和“弹性伸缩”。作者并没有上来就抛出一堆晦涩的概念,而是从一个实际的业务场景出发,一步步地剖析了为什么需要微服务,以及如何将一个庞大的单体应用拆分成更小、更易于管理的服务。我特别喜欢其中关于“领域驱动设计(DDD)”的讲解,它提供了一种非常清晰的思路来划分服务的边界,避免了服务之间产生不必要的耦合。书中还详细介绍了如何利用消息队列(如 RabbitMQ)来实现服务间的异步通信,这对于降低系统延迟、提高可用性简直是点睛之笔。我甚至觉得,即使你现在没有立刻开始做微服务,单单是学习这本书中的设计理念和通信模式,对你未来的技术选型和项目规划都会有巨大的帮助。它不是那种“看完就忘”的速食读物,更像是一本可以反复研读的“武功秘籍”,每次翻阅都能有新的领悟。
评分说实话,我拿到《Node.js微服务》这本书的时候,心里是带着点忐忑的,因为我对微服务架构的理解还停留在比较表面的阶段,担心这本书会过于理论化,难以落地。但读下来之后,我发现我的担忧完全是多余的。作者的写作风格非常接地气,大量的案例分析和图示,让那些看似复杂的概念变得生动易懂。我尤其喜欢书中关于“灰度发布”和“蓝绿部署”的讲解,这对于我们在实际项目中平滑地发布新版本、降低风险非常有帮助。书中还分享了一些关于“服务降级”和“超时重试”的策略,这些都是在构建高可用系统时必不可少的。而且,作者在讲解的过程中,始终围绕着 Node.js 的特性来展开,比如如何利用其异步特性来优化服务间的通信,如何处理并发请求等。这本书让我看到了 Node.js 在微服务领域巨大的潜力,也为我提供了一套切实可行的解决方案。
评分坦白说,我一开始是被这本书的标题吸引过来的,毕竟 Node.js 在后端开发领域的热度一直居高不下,而微服务又是当前非常流行的架构模式。我本来期望能看到一些关于如何快速搭建微服务框架、使用特定库来实现服务治理的“干货”。然而,这本书并没有完全走我预期的路线。它更侧重于“为什么”和“如何思考”,而不是“如何一步步照做”。作者花了大量的篇幅去阐述微服务的优势和挑战,以及在实际落地过程中可能遇到的坑。我读到了一些关于“CAP定理”和“最终一致性”的讨论,虽然不是微服务独有的概念,但作者将它们与微服务架构的实践紧密结合,让我对这些理论有了更深刻的理解。书中对“服务发现”、“熔断”、“限流”等话题的探讨,虽然没有提供现成的代码示例,但却给了我很多设计上的启发。它引导我思考如何在没有中心化服务治理平台的情况下,实现服务的可观测性和健壮性。对于想要深入理解微服务底层原理和设计哲学的朋友来说,这本书绝对是不可多得的宝藏。它让你不仅仅是“学会”构建微服务,而是“理解”微服务的精髓。
评分作为一个在 Node.js 生态圈里摸爬滚打多年的开发者,我总觉得在处理分布式系统和高并发场景时,自己的技能树总有些缺失。尤其是看到其他团队能够快速迭代,独立部署各种服务,而我们还在为单体应用的部署和维护头疼不已时,那种焦虑感更是难以言喻。《Node.js微服务》这本书,就像是为我量身定制的一剂良药。它并没有枯燥地罗列技术栈,而是从一个宏观的视角,深入浅出地讲解了如何将复杂的业务拆分成一个个独立、可控的微服务。我特别欣赏书中对“API网关”的讲解,它不仅介绍了网关的作用,还详细探讨了如何选择合适的网关技术,以及如何设计统一的API接口。此外,关于“分布式事务”的章节,更是让我茅塞顿开。之前我对这个问题感到非常棘手,总是模模糊糊的,但作者通过清晰的案例分析,让我理解了“两阶段提交”、“TCC”等不同策略的优缺点,以及在微服务环境下如何权衡选择。这本书真的让我对构建大型、可扩展的分布式系统充满了信心。
评分还没看,挺好的应该
评分很好的一本微服务的书 还在学习中 先赞一个
评分书好啊并,redux讲解清晰,正在学习1
评分活动中买的,不算贵!关于微服务,保持学习!
评分书很崭新,还没来得及看,后面再追加评价,
评分优惠券用了很核算,屯了不少书
评分感觉书还不错,简单介绍了什么是微服务。
评分不错的书,读书充电,让自己更优秀
评分送货速度快,商品满意。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有