Node.js 微服务

Node.js 微服务
编辑推荐
本书内容要点:
-
√ 理解 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