1 微服务架构 1
微服务应运而生 1
单块软件 2
现实世界中的微服务 2
面向微服务的架构 3
为什么面向微服务的架构更好 3
不足之处 3
关键设计原则 4
从组件到业务单元 5
智能的服务,愚蠢的通信管道 7
去中心化 8
技术对比 10
多微才是足够的微 10
关键的好处 11
弹性 11
可伸缩性 11
技术多样性 13
可替换性 14
独立性 15
SOA与微服务的比较 16
为什么选择Nodejs 18
API聚合 18
展望Nodejs 19
小结 20
2 基于Seneca和PM2构建Node.js微服务 21
选择Node.js的理由 21
安装Nodejs、npm、Seneca和PM2 22
第一个程序——Hello World 25
Node.js的线程模型 27
模块化组织的最佳实践 27
微服务框架Seneca 32
实现控制反转 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 API 81
邮件服务:一个常见的问题 82
如何发送邮件 82
接口定义 83
设置Mandrill 84
亲自动手在微服务中集成Mandrill 86
回退策略 91
订单管理服务 92
根据如何获取非本地数据来定义微服务 93
订单管理服务代码 95
UI——API聚合的产物 99
前端微服务的必要性 99
代码 99
服务降级——当出现非灾难性故障时 107
断路器 108
Seneca——一块使我们工作变得更容易的拼图 109
Seneca和promise 111
调试 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