发表于2024-12-25
本书分为三部分:基础框架篇(1~6章)、服务框架篇(7~10章)、监控部署篇(11~13章),由浅入深来讲解微服务的相关技术。基础框架篇从微服务架构的基本概念与技术选型出发,详细的介绍了微服务基础框架SpringBoot、自动化API文档生成工具Swagger、动态数据源和缓存系统,并深入的分析了SpringBoot启动过程的核心源码,这一部分是整本书的基础;服务框架篇详细的介绍了服务注册与发现框架Consul、热配置管理框架Archaius、服务降级容错框架Hystrix,以及服务通信框架OkHttp、AsyncHttpClient和Retrofit,这一部分是整本书的核心;监控部署篇详细的介绍了ELK日志系统的实现、Zipkin全链路追踪系统的实现,最后介绍了持续集成与持续部署系统的实现,这一部分是开发运维的部分。
赵计刚,现任网易高级Java开发工程师。2016年7月毕业于哈尔滨工业大学软件学院。2016年3月加入51信用卡,开始接触微服务架构,之后一直在从事微服务的开发与研究,学习与总结了不少微服务架构相关的理论与实践经验。个人是开源技术的拥趸,对新技术充满浓厚的兴趣,尤其是微服务架构相关技术。
目录
第1章 微服务概述 1
1.1 初识微服务 1
1.1.1 什么是微服务 1
1.1.2 为什么需要微服务 2
1.1.3 微服务架构的缺点 3
1.2 微服务中的组件与技术选型 4
第2章 微服务基础框架 10
2.1 SpringBoot的优势 10
2.2 SpringBoot入门 10
2.2.1 搭建项目框架 10
2.2.2 开发第一个SpringBoot程序 11
2.2.3 运行SpringBoot项目 14
2.3 再学一招:使用Maven依赖树验证SpringBoot自动引包功能 15
第3章 微服务文档输出 17
3.1 Swagger概述 17
3.2 如何使用Swagger 17
3.2.1 搭建项目框架 17
3.2.2 SpringBoot集成Swagger 18
3.2.3 分析Swagger生成的API文档 23
3.2.4 使用Swagger进行接口调用 23
3.3 再学一招:使用Lombok消除POJO类模板代码 24
第4章 微服务数据库 26
4.1 单数据源 26
4.1.1 搭建项目框架 26
4.1.2 建库和建表 27
4.1.3 使用Mybatis-Generator生成数据访问层 27
4.1.4 SpringBoot集成Mybatis 29
4.2 多数据源 38
4.2.1 建库和建表 39
4.2.2 使用Mybatis-Generator生成数据访问层 40
4.2.3 结合AbstractRoutingDataSource实现动态数据源 41
4.2.4 使用AOP简化数据源选择功能 47
4.2.5 实现多数据源的步骤总结 48
4.3 再学一招:Mybatis-Generator基本用法 49
第5章 微服务缓存系统 52
5.1 常用的缓存技术 52
5.1.1 本地缓存与分布式缓存 52
5.1.2 Memcached与Redis 53
5.2 Redis2.x客户端分片 53
5.2.1 安装Redis 53
5.2.2 SpringBoot集成ShardJedis 54
5.3 Redis3.x集群 59
5.3.1 搭建Redis集群 59
5.3.2 SpringBoot集成JedisCluster 62
5.3.3 JedisCluster关键源码解析 64
5.4 再学一招:使用GuavaCache实现本地缓存 66
第6章 SpringBoot启动源码解析 69
6.1 创建SpringApplication实例 70
6.1.1 判断是否是Web环境 71
6.1.2 创建并初始化ApplicationInitializer列表 71
6.1.3 创建并初始化ApplicationListener列表 74
6.1.4 初始化主类mainApplicationClass 75
6.2 添加自定义监听器 75
6.3 启动核心run方法 76
6.3.1 创建启动停止计时器 77
6.3.2 配置awt系统属性 78
6.3.3 获取SpringApplicationRunListeners 79
6.3.4 启动SpringApplicationRunListener 80
6.3.5 创建ApplicationArguments 80
6.3.6 创建并初始化ConfigurableEnvironment 81
6.3.7 打印Banner 87
6.3.8 创建ConfigurableApplicationContext 87
6.3.9 准备ConfigurableApplicationContext 89
6.3.10 刷新ConfigurableApplicationContext 91
6.3.11 容器刷新后动作 93
6.3.12 SpringApplicationRunListeners发布finish事件 94
6.3.13 计时器停止计时 94
6.4 再学一招:常用的获取属性的4种姿势 94
第7章 微服务注册与发现 96
7.1 初识Consul 96
7.2 搭建Consul集群 97
7.2.1 安装Consul 97
7.2.2 启动Consul集群 97
7.2.3 启动Consul-UI 99
7.3 使用Consul实现服务注册与服务发现 100
7.3.1 搭建项目框架 100
7.3.2 配置服务注册信息 102
7.3.3 实现服务启动注册 104
7.3.4 实现服务发现 106
7.4 服务部署测试 108
7.4.1 编写测试类 108
7.4.2 服务打包部署 109
7.4.3 运行测试 111
7.5 使用Consul与Actuator实现健康检查 111
7.5.1 健康检查机制 111
7.5.2 健康检查查错思路 111
7.6 再学一招:Consul健康检查分类及原理 112
第8章 微服务配置管理 114
8.1 初识Archaius 114
8.1.1 为什么要使用Archaius 114
8.1.2 Archaius原理 114
8.2 使用Consul-KV实现配置集中管理 115
8.3 使用Archaius实现动态获取配置 116
8.3.1 搭建项目框架 116
8.3.2 创建配置信息读取源 118
8.3.3 实现服务启动时读取配置信息 120
8.3.4 动态获取配置信息 122
8.3.5 将配置信息动态加入Spring属性源的思路 123
8.4 再学一招:Archaius关键源码解析 123
8.4.1 构造动态属性源 123
8.4.2 动态获取属性 127
第9章 微服务进程间通信 129
9.1 常见的三种服务通信技术 129
9.2 创建一个简单的被调用服务 130
9.2.1 搭建项目框架 130
9.2.2 实现一个简单的被调用接口 132
9.3 使用OkHttp实现服务通信 134
9.3.1 搭建项目框架 134
9.3.2 创建OkHttp调用实体类 135
9.3.3 实现服务通信功能 136
9.3.4 SpringBoot指定服务启动端口的三种姿势 138
9.4 使用AsyncHttpClient实现服务通信 139
9.4.1 搭建项目框架 139
9.4.2 创建AsyncHttpClient调用实体类 139
9.4.3 实现服务通信功能 140
9.5 使用Retrofit实现服务通信 141
9.5.1 搭建项目框架 141
9.5.2 创建调用接口并实例化接口 141
9.5.3 实现服务通信功能 143
9.6 再学一招:Retrofit源码解析 143
9.6.1 构造RestAdapter 144
9.6.2 初始化RestAdapter.Builder属性 146
9.6.3 创建RestAdapter实例 149
9.6.4 构造请求方法的接口类 150
9.6.5 校验service接口的合法性 151
9.6.6 使用动态代理创建对象 152
9.6.7 进行请求调用 152
9.6.8 获取RestMethodInfo实例 154
9.6.9 进行方法调用 154
9.6.10 加载RestMethodInfo的剩余属性 156
9.6.11 构建请求参数retrofit.client.Request 160
9.6.12 利用clientProvider进行真正的调用 161
9.6.13 处理响应 162
第10章 微服务降级容错 163
10.1 初识Hystrix 163
10.1.1 为什么要使用Hystrix 163
10.1.2 Hystrix工作原理 164
10.1.3 Hystrix执行流程 166
10.2 使用Hystrix实现服务降级容错 167
10.2.1 搭建项目框架 167
10.2.2 创建AsyncHttpClient调用实体类 170
10.2.3 服务通信框架集成服务降级容错功能 171
10.2.4 验证服务降级容错功能 173
10.3 搭建Hystrix监控系统 176
10.3.1 使用Hystrix-Metrics-Event-Stream发布监控信息 176
10.3.2 使用Hystrix-Dashboard展示监控信息 177
10.3.3 使用Turbine聚合监控信息 179
10.1 再学一招:Hystrix常用配置 184
10.1.1 设置配置参数的两种方法 184
10.4.2 常见配置项的配置方式 184
第11章 微服务日志系统 187
11.1 初识ELK 187
11.1.1 为什么要用ELK 187
11.1.2 ELK最常用的两种架构 188
11.2 搭建ELK系统 189
11.2.1 安装配置启动Redis 190
11.2.2 安装配置启动Elasticsearch 190
11.2.3 安装配置启动Logstash-Shipper 192
11.2.4 安装配置启动Logstash-Indexer 194
11.2.5 安装配置启动Kibana 195
11.3 使用LogbackAppender发送日志 196
11.3.1 搭建项目框架 196
11.3.2 配置logback.xml文件 198
11.3.3 创建LogbackAppender发送日志 199
11.3.4 验证日志输出查询功能 201
11.4 Kibana常见用法 203
11.4.1 日期选择 203
11.4.2 自动刷新 204
11.4.3 查询语法 204
11.5 再学一招:使用Curator定时删除日志 205
11.5.1 安装Curator 205
11.5.2 配置Curator 206
11.5.3 配置crontab定时任务 208
11.5.4 验证定时任务 208
第12章 微服务全链路追踪系统 210
12.1 初识Zipkin 210
12.1.1 为什么要使用Zipkin 210
12.1.2 Zipkin工作流程 211
12.1.3 Zipkin数据模型 213
12.1.4 Zipkin工作原理 213
12.2 使用Zipkin搭建全链路追踪系统 215
12.3 使用Brave + AsyncHttpClient实现全链路追踪 217
12.3.1 搭建项目框架 217
12.3.2 使用服务端拦截器补充追踪信息 219
12.3.3 使用客户端拦截器创建销毁追踪信息 223
12.3.4 使用Zipkin-webUI查询链路追踪信息 225
12.4 使用MySQL持久化追踪信息 227
12.4.1 创建三张追踪信息表 227
12.4.2 使用Brave-MySQL存储追踪信息 230
12.5 使用Brave-OkHttp实现全链路追踪 230
12.5.1 搭建项目框架 231
12.5.2 使用服务端与客户端拦截器收集追踪信息 233
12.6 再学一招:Brave关键源码解析 236
12.6.1 span的生命周期 236
12.6.2 使用reporter创建span 237
12.6.3 使用collector收集span 242
12.6.4 使用collector发送span 244
第13章 微服务持续集成与持续部署系统 248
13.1 初识持续集成与持续部署系统 248
13.2 系统总体架构 249
13.2.1 初识GitLab 249
13.2.2 初识Jenkins 250
13.2.3 初识Docker-Regsitry 250
13.3 持续集成与持续部署系统工作原理 250
13.3.1 使用jar包部署项目的整体流程 250
13.3.2 使用Docker镜像部署项目的整体流程 250
13.4 搭建持续集成与持续部署系统 251
13.4.1 安装启动Docker 251
13.4.2 安装配置启动GitLab 252
13.4.3 安装启动Jenkins 254
13.4.4 配置Jenkins全局信息与安装插件 256
13.4.5 安装配置启动Docker-Registry 257
13.5 使用jar包方式部署服务 258
13.5.1 搭建项目框架 258
13.5.2 使用GitLab创建组和项目 260
13.5.3 使用GitLab管理代码 263
13.5.4 使用Jenkins编译打包服务 264
13.5.5 使用webhook实现服务的持续集成 267
13.5.6 使用Jenkins + Shell实现服务的持续部署 269
13.6 使用Docker镜像方式部署服务 273
13.6.1 搭建项目框架 273
13.6.2 编写Dockerfile文件创建镜像 275
13.6.3 通过Jenkins + Shell使用镜像实现持续部署 276
13.6.4 分析Jenkins构建日志 277
13.7 再学一招:Docker常用命令 278
前言
微服务架构这个概念的提出已经有一段时间了,但是由于资料的匮乏以及其实现的复杂性,使得大部分企业望而却步。
我是幸运的,从毕业至今,一直在与微服务打交道,期间参与了大大小小多个微服务的开发,是为数不多的有机会在实际生产环境中运用微服务架构的幸运儿。在使用微服务架构的过程中,我深深的体会到了这种架构对于一个中大型企业的好处:快速的开发与部署、轻量级的通信机制、有针对性的水平扩展、高度的解耦等等,这加速了一个项目的快速迭代,很好的实现了敏捷开发,这正是企业所需要的。但是微服务架构的实现也是有一定的复杂性的:服务拆分的边界怎么来定义;原本的单机事务在服务拆分之后变成了分布式事务,这怎么来处理;由于服务拆分了,服务之间的通信需要走网络,怎样尽可能的减少网络通信的消耗;怎样防止服务雪崩;怎么梳理链路调用关系、快速定位导致调用链发生错误的服务;怎样监控服务的健康状态等等,这都是使用了微服务架构后需要解决的问题。本书结合我在实际使用微服务架构中积累的经验给出了其中大多数问题的解决方案,可以为读者朋友提供一个参考。
不可否认的是,正如文章开头所讲的,国内对于微服务架构的开发学习资料与课程都非常有限,这使得微服务架构在国内的推广并没有想象中的那样火热。而且,国内的相关资料大多以理论为主或者没有实战基础。所以,当电子工业出版社博文视点的付睿老师提议写一本以实战为主的微服务书籍之后,我毫不犹豫的抓住了这个机会。本书以实战为主,以理论为辅,真正的给出了能在实际生产中使用的技术方案。由于篇幅限制以及以实战为主的特点,我不会介绍太多的理论(哪怕这个理论很重要),比如在介绍Consul的时候,我不会去详细的介绍Raft一致性协议,但是会介绍与其相关的一些在使用中需要注意的问题,如果有兴趣的朋友可以去查看相关的论文资料。
本书的组织结构
本书从组织结构上来讲,分为三部分:基础框架篇(1~6章)、服务框架篇(7~10章)、监控部署篇(11~13章)。
第1章 微服务概述
本章首先介绍了微服务架构的概念与优缺点,之后大致的介绍了微服务中需要的各种组件与常见的技术选型。
第2章 微服务基础框架
本章首先介绍了SpringBoot在做微服务方面的优势,之后笔者通过从零开始开发一个SpringBoot项目来介绍SpringBoot的基本使用,使没有使用过SpringBoot的同学可以快速入门。最后在“再学一招”部分,笔者介绍了一个非常好用的Maven命令:maven依赖树,该命令是查看SpringBoot-Starter的依赖以及处理依赖冲突的一件利器。
第3章 微服务文档输出
本章首先介绍了自动化文档输出工具Swagger的概念,之后介绍了Swagger与SpringBoot的集成以及Swagger的常用注解。最后在“再学一招”部分,笔者介绍了一个很好用的消除模板化代码的框架Lombok的安装与使用。
第4章 微服务数据库
本章以Mysql为例,首先介绍了单数据源的情况下,SpringBoot与Mybatis的集成,之后笔者使用AbstractRoutingDataSource实现了对多数据源情况的处理,并简要的介绍了实现多数据源的原理。最后在“再学一招”部分,笔者介绍了Mybatis-Generator的基本用法。
第5章 微服务缓存系统
本章首先介绍了常用的缓存技术的优缺点与选型方案,之后介绍了当使用Redis2.x版本时,使用SpringBoot集成ShardJedis实现客户端分片的方法,然后介绍了Redis3.x集群的搭建与使用SpringBoot集成JedisCluster实现服务端集群的方式,最后简要的分析了JedisCluster的源码。在本章的“再学一招”部分,介绍了使用GuavaCache实现本地缓存的方式。
第6章 SpringBoot启动源码解析
本章详细的分析了SpringBoot启动过程的源码,掌握这一章,对于后续章节的阅读至关重要。在本章的再学一招部分,简要的介绍了在开发过程中获取配置信息的4种姿势。
第7章 微服务注册与发现
本章首先介绍了Consul的基本概念和功能,之后搭建了服务提供者和服务调用者两个项目来实现使用Consul进行服务注册和服务发现的功能,最后介绍了使用Consul与SpringBoot-Actuator实现服务健康检查的功能。在本章的“再学一招”部分,简要的介绍了Consul自身 Java微服务实战 下载 mobi epub pdf txt 电子书 格式
Java微服务实战 下载 mobi pdf epub txt 电子书 格式 2024
Java微服务实战 下载 mobi epub pdf 电子书just so so
评分讲得很好,覆盖面很广
评分书写的很好 值得学习 好
评分此用户未填写评价内容
评分微服务概念很火热,学习一下
评分看介绍觉得很不错,买一本看看,等度读后再细评!
评分书说的比较实用,希望能有所提升
评分看起来不错
评分看介绍觉得很不错,买一本看看,等度读后再细评!
Java微服务实战 mobi epub pdf txt 电子书 格式下载 2024