这书分成三一部分:基本架构篇(1~6章)、服务项目架构篇(7~10章)、监控器布署篇(11~13章),循序渐进来解读微服务的有关技术性。基本架构篇从分布式架构的基本要素与技术性电机选型来看,详尽的详细介绍了微服务基本架构SpringBoot、自动化技术API文本文档转化成专用工具Swagger、动态性数据库和缓存文件系统软件,并深层次的剖析了SpringBoot起动全过程的关键源代码,这部分是一本书的基本;服务项目架构篇详尽的详细介绍了服务项目申请注册与发觉架构Consul、热配置管理架构Archaius、服务项目退级试错架构Hystrix,及其服务项目通讯架构OkHttp、AsyncHttpClient和Retrofit,这部分是一本书的关键;监控器布署篇详尽的详细介绍了ELK系统日志系统软件的保持、Zipkin全外链跟踪系统软件的保持,*后详细介绍了持续集成与不断布署系统软件的保持,这部分是开发设计运维管理的一部分。
目录
- 第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