Spring Cloud 微服务架构进阶

前面的话

我今年年初的时候,筹划了一本技术书籍,即为这篇文章的标题《Spring Cloud 微服务架构进阶》。今天正式开始预售了,年初到现在正好十个月,实在不易。写这篇文章胡乱谈谈技术之外的一些关于写书的琐事吧。

缘由

写这本书有一些机缘巧合,去年有几个出版社的编辑通过我博客上的邮箱,发邮件和我联系。可能是因为微服务这几年确实很火吧,编辑们建议我写一本关于微服务的书。当时一听而过,并没有在意(编辑们也是广撒网,不能当真认为自己的水平达到了),更主要是感觉自己的文笔很菜,技术就那样,根本没什么兴趣。不过坚持写博客确实是一个好的习惯,特别是原创的内容更有价值。笔者的博客知名度很低,但是通过公众号的方式传播,也能收获一些反馈,逐渐增强了我的信心(可能是已经膨胀了吧)。一直到去年年底的时候,觉得自己可以在技术方面更加深入,所以选择了微服务架构的流行组合框架Spring Cloud作为本书的内容,打算试试写本书。

封面

关于内容

接触Spring Cloud还是挺早的了,算是早期关注者吧,之后一直在项目中有实践和应用。相比于刚出来之前,Spring Cloud已经完善了太多,通过整合现有的开源框架和Spring社区自己开发的一部分组件,使得Spring Cloud功能越来越强大。Spring Cloud使用和整合单个组件还比较简单,但是在微服务的实践中,要求我们对这些基础的组件有更深的了解才行。在平时的应用中,我会去了解和学习各个组件的实现原理,虽然没有特别细致,但是也对其中的主要部分比较熟悉。

关于这方面的书籍,其实已经有DIDI(翟永超)的Spring Cloud微服务实战和周立Spring Cloud与Docker微服务架构实战等书籍,写得时间比较早,内容质量也挺高了。笔者实在不敢谈超越,然而技术的发展和迭代很快,Spring Cloud版本迭到了Finchley,基于的Spring Boot版本已经是2.x了(2.x已经基于Spring 5),相对来说,好多组件的实现和用法方面变化还是很大。这本《Spring Cloud 微服务架构进阶》基于最新的Finchley,详细介绍了微服务架构中涉及到的主要Spring Cloud组件,配合基础应用的案例介绍实现原理。本书适合所有的Java开发者,特别希望能为从事微服务开发和架构的读者提供一些帮助。

合作

本书是由三位作者共同完成的,另外两位:@Randy@CANGWU都是非常优秀的大佬,具体的介绍可以通过购买本书(硬广,hh)。

写书是一件比较耗费时间和精力的事情,决定做这件事的时候,深知以一人之力很难写完和写好,因素还挺多(能力、时间等)。团队合作的力量是强大的,于是约上另外了两位厉害的同学,我们开始了分工合作完成书稿,相互之间取长补短。技术书的书写整体上不是很难,每个功能组件按照基础应用案例引出实现原理的讲解。在这个过程中,有些细节还是值得深入了解的,加深了自己的一些理解,也学习到了不少。

其实书稿的初稿在五月底就完成了,后来作者之间互相审阅,并邀请了几位业界大佬帮忙审阅,编辑也提出了很多修改的建议,来来回回修改花了一个多月。其间也在等待Finchley的release版本发布,刚开始写的时候还是里程碑(Milestone不太稳定)版本,这当中比较痛苦的就是Milestone到release版本会有不少变化,如Spring Cloud Gateway中的过滤器、路由断言在不断增加和部分重构。所以当正式版出来之后,三位作者还花了不少时间去对比之前的实现差异,及时修正了一些问题。到了七月底才正式定稿,吴怡编辑在定稿之后也是加紧进行了修订排版等后续工作,深表感谢。

目录

