微服务架构原理与开发实战pdf下载pdf下载

微服务架构原理与开发实战百度网盘pdf下载

作者:
简介:本篇主要提供微服务架构原理与开发实战pdf下载
出版社:电子工业出版社
出版时间:2021-04
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介

最近几年软件开发方法层出不穷,微服务作为一种主流的架构模式一直热度不减。为了帮助广大程序员们更好更快地理解微服务的概念,学习微服务在项目中的实践,本书全面阐述了微服务架构模式的特点、架构思路、设计理念、技术框架及具体的代码实战,以软件开发过程中遇到的各种疑难问题为切入点,逐步解析微服务架构是如何设计及解决这些问题的。书中使用主流技术框架进行演示,采用通俗易懂的图例和真实的项目事例来阐述遇到问题时的解决思路和做法,并附有具体的实践演示,读者可以跟随本书进行代码试验,理解并运用微服务技术架构的理解和运用,了解微服务的适应场景和优势。本书实用性强,是目前市面上关于微服务实践方面介绍得较为全面的书籍之一,适合想要了解和学习微服务的初、高级程序员和架构师等不同水平的读者阅读。

作者简介

张刚,多年软件开发经验,从事过开发、项目经理、架构师等多种角色擅长后端开发,熟悉微服务架构模式,熟悉领域驱动设计理念推崇敏捷开发,极限编程和TDD等开发方式喜欢研究新技术,探索新的领域,擅长总结软件开发的各种思路

目录

目 录

