首页 > 其他分享 >SpringCloud的重要组件

SpringCloud的重要组件

时间:2022-11-04 10:45:49浏览次数:46  
标签:降级 调用 重要 SpringCloud 限流 注册 组件 服务

SpringCloud基本组件

一、SpringCloud是什么

SpringCloud是一套基于SpringBoot的微服务解决方案。最开始是由NetFilx开源的一些组件,但是由于这些组件已经进入了维护模式(不再进行更新发布,只对一些bug进行修复),于是Alibaba开发了一条组件来加强SpringCloud,SpringCloudAlibaba中基于NetFlix开发的组件进行了完善与提升。

SpringCloud的整个架构中的重要组件:

  • 注册中心:Eureka(NetFilx)只能进行服务注册、服务消费、Zookeeper(单独的注册中心,可与Dubbo框架整合使用)、Nacos(Alibaba,既可以进行注册中心,也可以作为配置中心)
  • 网关:SpringCloud Getaway
  • 负载均衡:Ribbon
  • 熔断与限流:Hystrix(NetFilx注解配置)、Sentinel(Alibaba,有完善的可视化窗口,且可以在可视化解密上对限流与熔断进行操控)
  • 分布式的链路跟踪:Sleuth
  • 服务接口调用:OpenFeign

二、组件的简单介绍

1、NetFilx公司的组件(进入维护模式)

1)EureKa注册中心

注册中心负责服务发现、服务注册,管理已注册的服务。包含两大组件:

  • EureKa Server:服务提供者,在注册中心注册服务
  • EureKa Client:服务消费者,通过服务注册中心远程消费已注册的服务
2)Ribbon负载均衡

本地式的负载均衡,不像Nginx的服务端载均衡,它是消费者获取到注册中心已注册的全部服务后,交由本地的JVM来进行负载均衡。

常见的两种负载均衡方式(使用Rule类来进行定义):

  • RoundRobinRule:轮询
  • RandomRule:随机
3)OpenFeign服务接口调用

接口调用:OpenFeign服务接口调用是在Feign基础上的完善,它内部集成了RestTemplate,我们无需再使用繁琐RestTemplate来进行调用,而是使用定义接口的方式,控制层直接调用接口即可(保证接口的类型与注解必须通服务方控制层一致)。

超时控制:OpenFeign默认超时一秒就报错,如果需要修改超时时间或者重试次数需要在application.yml文件中配置相关参数

日志打印:Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。说白了就是对Feign接口的调用情况进行监控和输出。

4)Hystrix断路器

服务降级Fallback:由于出现异常或者拥塞,不进行调用并返回一个兜底方法。出现服务降级的几种方式:

  • 程序运行异常
  • 超时自动降级

服务熔断Breaker: 熔断器默认关闭,当发生异常或者调用超时时,熔断器打开,此时服务都不调用,等待一段时间后尝试发送调用请求,成功的话就关闭断路器。

服务限流Flowlimit:避免高并发,大量请求同时进行,超过就进行降级或熔断

服务监控hystrixDashboard:对于服务调用的情况进行可视化图像显示

2、SpringCloud的组件

1)网关Gateway

网关在微服务中处于调用之上负载均衡之下的那部分,负责对请求的过滤及其他处理。主要由三部分组成:

  • 路由Route:由一系列断言加过滤组成,判断路由是否匹配,如果断言为true则匹配该路由
  • 断言Predicate:为路由匹配提供条件,即判断标准
  • 过滤Filter: Filter的作用在于对拦截到的请求在被路由前后进行修改
2)分布式链路请求跟踪Sleuth

Sleuth的作用在于对分布式的调用链路进行跟踪,使用zipkin进行显示化。以便我们对于微服务的调用链路有明确的认识,有利于排错与优化分布式系统

3、SpringCloudAlibaba

1、Nacos(注册中心加配置中心):整合了Ribbon、EureKa、Figure

1)注册中心

类似于EureKa,但是配置方式有所不同,使用EnableDiscoveryClient来标注服务需要被注册中心管理,而且图形化界面更加完善与美观。

2)配置中心

