猜你喜欢
Node.js微服务

Node.js微服务

书籍作者:David Gonzalez ISBN:9787121305245
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3591
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

《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 等。他曾通过微服务为这些公司的团队带来新生。

编辑推荐

本书内容要点:

√ 理解Node.js模块并掌握在与微服务打交道时的zui佳实践

√ 将现有的单块系统重新架构成面向微服务的软件

√ 使用Seneca和Node.js构建出健壮且可伸缩的微服务

√ 对微服务进行隔离测试从而创建出可靠的系统

√ 使用PM2部署并管理微服务

√ 监控微服务的健康状况(CPU、内存以及I/O)

前言

在技术圈里,微服务已不是一张生面孔,确切地说,如今已算得上是一名当红的明星了。然而,对于任何一门流行的技术而言,从出现到被广泛采纳必定都会经历一个被质疑、被挑战,以及在实践的锤炼中不断进化的过程,微服务也是如此。

作为本书的译者,我并不打算在这篇序里给出太多的剧透。但是对扒一扒“微服务”的成长史却深感义不容辞。

根据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”这两味如此珍贵的药材一起入药时,它们又会对“单块系统”中的哪些痼疾产生怎样奇特的疗效呢?说好了不剧透,那么就请读者亲自体会这一段接地气的技术之旅吧。

再次感谢张春雨编辑对我的信任,也非常荣幸能参与这本书的翻译。当然,翻译一本书并不是一件轻松的事情,我要感谢我的师弟郑伟杰,他与我共同承担了本书的翻译工作,正因为有了他的加入才让我得以工作翻译两不误。其次要感谢伟杰的女友,她为本书译文做了审阅与润色。最后,我要感谢我的家人,尤其是我的老婆和父母,你们是我坚强的后盾,让我能专注于做好自己喜欢的事情。

由于时间及能力所限,我们对于原书的理解及对译文的表述难免存在一些不妥之处,希望各位读者给予理解及反馈。我的邮箱是[email protected],欢迎各位读者与我们联系。

赵震一

2016 年8 月于杭州

目录

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