SpringCloud 理论知识 - 0

现在互联网,大部分公司都用微服务架构,我2017年,那时候普遍是SSM,或者SSH,到了2018下半年,就流行用SpringCloud, Dubbo,技术更新真快! 下面说说自己对SpringCloud的理解,如有不对地方,大家留言指导出来。

SpringCloud 五大组件:Eureka、Ribbon、Feign、Hystrix、Zuul

Eureka注册中心
Feign 网络连接,服务之间通信,
Zuul 路由
Hystrix 断路器
Ribbon 是一个基于HTTP和TCP的客户端负载均衡

服务之间通信流程:

  1. 每个服务会存在Eureka Client 组件,组件会把当前服务的IP,端口注册到Eureka Server注册中心, 当需要调其他服务,组件Eureka Client 会去Eureka Server里面去拿,服务之间通信是靠Feign,他会根据IP,端口,与带上你传的参数去请求相应服务。

  2. 当一个服务分别部署在多台服务器上,Feign是无法处理,需要Rebbon处理,Rebbon有很多种算法i,其中Robin轮询算法是最常用的,它会根据服务节点的请求次数,会把请求分别发到不同服务器上,这样处理叫负载均衡,Ribbon会从 Eureka Client里获取到对应的服务注册表,然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器,通知Feign,Feign就会针对这台机器,构造并发起请求。

  3. 当服务之间调用时,如果服务出现了异常,那么会一直在请求,结果会让服务崩溃,所以需要Hystrix进行处理,Hystrix断路器是安装在服务消费者上,我们需要做的是在服务消费者上开启断路器并配置,在启动类上加上@EnableCircuitBreaker注解, 注解()空行里面写一个出现错误会调用的方法名,在Feign使用,创建一个异常返回的类,类名叫HolloConfing,在服务请求方法加上@FeifnClient(name = “服务方法路径”, fallback = HolloConfig.class),在HolloConfing定义好一个错误码,服务这边调用出现异常,返回定好的错误码,在配置文件application.yml中需要开启断路器,注意:因为默认是关闭的,开启可能会出现一些异常问题,当请求服务多少次以后,(请求多少次不请求是可以配置的),一直收到这个异常,就进行熔断处理,或者降级,不再去请求这个处理,这个说起来看上去很简单,其实中间还是有很多门路的,我举个例子,如你购买了商品,需要去调积分服务,这个时候,积分服务一直返回异常,那么用户的积分是无法加的,这个时候,我们需要通过日志来记录,我们日志系统存储这些插入积分的日志,进行运行这些日志SQL,当然你也可以手动运行。

  4. 最后是网关Zuul,网关会将请求转发给后端的各个服务,Zuul也可以做统一的降级、限流、认证授权、安全等

Feign

用注解定义一个 FeignClient接口,然后调用那个接口就可以了。Feign Client会在底层根据你的注解,
跟你指定的服务建立连接、构造请求、发起靕求、获取响应、解析响应

Ribbon

Ribbon从 Eureka Client里获取到对应的服务注册表,这样可以通过开发者设置的算法进行计算,计算后,通知Feign,Feign针对这台机器发送请求

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。
通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,
但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的

硬件与软件

负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容。因为负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。
我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡。
硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等;
而软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等

硬件负载均衡的设备或是软件负载均衡的软件模块都会维护一个下挂可用的服务端清单,
通过心跳检测来剔除故障的服务端节点以保证清单中都是可以正常访问的服务端节点。
当客户端发送请求到负载均衡设备的时候,该设备按某种算法(比如线性轮询、按权重负载、按流量负载等)
从维护的可用服务端清单中取出一台服务端端地址,然后进行转发。

客户端负载均衡和服务端负载均衡最大的不同点在于上面所提到服务清单所存储的位置。在客户端负载均衡中,
所有客户端节点都维护着自己要访问的服务端清单,而这些服务端端清单来自于服务注册中心

Hystrix
Hystrix也是Netflix套件的一部分。他的功能是,当对某个服务的调用在一定的时间内(默认10s,由metrics.rollingStats.timeInMilliseconds配置),
有超过一定次数(默认20次,由circuitBreaker.requestVolumeThreshold参数配置)
并且失败率超过一定值(默认50%,由circuitBreaker.errorThresholdPercentage配置),该服务的断路器会打开。返回一个由开发者设定的fallback,
fallback可以是另一个由Hystrix保护的服务调用,也可以是固定的值。fallback也可以设计成链式调用,先执行某些逻辑,再返回fallback。

Zuul
如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务,也可以做统一的降级、限流、认证授权、安全,等等。

后面我会更新出搭建框架步骤与源码,希望可以帮助到大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值