第1章 微服务概述 001
1.1 微服务的概念 002
1.2 微服务与SOA 003
1.2.1 SOA的定义 003
1.2.2 微服务与SOA的异同点 004
1.2.3 服务调用设计 005
1.3 单体式架构 007
1.3.1 单体式架构概述 007
1.3.2 单体式架构的痛点 008
1.3.3 经典的MVC架构模式 010
1.4 微服务架构概述 012
1.4.1 微服务能解决的问题 012
1.4.2 微服务架构的特点 013
1.4.3 微服务架构的优势 016
1.5 微服务的挑战 017
1.5.1 使用微服务的难点 018
1.5.2 微服务不是银弹 019
第2章 微服务架构设计 020
2.1 微服务架构的难点 021
2.2 架构设计 022
2.2.1 了解什么才是架构 022
2.2.2 软件设计的3个阶段 023
2.2.3 软件架构的目的与方法 024
2.3 微服务的核心组件 028
2.3.1 微服务的远程调用方式 028
2.3.2 HTTP 通信方法 031
2.3.3 服务的注册与发现 037
2.3.4 负载均衡 044
第3章 Spring Cloud 相关组件 050
3.1 统一配置中心 051
3.1.1 配置中心的难点 051
3.1.2 Spring Cloud Config框架 053
3.1.3 集成消息总线 058
3.2 断路器 060
3.2.1 服务熔断 060
3.2.2 服务降级 064
3.2.3 线程隔离 065
3.2.4 请求合并 068
3.2.5 请求缓存 073
3.2.6 Hystrix注解 075
3.2.7 Hystrix 控制台 078
3.3 健康监控 080
3.4 分布式链路跟踪 084
3.4.1 设计要素和术语 084
3.4.2 Spring Cloud Sleuth 链路监控 085
第4章 契约测试 088
4.1 契约测试概述 089
4.2 契约测试与TDD 091
4.2.1 TDD的定义 091
4.2.2 TDD的价值 094
4.2.3 TDD的种类 095
4.2.4 契约测试也是TDD 096
4.3 契约测试与独立交付 097
4.3.1 独立交付 097
4.3.2 集成测试 098
4.3.3 真正的独立交付 100
4.4 契约测试的相关技术与用法实战 102
4.4.1 Mock测试 102
4.4.2 消费者驱动的契约测试Pact 106
4.4.3 Spring家族契约测试Spring Cloud Contract 122
4.4.4 服务提供者的契约测试Moscow 129
第5章 API网关 133
5.1 API网关的意义 134
5.2 API网关的职责 137
5.2.1 请求路由 137
5.2.2 请求过滤 138
5.2.3 服务治理 139
5.3 API网关的缺点 141
5.4 使用API网关认证身份 141
5.4.1 分清认证与授权 141
5.4.2 API网关是否需要管理授权 142
5.4.3 传统的Cookie和Session认证 143
5.4.4 基于JSON的令牌JWT 148
5.5 API网关技术实战 151
5.5.1 Zuul 网关 151
5.5.2 Spring Cloud Gateway 159
5.5.3 Spring Security 166
5.5.4 Java-JWT 178
第6章 BFF用于前端的后端 183
6.1 回顾前后端分离发展史 184
6.1.1 日渐臃肿的前端 184
6.1.2 前端技术栈大爆发 185
6.1.3 前后端分离的必然性 185
6.1.4 分离后的挑战 186
6.2 BFF诞生 187
6.2.1 BFF的概念 187
6.2.2 BFF的适用场景 188
6.2.3 BFF模式 189
6.3 基于RESTful的BFF 190
6.4 基于GraphQL的BFF 193
6.4.1 GraphQL的概念 193
6.4.2 GraphQL在客户端的基本用法 197
6.4.3 GraphQL 与 Java集成 204
6.4.4 GraphQL与WebFlux集成 215
第7章 领域驱动设计 220
7.1 如何划分微服务 221
7.1.1 微服务的划分方式 221
7.1.2 DDD与服务划分 222
7.2 领域驱动设计概述 223
7.2.1 DDD的概念 223
7.2.2 DDD解决了什么问题 224
7.2.3 DDD适合小项目吗 226
7.2.4 为了统一语言 227
7.3 领域和子域 229
7.4 领域事件 230
7.4.1 领域事件的定义 230
7.4.2 事件风暴 230
7.4.3 用户旅程与事件风暴 232
7.5 聚合和聚合根 233
7.6 限界上下文 234
7.7 六边形架构 236
7.8 DDD的挑战 237
第8章 Docker和K8s 239
8.1 虚拟化技术 240
8.2 Docker容器化 241
8.2.1 Docker的概念 241
8.2.2 容器的概念 242
8.3 学习使用Docker 244
8.3.1 Docker的安装方法 244
8.3.2 构建Docker镜像 246
8.3.3 运行Docker容器 250
8.3.4 了解Docker的网络 252
8.3.5 日志监控的利器ELK 253
8.4 容器编排 258
8.4.1 容器为什么需要编排 258
8.4.2 Kubernetes的概念 259
8.4.3 K8s的设计理念 260
8.4.4 K8s的命名空间 264
8.4.5 K8s与Docker 265
8.4.6 K8s与Docker Swarm 266
8.5 云商的支持 267
第9章 持续集成、部署与交付 270
9.1 持续集成(CI) 271
9.1.1 传统的系统集成 271
9.1.2 持续集成的概念 273
9.1.3 微服务的CI 275
9.2 持续交付(CD) 275
9.2.1 CD的概念 276
9.2.2 DevOps与持续交付 277
9.2.3 软件质量门 277
9.3 持续部署(CD) 279
9.3.1 生产环境部署的难点 280
9.3.2 蓝绿部署 281
9.3.3 滚动部署 282
9.3.4 灰度发布 283
9.4 CI/CD工具 284
9.4.1 Jenkins 284
9.4.2 GoCD概述 291
9.4.3 DevOps概述 300
第10章 任务管理 302
10.1 任务管理概述 303
10.1.1 如何解决任务互斥 303
10.1.2 任务调度平台 304
10.2 实战演练 305
10.2.1 Quartz 306
10.2.2 XXL-JOB 310
第11章 事务管理 318
11.1 事务概述 319
11.2 CAP理论 320
11.3 BASE理论 321
11.4 解决方案 322
11.4.1 基于可靠消息的事务管理 322
11.4.2 两段提交事务 325
11.4.3 TCC模式事务管理 326
11.5 对账是最后的屏障 328
第12章 传统架构的微服务转型之路 329
12.1 传统架构转型的难点 330
12.2 识别领域与界限 332
12.3 分块重构法 334
12.4 代理隔离法 336
12.5 转型不是一蹴而就的 338

