描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302540199
在当今的几乎每个垂直领域,企业都需要将软件迁移到云以获取利润;而微服务能提供敏捷性,大幅缩短产品上市时间。这本实战指南将指导你使用开源ASP.NET Core框架,来创建、测试、编译和部署微服务。跟随本书,你将养成良好、实用的习惯,能快速开发稳定可靠、功能强大的服务。
要开发微服务,并非只是学习一个特定框架或一门编程语言,而要开发能适应弹性伸缩环境、独立于托管容器、能随时启停的应用。这本紧贴实用的指南将带你体验这一过程。
■ 领会测试驱动、API 优先的开发理念
■ 通过创建和消费后端服务(如数据库和队列)与其他服务交互
■ 构建依赖于外部数据源的微服务
■ 学习事件溯源(以事件为中心的持久化方法)
■ 使用 ASP.NET Core 开发适合部署在云环境的 Web 应用
■ 开发一个消费其他服务或被其他服务消费的微服务
■ 创建可接受外部配置的服务和应用
■ 探索用于保护ASP.NET Core 微服务和应用的方法
目 录
第1章 ASP.NET Core基础 1
1.1 核心概念 1
1.1.1 CoreCLR 1
1.1.2 CoreFX 2
1.1.3 .NET Platform Standard 3
1.1.4 ASP.NET Core 3
1.2 安装 .NET Core 4
1.3 开发控制台应用 5
1.4 开发第一个 ASP.NET Core 应用 8
1.4.1 向项目添加 ASP.NET 包 8
1.4.2 添加 Kestrel 服务器 9
1.4.3 添加启动类和中间件 10
1.4.4 运行应用 12
1.5 本章小结 12
第2章 持续交付 15
2.1 Docker 简介 15
2.1.1 安装 Docker 16
2.1.2 运行 Docker 镜像 16
2.2 使用 Wercker 持续集成 18
2.3 用 Wercker 构建服务 18
2.3.1 安装 Wercker 命令行工具 19
2.3.2 添加wercker.yml配置文件 20
2.3.3 运行 Wercker 构建 22
2.4 使用 CircleCI 持续集成 22
2.5 部署到 docker hub 24
2.6 本章小结 25
第3章 使用ASP.NET Core开发微服务 27
3.1 微服务的定义 27
3.2 团队服务简介 28
3.3 API优先的开发方式 29
3.3.1 为什么要用 API 优先 29
3.3.2 团队服务的 API 30
3.4 以测试优先的方式开发控制器 31
3.4.1 注入一个模拟的仓储 38
3.4.2 完成单元测试套件 40
3.5 创建持续集成流水线 42
3.6 集成测试 43
3.7 运行团队服务的 Docker 镜像 46
3.8 本章小结 47
第4章 后端服务 49
4.1 微服务生态系统 49
4.1.1 资源绑定 51
4.1.2 服务间模型共用的策略 51
4.2 开发位置服务 53
4.3 优化团队服务 56
4.3.1 使用环境变量配置服务的URL 56
4.3.2 消费RESTful服务 57
4.3.3 运行服务 59
4.4 本章小结 62
第5章 创建数据服务 63
5.1 选择一种数据存储 63
5.2 构建Postgres仓储 64
5.2.1 创建数据库上下文 65
5.2.2 实现位置记录仓储接口 66
5.2.3 用EF Core内存提供程序进行测试 68
5.3 数据库是一种后端服务 68
5.4 对真实仓储进行集成测试 71
5.5 试运行数据服务 73
5.6 本章小结 76
第6章 事件溯源与CQRS 77
6.1 事件溯源简介 77
6.1.1 事实由事件溯源而来 78
6.1.2 事件溯源的定义 78
6.1.3 拥抱最终一致性 79
6.2 CQRS模式 80
6.3 事件溯源与CQRS实战——附近的团队成员 82
6.3.1 位置报送服务 83
6.3.2 事件处理器 92
6.3.3 事实服务 98
6.3.4 位置接近监控器 99
6.4 运行示例项目 99
6.4.1 启动服务 100
6.4.2 提交示例数据 101
6.5 本章小结 103
第7章 开发ASP.NET Core Web应用 105
7.1 ASP.NET Core基础 105
7.1.1 添加 ASP.NET MVC 中间件 108
7.1.2 添加控制器 109
7.1.3 添加模型 110
7.1.4 添加视图 110
7.1.5 从JavaScript中调用REST API 112
7.2 开发云原生 Web 应用 115
7.2.1 API 优先 116
7.2.2 配置 116
7.2.3 日志 116
7.2.4 会话状态 117
7.2.5 数据保护 117
7.2.6 后端服务 118
7.2.7 环境均等 118
7.2.8 端口绑定 119
7.2.9 遥测 119
7.2.10 身份验证和授权 119
7.3 本章小结 120
第8章 服务发现 121
8.1 回顾云原生特性 121
8.1.1 配置外置 121
8.1.2 后端服务 122
8.2 Netflix Eureka简介 123
8.3 发现和广播ASP.NET Core服务 125
8.3.1 服务注册 126
8.3.2 发现并消费服务 127
8.4 DNS以及由平台支持的服务发现 130
8.5 本章小结 131
第9章 微服务系统的配置 133
9.1 在 Docker中使用环境变量 134
9.2 使用Spring Cloud配置服务器 135
9.3 使用etcd 配置微服务 138
9.4 本章小结 144
第10章 应用和微服务安全 145
10.1 云环境中的安全 145
10.1.1 内网应用 145
10.1.2 Cookie和Forms身份验证 146
10.1.3 云环境中的应用内加密 146
10.1.4 Bearer令牌 147
10.2 ASP.NET Core Web应用安全 148
10.2.1 OpenID Connect基础 148
10.2.2 使用OIDC保障ASP.NET Core应用的安全 150
10.2.3 OIDC中间件和云原生 157
10.3 保障ASP.NET Core微服务的安全 158
10.3.1 使用完整OIDC安全流程保障服务的安全 159
10.3.2 使用客户端凭据保障服务的安全 160
10.3.3 使用Bearer令牌保障服务的安全 160
10.4 本章小结 164
第11章 开发实时应用和服务 165
11.1 实时应用的定义 165
11.2 云环境中的 WebSocket 166
11.2.1 WebSocket 协议 167
11.2.2 部署模式 167
11.3 使用云消息服务 168
11.4 开发位置接近监控服务 169
11.4.1 创建接近监控服务 169
11.4.2 为实时接近监控服务创建界面 178
11.5 本章小结 179
第12章 设计汇总 181
12.1 识别并解决反模式 181
12.2 继续辩论组合式微服务 184
12.2.1 使用断路器缓解风险 185
12.2.2 消除同步的组合模式 187
12.3 接下来,还要做什么? 188
前 言
这一天已经到来——当前大量软件和服务的开发者们正在迫不及待地拥抱微服务,微服务带来了伸缩性、容错性和缩短产品上市时间等方面的各项好处。
微服务不仅是一项吸引眼球的新鲜事物,其背后的驱动力和基础概念更重要,那些对于小型、独立部署的模块的态度摇摆不定的人们将会掉队。
现在,我们需要具备一种能够开发具有柔韧性、可弹性伸缩的应用的能力;而且开发过程要快速,才能满足客户需求并在竞争中保持领先。
《ASP.NET Core微服务实战》中的开发过程
与其他一些只是逐一介绍编程语言的各个API、类库和语法模式的参考书风格的书籍不同,《ASP.NET Core微服务实战》希望用作微服务开发指南,而ASP.NET Core只是我们在编写示例代码时选用的框架。
《ASP.NET Core微服务实战》不讲解底层C#代码的所有细节;如果你需要这方面的知识,可参考其他作者所编写的书籍。我期望你在学完《ASP.NET Core微服务实战》后,基本能够基于ASP.NET Core创建、测试、编译和部署微服务,能够习得良好而实用的习惯,能快速开发稳定、安全、可靠的服务。
我希望你通过阅读《ASP.NET Core微服务实战》能够学到大量方法,来开发部署在可弹性伸缩、高性能的云环境中的服务。使用C#的ASP.NET Core只是众多可用于开发微服务的语言和框架之一,但编程语言并不构成服务——唯有你才能造就服务。相比于一种特定的语言和工具,在服务开发期间你的努力、专心和勤奋,才是真正能保障服务投产后获得成功的因素。
画笔和画布本身并不成画,唯有画家才能画成。你就是微服务的画家,而 ASP.NET Core 则是众多画笔之一。
在《ASP.NET Core微服务实战》中,我们首先讨论适用于任意服务的基本结构,接着介绍它们如何构成强大而健壮的服务。我们将连接数据库和各种后端服务,使用轻量级分布式缓存、安全服务以及 Web 应用,同时会时刻注意以 Docker 镜像形式持续地交付不可变发布物的能力。
为什么要开发微服务
由于需求、出发点和对成功的度量标准的不一致,不同团队的发布周期也不一致。依赖手工配置的定制服务器才能正常运行的单体开发时代已经过去了。
微服务,只要正确实施,我们就可从中获得敏捷性,并大幅缩短产品上市时间,而这正是企业在新时代里生存和发展所需的。在这个新时代,不管哪个领域,都需要让软件上云以获取利润。
在阅读《ASP.NET Core微服务实战》的过程中,你将能了解每个决定背后的各项考量。从每一行代码到上层架构的“简图”,我们会详细讨论其优劣。
微服务开发的准备工作
首先,也是最重要的一点,你将需要 .NET Core 命令行工具,并安装正确的软件开发工具包(Software Development Kit, SDK)。第1章将介绍如何配置它们。
接着,我们将用到Docker。Docker以及支持它的底层容器技术现在已经全面普及了。不管目标部署平台是亚马逊云(AWS)、微软Azure、Google云平台(Google Cloud Platform, GCP),还是自有基础设施,Docker 都能提供我们所期盼的可移植、不可变发布物。
《ASP.NET Core微服务实战》微服务的开发、构建流水线是由Docker容器创建的,而这些容器则运行于云环境的Linux基础设施中。这种情况下,读者在使用《ASP.NET Core微服务实战》时最顺畅的路径是基于macOS或 Linux的机器。使用 Windows 也是没有问题的,不过在某些部分可能显得不够顺畅,或者需要额外步骤。Windows 10 上新的 Linux 子系统可缓解一部分问题,不过仍然不够理想。
Windows和macOS上的Docker要使用虚拟机来托管 Linux 内核,因此,如果内存不足,就可能导致机器变慢。
如果使用 Linux(《ASP.NET Core微服务实战》代码在 Ubuntu 上验证通过),那么不需要任何虚拟机,因为 Docker 直接运行于 Linux 内核之上。
在线资源
微软网站(https://www.microsoft.com/net/core/)
《ASP.NET Core微服务实战》的GitHub库(https://github.com/microservices-aspnetcore)
示例代码
《ASP.NET Core微服务实战》的补充材料(示例代码、练习素材等)可在此处下载:https://github.com/microservices-aspnetcore。
《ASP.NET Core微服务实战》就是为了帮你完成工作。你通常可在程序或者文档中使用《ASP.NET Core微服务实战》提供的代码,不需要与我们取得联系获得许可,但如果要复制大量的程序,或将书中的代码清单用于出售或用于复制光盘,就必须获得许可。可以引用《ASP.NET Core微服务实战》的内容或代码清单来解决其他问题,但在自己的产品文档中大量使用《ASP.NET Core微服务实战》的代码清单需要事先得到许可。
如果你觉得自己对示例代码的使用超出了合理情况或许可的范围,请随时联系我们,邮箱是 [email protected]。
致谢
如果没有家人超常的耐心和包容,《ASP.NET Core微服务实战》不可能顺利付梓。他们的支持是能让《ASP.NET Core微服务实战》从概念到成功出版的唯一动力。我难以想象他们如何在我把大量时间投入《ASP.NET Core微服务实战》之后,还能忍受我的紧张和怪异,以及凌乱的旅行和日常工作安排。
对于一本像《ASP.NET Core微服务实战》这样的书,其中的每一个章节、每一个示例,都需要投入大量时间进行编码、测试和研究,咨询专家,以及苦思冥想。我要向积极参与和运用.NET Core 技术的开源社区,尤其是来自微软的技术讲师和开发者们表达深深的谢意。
最后,与以往一样,我一定要感谢 A-Team 的其他成员(Dan、Chris 和 Tom),他们持续的灵感让编程充满乐趣。
“ASP.NET Core为开发人员带来一系列现代化实践,而 Kevin Hoffman则撰写了一本见解深刻的实战手册。明智的企业都开发微服务来构建适应能力更强的软件,为此,需要考虑诸多新因素;Kevin完成了一项卓越工作,针对性地解释了要获得成功必须掌握的技术。Kevin不仅给出极其有用的代码,还详细呈现微服务开发的生命周期,深入讲解如何实现一些重要模式。”
——Pivotal高级产品总监 Richard Seroter(微软MVP)
评论
还没有评论。