本书分为三部分:基础框架篇(1~6章)、服务框架篇(7~10章)、监控部署篇(11~13章),由浅入深来讲解微服务的相关技术。基础框架篇从微服务架构的基本概念与技术选型出发,详细的介绍了微服务基础框架SpringBoot、自动化API文档生成工具Swagger、动态数据源和缓存系统,并深入的分析了SpringBoot启动过程的核心源码,这一部分是整本书的基础;服务框架篇详细的介绍了服务注册与发现框架Consul、热配置管理框架Archaius、服务降级容错框架Hystrix,以及服务通信框架OkHttp、AsyncHttpClient和Retrofit,这一部分是整本书的核心;监控部署篇详细的介绍了ELK日志系统的实现、Zipkin全链路追踪系统的实现,最后介绍了持续集成与持续部署系统的实现,这一部分是开发运维的部分。
本书由浅入深地讲解了微服务的相关技术,包括基础框架、服务框架和监控部署三大部分,以实战为主、理论为辅,内容丰富,实用性强。
前言
微服务架构这个概念的提出已经有一段时间了,但是由于资料的匮乏以及其实现的复杂性,使得大部分企业望而却步。
我是幸运的,从毕业至今,一直在与微服务打交道,期间参与了大大小小多个微服务的开发,是为数不多的有机会在实际生产环境中运用微服务架构的幸运儿。在使用微服务架构的过程中,我深深的体会到了这种架构对于一个中大型企业的好处:快速的开发与部署、轻量级的通信机制、有针对性的水平扩展、高度的解耦等等,这加速了一个项目的快速迭代,很好的实现了敏捷开发,这正是企业所需要的。但是微服务架构的实现也是有一定的复杂性的:服务拆分的边界怎么来定义;原本的单机事务在服务拆分之后变成了分布式事务,这怎么来处理;由于服务拆分了,服务之间的通信需要走网络,怎样尽可能的减少网络通信的消耗;怎样防止服务雪崩;怎么梳理链路调用关系、快速定位导致调用链发生错误的服务;怎样监控服务的健康状态等等,这都是使用了微服务架构后需要解决的问题。本书结合我在实际使用微服务架构中积累的经验给出了其中大多数问题的解决方案,可以为读者朋友提供一个参考。
不可否认的是,正如文章开头所讲的,国内对于微服务架构的开发学习资料与课程都非常有限,这使得微服务架构在国内的推广并没有想象中的那样火热。而且,国内的相关资料大多以理论为主或者没有实战基础。所以,当电子工业出版社博文视点的付睿老师提议写一本以实战为主的微服务书籍之后,我毫不犹豫的抓住了这个机会。本书以实战为主,以理论为辅,真正的给出了能在实际生产中使用的技术方案。由于篇幅限制以及以实战为主的特点,我不会介绍太多的理论(哪怕这个理论很重要),比如在介绍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自身提供的几种健康检查的方式及原理。
第8章 微服务配置管理
本章首先介绍了为什么要使用Archaius以及Archaius实现服务热配置的原理,之后展示了使用Consul-KV实现配置中心的方式以及结合Archaius实现配置动态获取的方式,最后提供了一种将Archaius配置信息与Spring的PropertySource结合的方案。在本章的“再学一招”部分,笔者详细的分析了使用Archaius构造动态属性源以及动态获取属性的源码。
第9章 微服务进程间通信
本章首先介绍了三种服务通信框架:OkHttp、AsyncHttpClient和Retrofit,之后分别展示了使用三种框架进行服务通信的代码编写,最后在本章的“再学一招”部分,详细的分析了使用Retrofit进行服务通信的核心源码。
第10章 微服务降级容错
本章首先详细的介绍了为什么使用Hystrix、Hystrix的工作原理以及执行流程,之后展示了在实际项目中如何使用Hystrix实现服务降级容错,最后展示了怎样结合Turbine来搭建一个完整的Hystrix监控系统。在本章的“再学一招”部分,介绍了设置Hystrix配置参数的两种方法以及最常使用的11个配置项的详细介绍。
第11章 微服务日志系统
本章首先详细的介绍了为什么使用ELK以及ELK最常用的两种架构,之后搭建了ELK缓冲系统,然后展示了怎样将项目中的日志发送到日志系统中,最后简单的介绍了Kibana的常见用法。在本章的再学一招部分,介绍了怎样使用Elasticsearch-Curator进行日志的定时删除。
第12章 微服务全链路追踪系统
本章首先详细的介绍了为什么使用Zipkin、Zipkin的工作流程、数据模型以及工作原理,之后搭建了Zipkin全链路追踪系统,然后分别展示了使用AsyncHttpClient和OkHttp做服务通信时进行链路追踪的方式,并且介绍了将追踪信息进行持久化的方式。在本章的再学一招部分,详细的分析了Brave(Zipkin的官方java客户端)的核心源码。
第13章 微服务持续集成与持续部署系统
本章首先详细的介绍了为什么需要搭建持续集成与持续部署系统,之后介绍了构建这套系统的技术选型:GitLab、Jenkins、Docker-Registry与总体架构,然后分别介绍了使用jar包部署服务和使用Docker镜像部署服务时持续集成与持续部署系统的工作原理。之后,搭建了这套系统,最后分别展示了使用jar包部署服务和使用Docker镜像部署服务时,持续集成与持续部署系统的实现方式。在本章的再学一招部分,介绍了最常用的10条Docker命令。
目标读者
本书面向的读者群:
? Java技术爱好者
? Java工程师
? 微服务架构爱好者
本书特点
? 以实战为主,理论为辅,代码编写占了绝大部分的篇幅
? 代码由浅到深,会介绍表层代码下的核心源码实现
? 除了第一章,每章的结尾,都会提供一个“再学一招”部分,介绍好用的技术或者解析源码
勘误与支持
由于作者经验水平均有限,书中难免有错误之处。在本书出版后的任何时间,若你对本书有任何问题,可以发邮件到1197596604@qq.com,我会对所有问题给予回复。也可以加入QQ群:341027254,进行技术交流!
致谢
感谢51信用卡,感谢你为我提供这样一个平台,让我能够学习到很多感兴趣的技术,并能将这些技术应用到实际的项目中,也感谢在51中并肩作战的伙伴们,能在这里与一群NB的人一起工作让我感到非常自豪。
感谢51信用卡首席架构师孔晨,你敢为人先的精神和雄厚的技术沉淀使得在国内并不盛行的微服务架构在51内部运行的炉火纯青,也感谢你不辞辛劳的指导,打通了我在技术上道路上的诸多症结。
感谢电子工业出版社博文视点的付睿老师,如果没有你的提议和引导,就不会有这本书,你严谨认真的工作态度让我非常敬佩。
感谢我亲爱的老婆,是你的支持与谅解,才会让我能够有足够多的时间来完成这本书!
谨以此书献给我最敬佩的技术人、最亲爱的家人,以及众多热爱微服务的朋友们!
代码发一下
为何代码没有上传???
有没有pdf版或者mobi版?