前言/序言

微服务是一种架构模式,但也不仅仅是一种架构模式,还涵盖了众多的软件开发方法和技术,又代表着敏捷的开发体系,提倡重构和持续演进,对于开发、测试、运维等有着不同的要求。同时,它可能还需要更加复杂的设计方法,更加轻量的协议,甚至还会影响组织或团队的规模和结构,可能给团队带来技术栈的“爆炸”。在这个技术浮躁的年代,对于已经成为主流的微服务架构,我们应该如何面对?

微服务到底是什么,一直众说纷纭,我们只知道各大企业纷纷追捧和实践微服务架构,有的项目可能使用了Spring Cloud就算是使用微服务了,然后说微服务就是Spring Cloud,有的系统可能越做越像SOA,然后说微服务就是SOA的一种,还有的把自己的应用拆分,然后觉得把应用拆分成小块就是微服务。并不是说以上说法都是错的,但行业里确实还没有一个标准的试金石来验证微服务的好与坏,微服务的“酸甜苦辣”可能只有用过了才知道。

其实,每个新概念的出现都填补了一些空白领域,每个新技术的产生都有它擅长解决的问题,每个语言的发明都有它专注处理的场景。软件开发的世界就是这样,我们会遇到各式各样的麻烦,会蹚过数不清的坑,会学习学不完的框架,甚至有的技术还没有搞清楚原理就已经被淘汰了,但我们仍然乐此不疲。

很多年前笔者就听说过“微服务”的概念,但一直没有合适的机会和方法去系统地学习微服务,好在根据多年工作经验的积累,从不同的项目实践中慢慢总结了一些微服务的经验。不敢说全部都是绝对的权威理论,但大多都是从真实的实战场景出发,以解决问题为导向慢慢推演出的架构模式。本书旨在为广大读者介绍一个较为全面的微服务开发体系。

受作者水平和成书时间所限,本书难免存有疏漏和不当之处,敬请指正。

本书特色

1.内容实用、详略得当,讲授符合初学者的认知规律

本书多采用图例与案例分析,行文深入浅出、图文并茂,以通俗易懂的语言来讲解各种软件知识,每讲到新的概念或有关联的概念时,都会做出解释,软件基础知识薄弱的读者也能够跟随本书的节奏,快速地理解和掌握微服务的相关知识。

2.不只是开发技术,还包括软件设计、测试及运维等全面的微服务领域的解析

书中除讲解具体的微服务核心开发架构和技术框架以外,还特别强调软件设计、测试及运维等知识点,如契约测试、领域驱动设计、容器化技术、持续集成和持续交付等理论和实战知识,因此特别适合拥有一定基础的中、高级程序员阅读,可以学习和了解到更多纯开发以外需要掌握的知识。

3.以解决问题为导向,引发架构思考

本书更加注重解决问题的思路引导,通过实际的场景分析,不只是解释了框架和技术概念,还展现了相关技术的由来,正所谓知其然知其所以然,本书也十分适合已经从事架构工作的架构师阅读,能够帮助架构师更好地梳理解决问题的思路和方法。

本书内容及体系结构

第1章 微服务概述

微服务并不是一个新的概念,但从提出至今一直热度不减,而且随着技术的不断创新,不同的技术团队会产生不同的理解,这也导致了好像大家都在做微服务,也都想做好微服务,但具体的软件设计或架构实践会有很多的不同,本章就深入探讨到底什么是微服务。

第2章 微服务架构设计

微服务架构有两个难点:一是微服务架构本身核心组件的落地设计,即技术实现;二是微服务在物理上的层次结构和拆分设计。这两点是实现微服务架构设计成功的关键因素,本章将详细介绍微服务架构的核心架构。

第3章 Spring Cloud相关组件

