参考书籍:《Spring Cloud微服务实战》
导图源文件在readme folder下
- JDK 1.8
- Gradle 4.2.1
- Spring Cloud Finchley RC2
- Spring Boot 2.0.2
服务注册中心
核心:
- eureka -- 服务治理框架
- 服务注册、服务发现
Eureka 结构:
- 服务端、客户端
- 服务端需要高可用<节点互相注册>
引用组件:
- spring-cloud-starter-netflix-eureka-server
基于Spring boot搭建的简单service
引用组件:
-
spring-cloud-starter-netflix-eureka-client
>用于向eureka服务端注册自己,以及发送心跳检测/下线,以及通过它发现其他服务以实现服务调用 -
spring-cloud-starter-sleuth
>用于服务调用链路追踪 -
spring-cloud-starter-zipkin
>用于收集各个服务上请求链路的跟踪数据,以实现对服务调用的监控 -
spring-boot-admin-starter-client
>将当前服务注册到spring boot admin下,进行统一管理
使用Ribbon, 构建消费hello-service的service
核心:
Ribbon:
- 基于 HTTP 和 TCP 的客户端负载均衡工具
- 通过拦截器实现
- 多种负载均衡策略可选
Hystrix:
- 断路器、线程隔离
- 服务容错保护
- 服务降级、服务熔断、线程和信号隔离、请求缓存/合并、服务监控(见下hystrix-dashborad & turbine)
引用组件:
-
spring-cloud-starter-netflix-eureka-client
-
spring-cloud-starter-netflix-ribbon
-
spring-cloud-starter-netflix-hystrix
-
spring-boot-admin-starter-client
>将当前服务注册到spring boot admin下
使用Feign, 构建消费hello-service的service
核心:
Feign:
- 整合 Ribbon 和 Hystrix
- 提供声明式Web服务客户端定义方式
引用组件:
-
spring-cloud-starter-netflix-eureka-client
-
spring-cloud-starter-openfeign
-
spring-cloud-starter-sleuth
-
spring-cloud-starter-zipkin
-
spring-boot-admin-starter-client
可视化的服务监控Dashboard
核心:
- 基于 Hystrix, 监控单个实例
- 通过集成 Turbine 来实现集群监控
- 依靠 Actuator 暴露客户端 Hystrix 接口来采集数据
引用组件:
-
spring-cloud-starter-netflix-hystrix
-
spring-cloud-starter-netflix-hystrix-dashboard
用于监控服务集群
核心:
- 监控某一集群服务
- 整合 Eureka 客户端以发现服务,然后监控指定服务集群
- 可配合 Hystrix Dashboard 使用
结构:
- 可启动多个 turbine 服务 以构建不同的聚合集群
引用组件:
- turbine: spring-cloud-starter-netflix-turbine
API网关服务
核心:
Zuul:
- 对外暴露服务,统一调度、过滤
- 路由、过滤
- 动态过滤、动态路由
Bus:
- 基于消息中间件(Rabbit/Kafka)的消息总线
- 在服务间传递消息
- 配合 config server 以实现动态刷新所有client的配置
结构:
- 自整合hystrix & ribbon
引用组件:
-
spring-cloud-starter-netflix-zuul
-
spring-cloud-starter-netflix-eureka-client
-
spring-cloud-starter-config
>config client, 用于向config server获取/更新外部配置信息 -
spring-cloud-starter-bus-amqp
>使用消息总线,配合config client以实现动态刷新client端配置
存放在git上的配置信息
分布式配置中心服务端
核心:
- 提供集中化的外部配置支持
结构:
- 服务端 和 客户端
- 服务端会自动读取最新提交的内容
- 客户端不能感知服务端配置的更新,需要手动触发refresh接口(可利用git webhook触发config-server, 配合消息总线)
引用组件:
- spring-cloud-config-server
- spring-cloud-starter-netflix-eureka-client
- spring-cloud-starter-bus-amqp
- spring-boot-admin-starter-client
rabbitmq demo
引用组件
- spring-boot-starter-amqp
>集成rabbitmq
测试 stream 的demo
核心
- 支持构建事件(消息)驱动的微服务
- 支持RabbitMQ && Kafka
引用组件
- spring-cloud-starter-stream-rabbit
用于管理、查看基于spring boot应用的server端
引用组件
- spring-boot-admin-starter-server
Spring Cloud 基于 Spring Boot, 因其自动化配置、快速开发、轻松部署的特性.
整个微服务架构分为内部和外部,分界线是 API 网关(Zuul或者Gateway).
内部体系中,最重要的是服务治理框架 Eureka,需要通过服务名来实现服务间依赖的组件都需要向它注册,以确保能被其他服务发现或者发现其他服务.
一个标准的Spring Cloud应用包含两个组件:Eureka Client && Hystrix.
如依赖其他服务则需要加入 Ribbon 或者 Feign.
如果需要使用消息中间件(如Rabbit/Kafka), 需要引入 Stream.
如果需要动态更新配置、或者消息总线,则需要 Config Server && Bus.
如果需要集中管理应用,则需要加入Spring Boot Admin && Client.
如果需要实现对单个实例、服务集群的监控,可使用 Hystrix && Turbine.
所有的监控都依赖于 Actuator 以暴露对应的接口,以供其他程序采集数据.
如果需要服务调用链路追踪,则需要 Sleuth, 配合 Zipkin, 实现可视化的监控管理界面.
需要 Zuul(或者 Gateway)充当 API 网关,以实现统一入口,进行统一调度,请求过滤和路由.
需要 Eureka Server, 实现服务治理功能.
除了工具类应用(例如Zipkin Server、Spring Boot Server、Hystrix Dashboard),基本上都需要高可用(多实例).
实现高可用,Eureka Server通过节点互相注册, 而其他应用则通过Eureka来实现基于服务而不是实例的使用.
建议所有应用注册 Spring Boot Admin,以及加入Sleuth && Zipkin Client, 以及暴露对应接口.
建议所有应用加上安全验证(例如Security).
**工具类应用**
* Spring Boot Admin(配合 admin client)
* Zipkin Server(配合sleuth && zipkin client)
* Hystrix Dashboard(配合hystrix && turbine)


