新書推薦:
《
不止江湖
》
售價:HK$
101.2
《
天才留步!——从文艺复兴到新艺术运动(一本关于艺术天才的鲜活故事集,聚焦艺术史的高光时刻!)
》
售價:HK$
158.7
《
双城史
》
售價:HK$
110.9
《
冯友兰和青年谈心系列:不是问题的问题(哲学大师冯友兰和年轻人谈心,命运解读)
》
售價:HK$
57.3
《
月与蟹(青鲤文库)荣获第144届直木奖,天才推理作家经典作品全新译本。一部青春狂想曲,带你登上心理悬疑之巅。
》
售價:HK$
51.8
《
索恩丛书·盛清统治下的太监与皇帝
》
售價:HK$
88.5
《
透过器物看历史(全6册)
》
售價:HK$
503.7
《
我在台北故宫博物院读名画
》
售價:HK$
112.7
編輯推薦:
本书内容要点:
理解Node.js模块并掌握在与微服务打交道时的*实践
将现有的单块系统重新架构成面向微服务的软件
使用Seneca和Node.js构建出健壮且可伸缩的微服务
对微服务进行隔离测试从而创建出可靠的系统
使用PM2部署并管理微服务
监控微服务的健康状况(CPU、内存以及IO)
內容簡介:
本书对如何采用Node.js及其生态工具进行微服务开发的*实践做了全面的介绍,内容包括对微服务架构基本概念及设计原则的讲解,以及如何采用Node.js搭配Seneca、PM2和Docker等现代化工具来构建、测试、监控以及部署轻量级微服务,同时也阐述了Node.js在微服务实践中所涉及的相关概念,并就微服务的优缺点、文档化、安全性以及可追溯性等主题进行了探讨。
關於作者:
赵震一,一线攻城狮,曾涌入创业洪流,多年未有所成。现居杭州,就职于阿里巴巴。热爱技术,关注互联网与大数据,闲暇译一些技术文章,译有《RESTful Web APIs中文版》 David Gonzalez是一名在编程语言方面极不专一的软件工程师,他在金融服务行业混迹多年。他尝试找到抽象层次合适的解决方案,并探索着如何保证既不过于具体也不过于抽象之间的平衡。
David Gonzalez 是一名在编程语言方面极不专一的软件工程师,他在金融服务行业混迹多年。他尝试找到抽象层次合适的解决方案,并探索着如何保证既不过于具体也不过于抽象之间的平衡。
David 曾求学于西班牙,但是不久之后便转战都柏林,自2011 年起便定居于此并开启了更为宽广和有趣的职业生涯。他目前是一名金融技术领域的独立咨询师。他的Linkedin账号地址是:https:ie.linkedin.comindavid-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
PM2Node.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
UIAPI聚合的产物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
內容試閱 :
前言
作为一本微服务入门的实践指南,本书采用了Node.js和以Seneca、PM2为主的现代框架来进行阐述。在各章中,我们将分别介绍如何利用最佳实践去设计、构建、测试以及部署微服务。此外,我们还会讨论另外一个有价值的课题如何在设计系统时做出合理的妥协,来避免过度设计和确保技术方案与实际业务需求相匹配。
本书概述
第1章主要讲述微服务的基本概念,包括主要优点和一些缺点,本章内容是本书后续章节的基础。
第2章介绍了Node.js、Seneca和PM2。还讨论了Node.js应用的结构,以及如何通过PM2来运行应用。另外,我们还研究了一些Seneca与PM2的替代产品。
第3章主要讲述如何使用微服务来处理自然增长(计划之外的软件需求变更)。另外,我们还讨论了如何将单块应用分解成微服务。
第4章阐述了如何编写我们的第一个微服务程序。
第5章涉及了安全性与可追溯性,这是现代系统的两大重要特性,因为我们需要保证信息的安全与操作的可追溯性。在本章中,我们讨论了使用Seneca来保证安全性与可追溯性的方法。
第6章主要介绍了Node.js的两大主流测试框架Mocha和Chai。同时使用Sinon来mock服务以及Swagger来为微服务进行文档化。
第7章使用PM2结合Keymetrics来监控微服务,使PM2的功能得到最大发挥。
第8章通过使用PM2,学习如何在不同环境下部署微服务,并通过单条命令管理应用的生态系统,从而减少微服务架构带来的开销。我们还将讨论Docker,它是一个应用容器引擎,可以部署包括Node应用在内的各种应用。
阅读本书的准备工作
为了能够完成本书的实践案例,需要预先安装Node.js、PM2(可以通过npm来安装),以及MongoDB。此外还需要一个编辑器,我个人选用了Atom,但是一般通用的编辑器都能满足需求。
本书的读者对象
本书适合具有一定Node.js经验,并且想要学习Seneca以及微服务知识的开发者。在本书中,有70%的内容是面向实践的(因此我们会编写大量代码),有30%是理论知识。基于编写的这些代码可以帮助读者将书中提到的模式应用到新的软件开发中去。
约定惯例
本书将会使用不同的书写风格来区分不同种类的信息。以下是这些风格的例子和它们的意义。
正文中的文本代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、URL、用户输入和推特用户定位(Twitter handles)将会用代码体书写,如我们知道输入参数是一个PaymentRequest实例。
代码块则将会是这样的风格:
public interface PaymentService {
PaymentResponse processPaymentPaymentRequest request throws
MyBusinessException;
}
如果希望向你强调代码块中的一部分,那么它们将会以粗体展示:
function {
sinon.stubMath, "random";
rollDice;
console.logMath.random.calledWith;
};
afterfunction{
Math.random.restore;
};
任何命令行的输入和输出将是以下这样的:
node index.js
npm start
警告和关键提醒将会在这样的图标后出现。
小提示和小技巧将会在这样的图标后出现。
下载示例代码
你可以从http:www.broadview.com.cn下载所有已购买的博文视点书籍的示例代码文件。
勘误表
虽然我们已经尽力谨慎地确保内容的准确性,但错误仍然存在。如果你发现了书中的错误,包括正文和代码中的错误,请告诉我们,我们会非常感激你。这样,你不仅帮助了其他读者,也帮助我们改进后续的出版。如发现任何勘误,可以在博文视点网站相应图书的页面提交勘误信息。一旦你找到的错误被证实,你提交的信息就会被接受,我们的网站也会发布这些勘误信息。你可以随时浏览图书页面,查看已发布的勘误信息。