可以在Nacos的可视化界面中进行参数的配置,从而修改服务端的参数,而且支持热部署。参数的配置文件默认会持久化在Nacos的自带derby数据库中,与可以与MySQL数据库进行整合,把配置文件持久化在MySQL数据库中。使用Namespace+Group+Data ID来标识配置文件,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

2、Sentinel实现熔断与限流

使用Sentinel在可视化界面上进行限流以及熔断的处理。

1)流量控制

  • 阈值类型:QPS每秒请求数、线程数
  • 流控模式:直接(直接控制资源)、关联(如果关联的资源被降级,则被管理的也会降级)、链路(指定链路上的流量控制)
  • 流控效果:快速失败(直接降级)、WarmUp(根据冷加载因子,对阈值进行处理,即开始时的阈值更小,一段时间后正常阈值)、排队等待(匀速排队,阈值必须设置为QPS)

2)降级规则:

与Hystrix不同的是,指按照自己的规则进行降级,如果发生了异常不做降级处理

  • 慢调用比例:调用时间超过阈值的调用次数除以总调用次数
  • 异常比例:异常的调用所占比例
  • 异常数:发生异常的调用

3)热点Key限流

对于一些需要大量调用的参数进行限流,可以根据参数的索引和类型进行限流处理

4)@SentinelResource

自定义降级方法,可以定义降级类,减少代码耦合和冗余。

  • 按URL地址限流:调用默认的降级方法
  • 按资源名限流:调用自定义的降级方法

5)规则持久化

将规则参数Json持久化,写在Nacos的配置中心,由于配置中心存在derby数据库,可以实现规则的持久化。

标签:降级,调用,重要,SpringCloud,限流,注册,组件,服务
From: https://www.cnblogs.com/magicsound/p/16856938.html

相关文章

  • 细说React组件性能优化
    React组件性能优化最佳实践React组件性能优化的核心是减少渲染真实DOM节点的频率,减少VirtualDOM比对的频率。如果子组件未发生数据改变不渲染子组件。组件卸载前......
  • SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
    1、购买云服务器购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup后面的环境都是基于此环境Centos7.6;2、安装SecureCRT和SecureFX2.1SecureCRT教......
  • element-admin - 图片上传组件 ImageUpload
    预览详情:      父组件:注册引入子组件;只需要传递一个数据 limit ;子组件:-图片上传-el-upload<template><div><el-uploadaction="#......
  • vue组件通信6种方式总结(常问知识点)
    前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的Vuex状态管理方案可以很好的解决组件之间的通信问题,但是在组件库内部使用Vuex往往会......
  • vue组件通信方式有哪些?
    vue组件通信方式一、props(父向子传值----自定义属性)/$emit(子向父传值-----自定义事件)父组件通过props的方式向子组件传递数据,而通过$emit子组件可以向父组件通信......
  • React组件之间的通信方式总结(上)
    先来几个术语:官方我的说法对应代码ReactelementReact元素letelement=<span>A爆了</span>Component组件classAppextendsReact.Component{}无Ap......
  • React组件之间的通信方式总结(下)
    一、写一个时钟用react写一个每秒都可以更新一次的时钟importReactfrom'react'importReactDOMfrom'react-dom'functiontick(){letele=<h1>{ne......
  • 《ASP.NET Core技术内幕与项目实战》精简集-高级组件4.3:请求数据校验
    本节内容,涉及到8.3(P269-P272),以WebApi说明为主。主要NuGet包:内置命名空间:System.ComponentModel.DataAnnotationsFluentValidation.AspNetCore(数据检验框架)  一、请......
  • React组件基础
    1.组件基本介绍组件是React中最基本的内容,使用React就是在使用组件组件表示页面中的部分功能多个组件可以实现完整的页面功能组件特点:可复用,独立,可组合2.Re......
  • 浅谈自定义组件样式覆盖的方式
    简介有时候,基础组件提供的样式不够,需要在不同模块中使用不同的样式,而且差异大到无法通过一两个属性完成。比如组件的颜色,最常见的有三个区域(文字/图标、背景、边框,常用但......