Node.js实战:分布式系统中的后端服务开发
图书信息
| 作者 | (美)托马斯·亨特二世(Thomas Hunter II) |
| 出版社 | 机械工业出版社 |
| ISBN | 9787111694496 |
| 出版时间 | 2021-11-01 |
| 字数 | 22.6万 |
| 分类 | 科技,计算机,网络,程序设计 |
读书简介
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,使用了高效、轻量级的事件驱动、非阻塞 I/O 模型,让JavaScript 运行在服务端的发平台。本书主要介绍基于Node.js构建企业级后端服务,内容涉及Node.js和JavaScript的特性介绍、通信协议、扩展、可观测性、Docker容器、部署、容器编排、应用程序容错、分布式单元、应用程序安全性等内容。
目录
O'Reilly Media, Inc.介绍
序言
前言
第1章 为什么要用分布式
1.1 JavaScript的单线程特性
1.2 Node.js速览
1.3 Node.js的事件循环
1.3.1 事件循环阶段
1.3.2 代码示例
1.3.3 事件循环技巧
1.4 示例应用程序
1.4.1 服务间的关系
1.4.2 生产者服务
1.4.3 使用者服务
第2章 协议
2.1 使用HTTP请求和响应
2.1.1 HTTP负载
2.1.2 HTTP语义
2.1.3 HTTP压缩
2.1.4 HTTPS与TLS
2.1.5 JSON over HTTP
2.1.6 序列化POJO的潜在危险
2.2 使用GraphQL构建API外观
2.2.1 GraphQL schema
2.2.2 查询和响应
2.2.3 GraphQL服务生产者
2.2.4 GraphQL使用者
2.3 使用gRPC进行RPC通信
2.3.1 Protocol Buffers
2.3.2 gRPC生产者
2.3.3 gRPC使用者
第3章 扩展
3.1 集群模块
3.1.1 简单示例
3.1.2 请求派发
3.1.3 集群的缺点
3.2 使用HAProxy实现反向代理
3.2.1 HAProxy介绍
3.2.2 负载均衡和运行状况检查
3.2.3 压缩
3.2.4 终止TLS会话
3.2.5 限速与背压
3.3 SLA和负载测试
3.3.1 Autocannon简介
3.3.2 运行基准负载测试
3.3.3 反向代理的影响
3.3.4 协议的影响
3.3.5 服务等级目标
第4章 可观测性
4.1 运行环境
4.2 ELK与日志
4.2.1 使用Docker运行ELK
4.2.2 从Node.js传输日志
4.2.3 创建Kibana数据面板
4.2.4 运行点对点查询
4.3 Graphite、StatsD和Grafana度量指标
4.3.1 通过Docker运行
4.3.2 从Node.js传输度量指标值
4.3.3 创建Grafana数据面板
4.3.4 Node.js运行状况指示器
4.4 使用Zipkin进行分布式请求跟踪
4.4.1 Zipkin是怎么工作的
4.4.2 使用Docker运行Zipkin
4.4.3 从Node.js传输跟踪信息
4.4.4 可视化请求树
4.4.5 可视化微服务依赖项
4.5 运行状况检查
4.5.1 构建运行状况检查
4.5.2 测试运行状况检查
4.6 使用Cabot进行报警
4.6.1 创建Twilio试用账户
4.6.2 使用Docker运行Cabot
4.6.3 创建运行状况检查
第5章 容器
5.1 Docker简介
5.2 容器化Node.js服务
5.2.1 依赖项阶段
5.2.2 发布阶段
5.2.3 从镜像到容器
5.2.4 镜像重建和版本化
5.3 使用Docker Compose进行基本编排
5.3.1 组合Node.js服务
5.4 内部Docker注册表
5.4.1 运行Docker注册表
5.4.2 注册表的推送和拉取
5.4.3 运行Docker注册表UI
第6章 部署
6.1 使用Travis CI构建流水线
6.1.1 创建基础项目
6.1.2 配置Travis CI
6.1.3 测试拉取请求
6.2 自动化测试
6.2.1 单元测试
6.2.2 集成测试
6.2.3 代码覆盖率
6.3 部署Heroku
6.3.1 创建Heroku应用程序
6.3.2 配置Travis CI
6.3.3 部署应用程序
6.4 模块、包和SemVer
6.4.1 Node.js模块
6.4.2 SemVer
6.4.3 npm包和npm CLI
6.5 内部npm注册表
6.5.1 运行Verdaccio
6.5.2 使用Verdaccio配置npm
6.5.3 发布到Verdaccio
第7章 容器编排
7.1 Kubernetes简介
7.1.1 Kubernetes总览
7.1.2 Kubernetes概念
7.1.3 启动Kubernetes
7.2 启动
7.3 部署应用程序
7.3.1 Kubectl子命令
7.3.2 Kubectl配置文件
7.4 服务发现
7.5 修改部署
7.5.1 扩展应用程序实例
7.5.2 部署新版本应用程序
7.5.3 回滚应用程序部署
第8章 弹性
8.1 Node.js进程的终止
8.1.1 进程退出
8.1.2 异常、拒绝和错误
8.1.3 信号
8.2 构建无状态服务
8.2.1 避免内存泄漏
8.2.2 自限定进程内缓存
8.3 使用Memcached构建外部缓存
8.3.1 Memcached简介
8.3.2 运行Memcached
8.3.3 使用Memcached缓存数据
8.3.4 数据结构变动
8.4 数据库连接的弹性
8.4.1 运行PostgreSQL
8.4.2 自动重新连接
8.4.3 连接池
8.5 使用Knex进行Schema迁移
8.5.1 配置Knex
8.5.2 创建Schema迁移
8.5.3 应用迁移
8.5.4 回滚迁移
8.5.5 动态迁移
8.6 幂等性和消息传递弹性
8.6.1 HTTP重试逻辑
8.6.2 断路器模式
8.6.3 指数退避
8.7 弹性测试
8.7.1 随机崩溃
8.7.2 事件循环暂停
8.7.3 随机失败的异步操作
第9章 分布式基元
9.1 ID生成问题
9.2 Redis简介
9.3 Redis操作
9.3.1 字符串
9.3.2 列表
9.3.3 集合
9.3.4 哈希表
9.3.5 有序集合
9.3.6 通用命令
9.3.7 其他类型
9.4 寻求原子性
9.5 事务
9.6 Lua脚本
9.6.1 编写Lua脚本
9.6.2 加载Lua脚本
9.6.3 整合
第10章 安全性
10.1 繁杂的代码库
10.2 认识攻击面
10.2.1 参数检查和反序列化
10.2.2 恶意的npm包
10.3 应用程序配置
10.3.1 环境变量
10.3.2 配置文件
10.3.3 密钥管理
10.4 升级依赖项
10.4.1 使用GitHub Dependabot进行自动更新
10.4.2 使用npm CLI进行手动更新
10.4.3 未能修补的漏洞
10.5 升级Node.js
10.5.1 Node.js LTS发布计划
10.5.2 升级方法
附录A 安装HAProxy
Linux:从源代码构建
Linux:安装预编译的二进制文件
macOS:通过Homebrew安装
附录B 安装Docker
macOS:安装Docker Desktop for Mac
Linux:方便的安装脚本
附录C 安装Minikube和Kubectl
Linux:Debian包和预编译的二进制文件
macOS:通过Homebrew安装
关于作者
关于封面
- 北大国学课(文章)
- 难惹(第2卷)(梦萌)
- 热处理工程师理论基础(刘宗昌)
- 从Paxos到Zookeeper:分布式一致性原理与实践(倪超)
- 间苗(何金银)
- 赢在思维——初中化学拉分题专项集训300题(9年级+中考)(彭嘉全)
- 区块链编程((美)吉米·宋(Jimmy Song))
- 交易圣经((澳)布伦特·奔富)
