SpringCloud
SpringCloud是基于SpringBoot的一整套实现微服务的框架。它提供了微服务开发所需的配置管理(SpringCloudConfig)、服务发现(Eureka)、熔断器(Hystrix)、智能路由(Zuul)、微代理、控制总线(SpringCloudBus)、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,基于SpringBoot,会让开发微服务架构非常方便。
SpringCloud架构中最核心的是Eureka注册中心,它是一个通讯录。所有p端和c端都会注册在上面,cloud中c端应用feign组件调用p端。应用程序导致网络请求出现问题时,hystrix组件实现容错机制。用户请求量变大时,用ribbon组件实现客户端的负载均衡。而服务器端的负载均衡通常使用nginx反向代理。SpringCloud中有类似于servlet过滤器的组件,zuul网关组件对整个服务架构进行安全过滤。当使用一个服务调用多个feign组件的时候,sleuth+zipkin组件用来服务追踪,可以用来调试接口(追踪问题)。config组件进行统一配置。
dubbo基于RPC,SpringCloud基于RESTful。
Dubbo专注于服务治理;Spring Cloud关注于微服务架构生态。
Eureka
Eureka是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能
Eureka的两个组件
Eureka Server提供服务注册服务
Eureka Client用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器
Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性
Zuul
是开源的一个API Gateway 服务器, 本质上是一个web servlet应用
-Zuul是所有请求到达后端服务器的前门
Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求消炎、服务聚合等功能的基础,Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他的微服务的消息,也即以后的访问微服务都可以通过Zuul跳转后获得 ,Zuul服务最终还是会注册进Eureka,提供=代理+路由+过滤三大功能
Zuul和Nginx的区别
Zuul和Nginx都可以实现负载均衡、反向代理、过滤器请求、实现网关效果
Nginx采用C语言编写
Zuul采用java语言
Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡。
Nginx负载均衡实现:采用服务器端实现负载均衡。
Nginx比Zuul功能会更加强大,因为Nginx整合一些脚本语言(Nginx+Lua)
Nginx适用于服务器端负载均衡|也可以实现网关
Zuul适合微服务中实现网关,而且使用的技术是java语言。
nginx+zuul实现网关
nginx作用实现反向代理
zuul对微服务实现网关拦截
Hystrix熔断与服务降级
熔断器:避免系统发生雪崩,开启,半开,关闭状态
发现服务不能调通,可以对该服务开启熔断器
半开状态下部分请求可以再次访问,如果能调通,则关闭,如果不通还是开启状态
服务降级:当没有达到熔断器开启条件的时候,出现问题会走备用数据
Feign
是什么?
是一个声明式webService客户端,使用feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后再上面添加注解,同时也支持JAX-RS标准的注解,Feign也支持可拔插式的编码器和见吗器,SpringCloud对feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡,默认轮询,需要两个配置:
服务器地址列表——谁来参选
选择策略规则——怎么选
能干什么?
Feign旨在使编写Java HTTP客户端变得更容易。
前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法,但是在实际开发中,由于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用,所以,Feign在此基础上做了进一步封装,由它来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用SpringCloud Ribbon时,自动封装服务调用客户端的开发量。
Sleuth
提供链路追踪,理清服务间的调用关系
可视化错误
分析耗时
优化链路
每个调用记录是一个span,多个span组成trace(一个追踪)
ZipKin
收集服务器上请求链路的跟踪数据,可以通过她提供的API接口辅助查询跟踪数据,通过UI组件帮助及时发现的性能问题
Sleuth+Zipkin工作原理
Sleuth收集追踪数据通过http请求(高并发时也可换成Kafka等消息中间件)发送到Zipkin,追踪数据由Collector(收集器组件)收集,利用Storage(存储组件)存储信息,利用Web UI来展示数据。也可以使用Zipkin的API查询在Storage中存储的数据。
浙公网安备 33010602011771号