全书共十三章,纸质版428页。介绍一下本书的目录:

  • 第 1 章 微服务架构介绍
    • 1.3.1 云原生
    • 1.3.2 The Twelve Factors
    • 1.3.3 容器化
    • 1.3.4 DevOps
    • 1.3.5 面向微服务
    • 1.2.1 ZeroC IceGrid
    • 1.2.2 基于消息队列
    • 1.2.3 Docker Swarm
    • 1.2.4 Spring Cloud
    • 1.1.1 单体应用
    • 1.1.2 SOA 架构 1.1.3 微服务架构
    • 1.1 微服务的出现
    • 1.2 微服务架构的流派
    • 1.3 云原生与微服务
    • 1.4 本章小结
  • 第 2 章 Spring Cloud 介绍
    • 2.2.1 Spring Cloud 上下文
    • 2.2.2 Spring Cloud Commons: 公共抽象
    • 2.1.1 版本说明
    • 2.1.2 Spring Cloud 组成
    • 2.1 Spring Cloud 总览
    • 2.2 Spring Cloud 特性
    • 2.3 本章小结
  • 第 3 章 Spring Cloud 的基础:Spring Boot
    • 3.4.1 默认配置文件
    • 3.4.2 外部化配置
    • 3.4.3 YAML
    • 3.4.4 自动载入外部属性到 Bean
    • 3.4.5 多 profile
    • 3.4.6 Starters
    • 3.4.7 自制一个 Starter
    • 3.4.8 Actuator
    • 3.3.1 IDEA 生成
    • 3.3.2 initial 生成
    • 3.1.1 Spring Boot 2.0
    • 3.1.2 Spring Boot 与 Spring Cloud
    • 3.1 Spring Boot 简介
    • 3.2 Spring Boot 核心特性
    • 3.3 构建一个微服务
    • 3.4 Spring Boot 配置文件
    • 3.5 本章小结
  • 第 4 章 服务注册与发现:Eureka
    • 4.5.1 Eureka Instance 和 Client 的元数据
    • 4.5.2 状态页和健康检查页端口设置
    • 4.5.3 Region 与 Zone
    • 4.5.4 高可用性服务注册中心
    • 4.4.1 服务实例注册表
    • 4.4.2 服务注册
    • 4.4.3 接受服务心跳
    • 4.4.4 服务剔除
    • 4.4.5 服务下线
    • 4.4.6 集群同步
    • 4.4.7 注册表拉取
    • 4.5.8 自我保护
    • 4.3.1 读取应用自身配置信息
    • 4.3.2 服务发现客户端
    • 4.3.3 拉取注册表信息
    • 4.3.4 服务注册
    • 4.3.5 初始化定时任务
    • 4.3.6 服务下线
    • 4.2.1 核心架构图
    • 4.1.1 Eureka 简介
    • 4.1.2 搭建 Eureka 服务注册中心
    • 4.1.3 搭建 Eureka 服务提供者
    • 4.1.4 搭建 Eureka 服务调用者
    • 4.1.5 Eureka 服务注册和发现
    • 4.1.6 Consul 的简单应用
    • 4.1 基础应用
    • 4.2 服务发现原理
    • 4.3 Eureka Client 源码解析
    • 4.4 Eureka Server 源码解析
    • 4.5 进阶应用
    • 4.6 本章小结
  • 第 5 章 声明式 Restful 网络客户端:Spring Cloud OpenFeign
    • 5.3.1 Decoder 与 Encoder 的自定制化
    • 5.3.2 请求/响应压缩
    • 5.2.1 核心组件与概念
    • 5.2.2 动态注册 BeanDefinition
    • 5.2.3 实例初始化
    • 5.2.4 函数调用和网络请求
    • 5.1.1 微服务之间的交互
    • 5.1.2 OpenFeign 简介
    • 5.1.3 代码示例
    • 5.1 基础应用
    • 5.2 源码分析
    • 5.3 进阶应用
    • 5.4 本章小结
  • 第 6 章 断路器:Hystrix
    • 6.4.1 核心配置讲解
    • 6.4.2 异步与异步回调执行命令
    • 6.4.3 继承 HystrixCommand
    • 6.4.4 请求合并
    • 6.4.5 Hystrix 仪表盘
    • 6.3.1 封装 HystrixCommand
    • 6.3.2 HystrixCommand 类结构
    • 6.3.3 异步回调执行命令
    • 6.3.4 异步执行命令和同步执行命令
    • 6.3.5 断路器逻辑
    • 6.3.6 资源隔离
    • 6.3.7 请求超时监控
    • 6.3.8 失败回滚逻辑
    • 6.2.1 服务雪崩
    • 6.2.2 断路器
    • 6.2.3 服务降级操作
    • 6.2.4 资源隔离
    • 6.2.5 Hystrix 实现思路
    • 6.1.1 RestTemplate 与 Hystrix
    • 6.1.2 Feign 与 Hystrix
    • 6.1 基础应用
    • 6.2 Hystrix 原理
    • 6.3 源码解析
    • 6.4 进阶应用
    • 6.5 本章小结
  • 第 7 章 客户端负载均衡器:Spring Cloud Netflix Ribbon
    • 7.4.1 Ribbon API
    • 7.4.2 使用 Netty 发送网络请求
    • 7.4.3 只读数据库的负载均衡实现
    • 7.3.1 配置和实例初始化
    • 7.3.2 与 OpenFeign 的集成
    • 7.3.3 负载均衡器 LoadBalancerClient
    • 7.3.4 ILoadBalancer
    • 7.3.5 负载均衡策略实现
    • 7.1 负载均衡
    • 7.2 基础应用
    • 7.3 源码分析
    • 7.4 进阶应用
    • 7.5 本章小结
  • 第 8 章 API 网关:Spring Cloud Gateway
    • 8.4.1 限流机制
    • 8.4.2 熔断降级
    • 8.4.3 网关重试过滤器
    • 8.3.1 初始化配置
    • 8.3.2 网关处理器
    • 8.3.3 路由定义定位器
    • 8.3.4 路由定位器
    • 8.3.5 路由断言
    • 8.3.6 网关过滤器
    • 8.3.7 全局过滤器
    • 8.3.8 API 端点
    • 8.2.1 用户服务
    • 8.2.2 网关服务
    • 8.2.3 客户端的访问
    • 8.1 Spring Cloud Gateway 介绍
    • 8.2 基础应用
    • 8.3 源码解析
    • 8.4 应用进阶
    • 8.5 本章小结
  • 第 9 章 配置中心:Spring Cloud Config
    • 9.3.1 为 config Server 配置多个 repo
    • 9.3.2 客户端覆写远端的配置属性
    • 9.3.3 属性覆盖
    • 9.3.4 安全保护
    • 9.3.5 加密解密
    • 9.3.6 快速响应失败与重试机制
    • 9.2.1 配置服务器
    • 9.2.2 配置客户端
    • 9.1.1 配置客户端
    • 9.1.2 配置仓库
    • 9.1.3 服务端
    • 9.1.4 配置验证
    • 9.1.5 配置动态更新
    • 9.1 基础应用
    • 9.2 源码解析
    • 9.3 应用进阶
    • 9.4 本章小结
  • 第 10 章 消息驱动:Spring Cloud Stream
    • 10.4.1 Binder For RocketMQ
    • 10.4.2 多实例
    • 10.4.3 分区
    • 10.3.1 动态注册 BeanDefinition
    • 10.3.2 绑定服务
    • 10.3.3 获取绑定器
    • 10.3.4 绑定 Producer
    • 10.3.5 消息发送的流程
    • 10.3.6 StreamListener 注解的处理
    • 10.3.7 绑定 Consumer
    • 10.3.8 消息的接收
    • 10.2.1 声明和绑定 Channels
    • 10.2.2 自定义通道
    • 10.2.3 接收消息
    • 10.2.4 配置
    • 10.1.1 消息队列常用组件
    • 10.1 消息队列
    • 10.2 基础应用
    • 10.3 源码分析
    • 10.4 进阶应用
    • 10.5 本章小结
  • 第 11 章 消息总线:Spring Cloud Bus
    • 11.3.1 在自定义的包中注册事件
    • 11.3.2 自定义监听器
    • 11.3.3 事件的发起者
    • 11.2.1 事件的定义与事件监听器
    • 11.2.2 消息的订阅与发布
    • 11.2.3 控制端点
    • 11.1.1 配置服务器 Config-Server
    • 11.1.2 配置客户端 Config-Client
    • 11.1.3 结果验证
    • 11.1 基础应用
    • 11.2 源码解析
    • 11.3 应用进阶
    • 11.4 本章小结
  • 第 12 章 认证与授权:Spring Cloud Security
    • 12.4.1 Spring Sercurity 自定制化
    • 12.4.2 OAuth2 自定制化
    • 12.4.3 SSO 单点登录
    • 12.3.1 SecurityContext 安全上下文
    • 12.3.2 Authentication 认证
    • 12.3.3 Authorization 授权
    • 12.3.4 Spring Security 中的过滤器与拦截器
    • 12.3.5 授权服务器
    • 12.3.6 资源服务器
    • 12.3.7 Token 中继机制
    • 12.2.1 Spring Security 架构概述
    • 12.2.2 Spring Security OAuth2 架构概述
    • 12.2.3 Spring Cloud Security 中的 Security 和 OAuth2
    • 12.1.1 OAuth2 简介 12.1.2 JWT
    • 12.1.3 搭建授权服务器
    • 12.1.4 配置资源服务器
    • 12.1.5 访问受限资源
    • 12.1 基础应用
    • 12.2 整体架构
    • 12.3 源码解析
    • 12.4 进阶应用
    • 12.5 本章小结
  • 第 13 章 服务链路追踪:Spring Cloud Sleuth
    • 13.2.1 特性
    • 13.2.2 项目准备
    • 13.2.3 Spring Cloud Sleuth 独立实现
    • 13.2.4 集成 Zipkin
    • 13.1.1 常用的监控组件
    • 13.1.2 基础概念
    • 13.1 链路监控组件介绍
    • 13.2 基础应用
    • 13.3 本章小结

