SpringCloud
Spring Cloud 与 Spring Boot 的关系
Spring Cloud 只是利⽤了Spring Boot 的特点,让我们能够快速的实现微服务组件开发,否则不使⽤
Spring Boot的话,我们在使⽤Spring Cloud时,每⼀个组件的相关Jar包都需要我们⾃⼰导⼊配置以及
需要开发⼈员考虑兼容性等各种情况。所以Spring Boot是我们快速把Spring Cloud微服务技术应⽤起
来的⼀种⽅式。
Spring Cloud
Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布
式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都
可以⽤ Spring Boot的开发⻛格做到⼀键启动和部署。 Spring Cloud并没有重复制造轮⼦,它只是将⽬
前各家公司开发的⽐较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot⻛格进⾏再封装
屏蔽掉了复杂的配置和实现原理,最终给开发者留出了⼀套简单易懂、易部署和易维护的分布式系统开
发⼯具包。
Eureka服务注册中⼼
Eureka 包含两个组件: Eureka Server 和 Eureka Client, Eureka Client是⼀个Java客户端,⽤于
简化与Eureka Server的交互; Eureka Server提供服务发现的能⼒,各个微服务启动时,会通过
Eureka Client向Eureka Server 进⾏注册⾃⼰的信息(例如⽹络信息), Eureka Server会存储该
服务的信息;
Eureka元数据详解
- 标准元数据: 主机名、 IP地址、端⼝号等信息,这些信息都会被发布在服务注册表中,⽤于服务之间的
调⽤。 - ⾃定义元数据: 可以使⽤eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元
数据可以在远程客户端中访问。
Spring Cloud 与 Dubbo 对⽐
Dubbo是阿⾥巴巴公司开源的⼀个⾼性能优秀的服务框架,基于RPC调⽤,对于⽬前使⽤率较⾼的
Spring Cloud Netflix来说,它是基于HTTP的,所以效率上没有Dubbo⾼,但问题在于Dubbo体系的组
件不全,不能够提供⼀站式解决⽅案,⽐如服务注册与发现需要借助于Zookeeper等实现,⽽Spring
Cloud Netflix则是真正的提供了⼀站式服务化解决⽅案,且有Spring⼤家族背景。
Spring Cloud 解决什么问题
Spring Cloud 规范及实现意图要解决的问题其实就是微服务架构实施过程中存在的⼀些问题,⽐如微服
务架构中的服务注册发现问题、⽹络问题(⽐如熔断场景)、统⼀认证安全授权问题、负载均衡问题、
链路追踪等问题。
Ribbon负载均衡
负载均衡⼀般分为服务器端负载均衡和客户端负载均衡
Ribbon是Netflix发布的负载均衡器。 Eureka⼀般配合Ribbon进⾏使⽤, Ribbon利⽤从Eureka中读取到
服务信息,在调⽤服务提供者提供的服务时,会根据⼀定的算法进⾏负载。
负载均衡策略
- RoundRobinRule
- RandomRule
- RetryRule
- BestAvailableRule
- AvailabilityFilteringRule
- ZoneAvoidanceRule
Hystrix熔断器
Hystrix(豪猪----->刺),宣⾔“defend your app”是由Netflix开源的⼀个延迟和容错库,⽤
于隔离访问远程系统、服务或者第三⽅库,防⽌级联失败,从⽽提升系统的可⽤性与容错性。 Hystrix主
要通过以下⼏点实现延迟和容错。
Feign远程调⽤组件
Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的) ,是以
Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装HTTP请求报⽂的⽅式直接调⽤, Feign被
⼴泛应⽤在Spring Cloud 的解决⽅案中。
GateWay⽹关组件
Spring Cloud GateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflix Zuul,它基于
Spring5.0+SpringBoot2.0+WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模
型)等技术开发,性能⾼于Zuul,官⽅测试, GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简
单有效的统⼀的API路由管理⽅式。
路由(route): ⽹关最基础的部分,也是⽹关⽐较基础的⼯作单元。路由由⼀个ID、⼀个⽬标
URL(最终路由到的地址)、⼀系列的断⾔(匹配条件判断)和Filter过滤器(精细化控制)组
成。如果断⾔为true,则匹配该路由。
断⾔(predicates):参考了Java8中的断⾔java.util.function.Predicate,开发⼈员可以匹配Http
请求中的所有内容(包括请求头、请求参数等)(类似于nginx中的location匹配⼀样),如果断
⾔与请求相匹配则路由。
过滤器(filter):⼀个标准的Spring webFilter,使⽤过滤器,可以在请求之前或者之后执⾏业务
逻辑。
Spring Cloud Config 分布式配置中⼼
Spring Cloud Stream消息驱动组件
Spring Cloud Stream 是⼀个构建消息驱动微服务的框架。应⽤程序通过inputs(相当于消息消费者
consumer)或者outputs(相当于消息⽣产者producer)来与Spring Cloud Stream中的binder对象交
互,⽽Binder对象是⽤来屏蔽底层MQ细节的,它负责与具体的消息中间件交互。