㈠ springcloud五大组件
一、注册中心Eureka
每个服务如订单服务、库存服务、积分服务都配备一个Eureka Client组件,该组件负责将服务信息注册到Eureka Server中,即向Eureka Server注册中心上报服务地址和端口。
Eureka Client:负责将服务信息注册到Eureka Server中。
Eureka Server:作为注册中心,拥有一个注册表,记录着各服务所在机器的IP地址和端口号。
二、服务网关Zuul
Zuul作为微服务网关,主要负责网络路由。
所有浏览器请求都必须经过网关,网关会根据请求特征将请求转发到后端的服务中。此外,网关还能实现统一降级、限流、认证授权等功能。
三、服务调用Feign
Feign用于服务调用,服务之间的代码调用基于带有FeignClient注解的自定义接口。Feign简化了服务之间网络连接的构建过程。FeignClient会根据接口配置到注册中心(本地缓存)中找到对应的请求服务接口。
Feign使用动态代理实现服务调用,其原理如下:
a,对某个接口定义@FeignClient注解后,Feign会针对该接口创建一个动态代理。
b,调用接口时,实际上调用的是Feign创建的动态代理。
c,Feign的动态代理根据接口上的@RequestMapping等注解动态构造请求的服务地址。
d,最后针对该地址发起请求并解析响应。
四、熔断器Hystrix
熔断器是一个隔离、熔断以及降级的框架。
例如,订单服务调用积分服务时,由于积分服务异常,导致订单服务请求在调用积分服务时卡住几秒钟。在高并发情况下,订单服务所有线程都卡在请求积分服务上,会导致订单服务异常,这就是服务雪崩。熔断器的作用就是在积分服务异常时,确保订单服务仍能正常运行,避免服务异常。
隔离:服务与服务之间请求使用线程池,防止下游服务异常导致上游服务所有线程都卡住在请求该下游服务的环节。
熔断:当订单服务请求积分服务时,若积分服务出现异常则及时熔断积分服务,订单服务再次请求积分服务时将直接走Hystrix熔断器返回报错信息。
降级:在订单服务请求走熔断器过程中,将该过程中请求记录下来,将涉及积分变更的数据存入数据库,后续人工处理。
五、负载均衡Ribbon
Ribbon的负载均衡默认使用Round Robin轮询算法。例如,当订单服务对积分服务发起6次请求时,将先请求第一台机器,然后是第二台,不断循环。
㈡ SpringCloud入门简述
微服务,是一个小型的服务,也是一种设计理念,将一个大型繁杂的系统拆分为多个小型的服务,进行独立部署,这些服务在独立进程中运行,通过特定的协议进行通信
优点:
缺点:
在服务通信性能上RPC更强,但是Rest更为灵活
SpringCloud是基于SpringBoot实现的微服务框架,为开发人员提供了很多快速构建分布式系统中常见模式的工具,包括配置管理、服务发现、断路器、智能路由、微代理,控制总线等。
Spring Cloud专注于为典型的用例提供良好的开箱即用体验,并为其他用例提供扩展性机制。
参考地址:
Eureka是Netflix开发的基于Rest的服务发现框架,SpringCloud基于此进行二次封装,实现服务的管理。
创建一个Eureka服务:https://www.cnblogs.com/william-m/p/15991511.html
如果没有Eureka,如何进行服务之间的调用?
使用Rest进行调用,先将RestTemplate注册到Bean,然后:
Eureka遵循的是AP原则,Eureka各个节点都是平等的,部分服务节点的下线不会影响正常服务的调用,只要该服务还剩下一个节点在线就可以进行正常的服务访问,即保证了服务可用,但是并不能保证查询到的信息是最新的。Zookeeper的CP原则与之不同,Zookeeper会有一个master节点来保证一致性,一旦master节点挂掉,剩余的节点会重新选举一个leader,而选择的过程需要时间,这期间会使得该服务瘫痪,所以需要满足高可用的话该情况是不能够容忍的。
Spring Cloud Ribbon是一个基于HTTP和TCP的 客户端负载均衡 工具,基于Netflix Ribbon实现,通过轮询、随机等算法选择一个可用服务。
目的:将用户的请求平摊的分配到多个服务上,实现高可用
最大区别:服务清单所存储的位置
客户端先发送请求到负载均衡服务器,然后由负载均衡服务器通过负载均衡算法,在众多可用的服务器之中选择一个来处理请求。
客户端自己维护一个可用服务器地址列表,在发送请求前先通过负载均衡算法选择一个将用来处理本次请求的服务器,然后再直接将请求发送至该服务器。
逻辑时序:RestTemplate发起请求 负载均衡器拦截器拦截 LoadBalanceClient获取ILoadBalance 获取服务列表 根据负载均衡器选择一个server 发起请求 记录调用信息
Ribbon基于HTTP和TCP客户端的负载均衡器可以自己构建HTTP请求,使用RestTemplate发送服务
Feign基于Ribbon进行改进,采用接口的方式,将需要调用的服务的方法定义成抽象方法
Consumer应用
启动类
为了调用Proct应用服务的接口类
Proct应用
controller
Hystrix是一个服务容错与保护的组件,用于 服务降级 、 服务熔断 、 服务限流 等等,能够保证在其中一个服务出现问题的时候,不会出现级联故障,防止雪崩,提高分布式服务的健壮性。
将某些服务停掉会i这不进行业务处理,释放资源来维持主要服务的功能。
应对服务雪崩的一种保险措施,是微服务的链路保护机制,是服务降级的一种特殊处理方式。
为了应对某个服务故障的情况,保证系统的整体可用性,熔断器会切断对该服务的请求,返回一个比较友好的错误响应,直到服务恢复正常
熔断机制的三种状态:
示例:
熔断:直接切断服务的调用
降级:牺牲非核心业务保证核心服务的正常
限流:服务访问量达到阈值后拒绝多余的调用
Zuul是一个微服务网关。网关:是一个网络系统的前置入口。也就是说要想访问一个有网关的网络系统请求相应的服务,需要先进入网关,然后路由到相应的服务。
通常是组成一个系统的微服务很多、或者有权限要求时需要用到网关。
Zuul提供一个过滤器,父类为ZuulFilter,用来过滤代理请求,提供额外的功能逻辑(这点类似于AOP),包括前置过滤、路由后过滤、后置过滤、异常过滤。
ZuulFilter包含的抽象方法:filterType、filterOrder、shouldFilter、run
当微服务众多的时候,想要管理各个服务的配置时过于繁杂,SpringCloud Config则可以用来对每个微服务的配置进行集中的管理。可以实现权限管控、灰度发布、版本管理、格式检验、安全配置等。
作用:
特点:
文章来自https://www.cnblogs.com/william-m/p/16153557.html