微服务:spring-cloud-netflix
什么是微服务?
广义上的微服务就是将一个整体服务系统根据业务划分为更细粒度的服务,每个服务之间通过轻量级通信机制进行通信,根据网关可以维护微服务的安全,通过负载均衡和熔断机制提高可用性,通过统一的注册中心进行服务注册和获取,还可以通过统一的配置方便对微服务高效管理,这些服务组合起来形成可以解决实际问题的整体。
狭义上的微服务是指解决单个业务的服务,单独占用一个进程。
微服务包含很多模块:
spring-cloud-netflix:
API网关(zuul)-> 负载均衡(ribbon,feign) -> 微服务(服务消费者、服务提供者)(注册中心(eureka))
-> 熔断机制(Hystrix)等
1、注册中心(可以搭建集群):eureka
1、需要导包:spring-cloud-starter-eureka-server
2、添加配置:添加端口,添加hostname,添加规则和service-url
3、启动类添加注解:@EnableEurekaServer
2、服务提供者(可以搭建集群):
1、导包:spring-cloud-starter-eureka,以及其他开发环境
2、添加配置,表明默认的url路径
3、开启注解
@EnableEurekaClient//服务注册
@EnableDiscoveryClient//服务发现
3、服务消费者(一般为一个服务):
1、导包:spring-cloud-starter-eureka
2、配置service-url
3、开启注解@EnableEurekaClient
4、编写controller,通过restTemplate调用服务提供者的url地址
4、服务消费者的负载均衡(两种方式:基于Ribbon、Feign):
①Ribbon:基于restful风格的负载均衡
1、导入:spring-cloud-starter-ribbon
2、注解:@RibbonClient(name = “SPRINGCLOUD-PROVIDER-DEPT”,configuration = LljRule.class)
3、自定义负载均衡策略:将策略放入我们的ioc中管理
②Feign:基于面向对象风格的负载均衡(集成ribbon)
1、导入:spring-cloud-starter-ribbon,spring-cloud-starter-openfeign
2、配置与ribbon一样,
3、填写@FeignClient的service接口
4、调用接口,实现路由
5、熔断机制(Hystrix):
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免的会
调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出现问题时,不会导致整个服务失败,避免出现
级联故障,以提高分布式系统的弹性。
“断路器”,本身是一种开关装置,当某个服务单元出现故障之后,通过断路器的故障监控,向调用方法
返回一个服务预期的,可处理的备选响应,而不是长期等待或者抛出不可处理的异常,,这样就可以保证
服务调用方法的线程不会被长时间的不必要的占用,从而解决了分布式系统因为某个节点故障导致的服务雪崩。
服务降级
服务熔断
服务限流
接近实施的监控
服务熔断(服务器端): 对应雪崩效应的一种微服务链路保护机制 (某个服务超时或者异常)
当某个微服务不可用或相应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回错误的响应信息
当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用
Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制。
注解:@HystrixCommand
给对应的controller的路由添加@HystrixCommand注解,defaultFallback添加备选方案
服务降级:(客户端) (从整体网站负载考虑,在某种情况下,服务将不再被调用)
通过对业务的整体权衡,将不重要的、访问少的业务服务进行有策略的不处理或者简单处理,为了释放服务器资源,
保证核心业务正常高效运行。
实现FallbackFactory类重写create方法
通过feign的@FeignClient注解fallbackFactory设置降级策略
监控:
写监控页面,导入hystrix 和hystrix-dashboard依赖,配置port 配置@EnableHystrixDashboard主类启动其他服务配置actuator,并注入ServletRegistrationBean将Hystrix流监控就好了
6、路由网关:zuul 先走路由网关,再走微服务等 API Geteway
包含了对请求的路由和过滤两个最主要的功能。(跳转)
zuul会放入eureka的注册中心中,
三板斧,导包,配置,注解
------------------------------------------------Netflix 与下方无关了-----------------------------------------------------
7、Springcloud config 分布式配置
微服务意味着要将单元应用中的业务拆分成一个个的子服务,每个服务的粒度相对较小,因此系统中
会出现大量的服务,由于每个服务都需要必要的配置才行,因此需要统一管理这些动态配置是必要的。
SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml
如果我们有很多微服务,将会进入配置深渊。
为微服务提供集中化配置,为各个不同服务器提供外部化中心配置。
SpringCloud Config 分为服务端 + 客户端
优势:
集中化配置文件
不同环境,不同配置,动态化配置更新
当配置变化,服务不需要重启,即可实现配置的变化
将配置信息以REST接口的形式暴露
版本推荐:
1、SpringCloud: Hoxton.SR8
2、SpringBoot:2.3.3.RELEASE
以下版本全为:2.2.5.RELEASE
3、服务者:pring-cloud-starter-netflix-eureka-client
4、Eureka:spring-cloud-starter-netflix-eureka-server
5、消费者+Ribbon:spring-cloud-starter-netflix-eureka-client
spring-cloud-starter-netflix-ribbon
6、Feign: spring-cloud-starter-openfeign
7、Hystrix:spring-cloud-starter-netflix-hystrix
spring-cloud-starter-netflix-hystrix-dashboard
8、zuul:spring-cloud-starter-netflix-zuul