最后

最后想说的是,写书不易,请大家支持正版。作者水平有限,如有问题和疑惑欢迎指正。

本书配套的源码地址:https://github.com/Advanced-SpringCloud/cloud-book

原文发布于微信公众号 - aoho求索(aohoBlog)

原文发表时间:2018-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

一个oracle bug的简单验证(r8笔记第45天)

最近碰到了一个oracle bug,但是我感觉还是有些运气的成分,虽然错误日志和bug描述吻合,版本也完全对应,现在有几个问题在我脑海中翻腾,就是这个问题是不是...

37070
来自专栏landv

windows server 2012 R2 远程桌面授权模式尚未配置

windows server 2012 R2 远程桌面授权模式尚未配置,远程桌面服务将在120天内停止工作。如何破解这个宽限期,目前企业7位协议号码均不包含20...

894100
来自专栏IT可乐

Spring详解(一)------概述

  本系列教程我们将对 Spring 进行详解的介绍,相信你在看完后一定能够有所收获。 1、什么是 Spring ?   Spring是一个开源框架,Sprin...

23770
来自专栏Java后端技术

SpringBoot的幕后推手...

​  这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作...

10220
来自专栏Gaussic

Spring In Action 4(Spring实战第四版)翻译与理解 第一章 付诸行动

        这几天笔者阅读了一下Spring In Action 4,感觉还是有一定的收获的。在之前的项目上,只会简单地使用Spring MVC,对于很多概...

56720
来自专栏landv

windows server 2012 R2 远程桌面授权模式尚未配置

80450
来自专栏JavaEdge

Spring Boot神器之Spring Date Jpa

一、Spring Date Jpa介绍 什么是JPA? JPA是Java Persistence API的简称,中文名Java持久层API,是JDK5.0注解或...

450120
来自专栏玄魂工作室

Hacker基础之Linux篇:系统简介特别番之Kali Linux

0x01. 前言 作为安全界的明星,Kali可以说是无人不知无人不晓,当然,除了Kali之外,我们还有许多的可以选择的工具,比如: ParrotSec ? ...

44960
来自专栏java一日一条

java的三大版本,你知道吗

J2SE是java的基础,主要是运用到桌面应用程序的开发中。小编一直以为java中是没有那种能够编译成.exe运行文件的组件,知道今天我才发现,java在这方面...

11020
来自专栏Java社区

spring是什么?它能够做什么?新手必看

21030

扫码关注云+社区

领取腾讯云代金券