很多人都觉得使用了Spring Cloud就是用了微服务,虽然Spring Cloud并不能代表微服务的全部,但是通过学习Spring Cloud,确实可以更加深入地了解微服务的理念和实践,如海量服务的容错问题、雪崩问题、配置和监控问题、日志追踪问题等,本章将介绍Spring Cloud的相关微服务组件,学习使用Spring Cloud解决这些问题的方法。

第4章 契约测试

微服务架构中最常见的就是远程调用,如服务和服务之间的远程调用,前端和后端的远程调用,BFF和服务的远程调用,等等。当系统体量越来越大时,如何保证服务间调用关系的正确性?哪个接口会影响到哪个调用者?这就需要一个自动的方法来帮助人们测试接口的可靠性,这就是契约测试。

第5章 API网关

网关的英文是Gateway,翻译为门、方法、通道、途径。网关就是接口的通道或接口的大门,要想访问API,就必须通过API网关,那为什么要有API网关,这么做有什么作用呢?本章将详细介绍微服务架构中API网关的作用和具体用法。

第6章 BFF用于前端的后端

随着前端技术的大爆发,面对逐渐复杂化的前端工程体系,越来越多的企业开始采用前后端分离的开发模式。随着微服务模式的流行,前后端的交互也变得越来越复杂,如大量接口的组合、复杂的配置、重复的代码等问题使前后端的开发者饱受折磨。于是,一个新的模式诞生了,BFF用于前端的后端。越来越多的项目开始采用BFF模式,本章将详细介绍BFF模式的具体实践用法。

第7章 领域驱动设计

近几年来,随着微服务的流行,一个新的软件设计方法逐渐流行起来,这就是领域驱动设计。当我们有了众多的技术框架和架构模式时,具体去落地实施一个微服务项目的难处似乎并不仅仅体现在软件技术上,例如,我们该如何设计微服务的软件模型和划分服务职责?本章将介绍领域驱动设计这一新兴的科学设计方法。

第8章 Docker和K8s

提到微服务,首先想到的是服务很小、职责很小,那如果是一个庞大复杂的系统,我们必然会建立很多的微服务,而且服务都是可以水平扩展的,在一些大型的互联网企业,一个服务的数量可能是成百上千的,那么部署和管理这些服务就成了一个难题。本章将介绍服务容器化部署的相关知识。

第9章 持续集成、部署与交付

虽然第8章中提到了使用容器化技术的部署方式,但似乎和微服务定义中的自动化没什么关系,本章将介绍自动化部署和快速交付的相关概念与方法案例,同时思考微服务项目中需要自动化部署机制的原因。

第10章 任务管理

在软件开发过程中,无论是项目还是产品都有着自己的独特性,不可能所有的项目都千篇一律,我们会遇到各种各样的场景,除了一些宏观的架构和设计,微服务架构在技术细节上也有很多需要注意的地方,如任务管理,当然这可能是一些分布式架构的特性,而不仅限于微服务架构,本章将介绍一些微服务架构下任务管理的实践。

第11章 事务管理

事务管理一直都是软件开发中的难点,即使很多优秀的框架能够帮助我们处理一些简单的逻辑,如在单体式架构中使用AOP的事务管理框架来管理事务,但在微服务架构下,事务管理的需求与复杂度都比单体式架构更高。那么,在微服务中应该如何管理事务呢?本章将介绍事务管理的方式和方法。

第12章 传统架构的微服务转型之路

虽然微服务的浪潮越来越热,但是软件工程这么多年来,还是产生了大量传统架构的系统,面对已经存在了多年的老项目,系统性能越来越差,想要扩展又显得捉襟见肘,想要做微服务架构转型也处处受限,很多项目团队甚至直接选择丢弃老的系统,重新开发新的系统。那么,当我们面对技术陈旧、业务庞杂、技术债众多的老旧系统时,该如何实现微服务的转型呢?本章将告诉大家从现有传统架构向微服务架构转型的思路和过程。

本书读者对象

? 想要学习和了解微服务的人

? 已经了解微服务想要查漏补缺的人

? 初、中、高级程序员

? 软件架构师

? 对软件架构有兴趣的各类人员