SpringCloud
文章平均质量分 59
vegetari
天才出自勤奋,编程悟道
展开
-
springCloud 网关-17 gateway 基于sentinel 限流
一,为什么限流或者限流的场景为什么限流,很简单,因为遇到了高并发,需要提高系统应对大流量的能力,保证系统不宕机,维护系统正常的运行。如12306抢票,双十一的活动。二,什么是限流,限制哪些流?限流就是限制流量。但是流量这两个字比较笼统,还是没说清楚,我们将这个限流和具体业务放在一起聊一下就比较详细了。限制某个接口一分钟内最多请求 100 次 限制某个用户的下载速度最多 100KB/S 限制某个用户同时只能对某个接口发起 5 路请求 限制某个 IP 来源禁止访问任何请求我们聊聊上原创 2022-03-10 23:00:01 · 806 阅读 · 0 评论 -
springCloud 网关限流算法-16
目录一,漏桶算法二,令牌桶算法三,基于Filter的限流 3.1 环境搭建 3.2 启动redis3.3配置KeyResolver3.4 测试一,漏桶算法漏桶算法可以很好地限制容量池的大小,从而防止流量暴增。漏桶可以看作是一个带有常量服务时间的 单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。 在网络中,漏桶算法可以控制端口的 流量输出速率,平滑网络上的突发流量,实现流量整形,从而为网络提供一个稳定的流量。为了更好...原创 2022-03-01 22:37:53 · 586 阅读 · 0 评论 -
springCloud-15 gateWay 网关限流算法
一,计数器算法计数器限流算法是最简单的一种限流实现方式。其本质是通过维护一个单位时间内的计数器,每次请求 计数器加1,当单位时间内计数器累加到大于设定的阈值,则之后的请求都被拒绝,直到单位时间已经过去,再将计数器重置为零如果单位时间为一分钟,阈值为10,如果请求量大于阈值,那么阈值外的请求会被全部拒绝,直到单位时间结束后,阈值清零。重新计算。0...原创 2022-02-22 23:05:06 · 259 阅读 · 0 评论 -
springCloud-14 gateWay 统一鉴权
目录一,统一鉴权1.1 鉴权逻辑1.2 代码实现一,统一鉴权内置的过滤器已经可以完成大部分的功能,但是对于企业开发的一些业务功能处理,还是需要我们自己 编写过滤器来实现的,那么我们一起通过代码的形式自定义一个过滤器,去完成统一的权限校验。1.1 鉴权逻辑开发中的鉴权逻辑:当客户端第一次请求服务时,服务端对用户进行信息认证(登录) 认证通过,将用户信息进行加密形成token,返回给客户端,作为登录凭证 以后每次请求,客户端都携带认证的token 服...原创 2022-02-22 22:58:15 · 3384 阅读 · 0 评论 -
springCloud-13 gateWay过滤器:概述
一,过滤器Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。与Zuul网关类似,也是通过过滤器的形式来实现的。那么接下来我们一起来研究一下Gateway中的过滤器1.1 过滤器基础1.1.1 过滤器的生命周期Spring Cloud Gateway 的 Filter 的生命周期不像 Zuul 的那么丰富,它只有两个:“pre” 和 “post”。PRE: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、...原创 2022-02-21 22:56:25 · 855 阅读 · 0 评论 -
springCloud-12 gateWay网关:开启微服务名称转发
让网关通过微服务名称进行转发到对应的微服务,只需要添加配置文件# 配置自动的根据微服务名称进行路由转发 discovery: locator: enabled: true #开启根据服务名称自动转发 lower-case-service-id: true #微服务名称以小写形式呈现server: port: 8080 #服务端口spring: application: name: api-gateway #指定原创 2022-02-21 22:20:23 · 2642 阅读 · 0 评论 -
springCloud-11 gateWay网关:动态路由配置
目录一,动态路由 1.1添加注册中心依赖 1.2 配置动态路由二,重写转发路径 2.1 修改application.yml 文件 2.2添加RewritePath重写转发路径Spring Cloud Gateway 的功能很强大,前面我们只是使用了 predicates 进行了简单的条件匹配,其实 Spring Cloud Gataway 帮我们内置了很多 Predicates 功能。在 Spr...原创 2022-02-20 17:42:42 · 4344 阅读 · 0 评论 -
springCloud-网关-10 GateWay 依赖问题和内置断言条件
一,入门案例1.1 创建gateway 模块并导入依赖在项目中添加新的模块 shop_gateway_server ,并导入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId></dependency>注意SpringCloud原创 2022-02-17 23:58:01 · 1822 阅读 · 0 评论 -
springCloud-网关-09 微服务网关GateWay
Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet;直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支持长连接)才发布,但 Spring Cloud 暂时还没有整合计划。Spring Cloud Gateway 比 Zuul 1.x 系列的性能和功能整体要好。 一,微服务网关GateWay 简介1.1 简介Spring Cloud Gateway 是 Spring 官方基于 Spring 5....原创 2022-01-28 22:58:25 · 286 阅读 · 0 评论 -
springCloud-网关-08 Zuul网关存在的问题
一,在实际使用中我们会发现直接使用Zuul会存在诸多问题,包括:性能问题Zuul1x版本本质上就是一个同步Servlet,采用多线程阻塞模型进行请求转发。简单讲,每来一个请求,Servlet容器要为该请求分配一个线程专门负责处理这个请求,直到响应返回客户端这个线程才会被释放返回容器线程池。如果后台服务调用比较耗时,那么这个线程就会被阻塞,阻塞期间线程资源被占用,不能干其它事情。我们知道Servlet容器线程池的大小是有限制的,当前端请求量大,而后台慢服务比较多时,很容易耗尽...原创 2022-01-28 22:36:54 · 2072 阅读 · 0 评论 -
springCloud-网关-07 zuul 自定义过滤器中pre 做登录功能
一,配置自定义过滤器在zuul 微服务上配置自定义过滤器package com.zjk.zuul.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.apache.http.HttpStatus;import javax.servlet.htt原创 2022-01-28 08:04:26 · 219 阅读 · 0 评论 -
springCloud-网关-06 Zuul中的过滤器
通过之前的学习,我们得知Zuul它包含了两个核心功能:对请求的路由和过滤。其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础; 而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。其实,路由功能在真正运行时,它的路由映射和请求转发同样也由几个不同的过滤器完成的。所以,过滤器可以说是Zuul实现API网关功能最为核心的部件,每一个进入Zuul的HTTP请求都会经过一系列的过滤器处理链得到请求响应并返回给客户端。一,ZuulFi...原创 2022-01-27 22:31:46 · 805 阅读 · 0 评论 -
springCloud-网关-05 简化路由的配置
一,简化路由的配置在刚才的配置中,我们的规则是这样的:zuul: routes: service-order: # 这里是路由id,随意写 path: /service-order/** # 这里是映射路径 #url: http://127.0.0.1:9002 # 映射路径对应的实际url地址 serviceId: service-order sensitiveHeaders: #默认zuul会屏蔽cookie,cookie不会传到下游原创 2022-01-27 09:14:03 · 273 阅读 · 0 评论 -
springCloud-zuul-04 面向服务的路由
微服务一般是由几十、上百个服务组成,对于一个URL请求,最终会确认一个服务实例进行处理。如果对每个服务实例手动指定一个唯一访问地址,然后根据URL去手动实现请求匹配,这样做显然就不合理。 Zuul支持与Eureka整合开发,根据ServiceID自动的从注册中心中获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例的时候不用修改Zuul的路由配置。一,在zuul 模块添加1.1 添加Eureka客户端依赖...原创 2022-01-25 23:45:26 · 185 阅读 · 0 评论 -
springCloud-zuul 03 Zuul中的路由转发
一,配置zuul 模块yml 文件最直观的理解:“路由”是指根据请求URL,将请求分配到对应的处理程序。在微服务体系中,Zuul负责 接收所有的请求。根据不同的URL匹配规则,将不同的请求转发到不同的微服务处理。 server: port: 8086 #服务端口spring: application: name: api-gateway #指定服务名zuul: routes: service-order: # 这里是路由id,随意写原创 2022-01-25 23:10:41 · 1937 阅读 · 0 评论 -
springCloud-网关-02 微服务网关Zuul 搭建Zuul网关服务器
一,Zuul简介ZUUL是Netflflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能: 动态路由:动态将请求路由到不同后端集群 压力测试:逐渐增加指向集群的流量,以了解性能 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求 静态响应处理:边缘位置进行响应,避免转发到内部集群 身份认证和安全: 识别每一个资源的验证要求,并拒绝...原创 2022-01-25 22:33:23 · 287 阅读 · 0 评论 -
springCloud-41 Feign实现熔断
Sentinel 适配了 Feign 组件。如果想使用,除了引入 sentinel-starter 的依赖外还需要 2 个步骤: 配置文件打开 sentinel 对 feign 的支持: feign.sentinel.enabled=true 加入 openfeign starter 依赖使 sentinel starter 中的自动化配置类生效: 一,引入依赖<dependency> <groupId>com.alibaba.cloud</group原创 2022-01-22 16:19:23 · 419 阅读 · 0 评论 -
java.lang.IllegalArgumentException: block static method can not be found in bean[restTemplate]
出现这个问题就是在配置resttemplate 实现 sentinel 时,出现的问题,因为配置了ExecptionUtil,其中一个参数的包导错了才出现的这个问题org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderController': Unsatisfied dependency expressed through field 'restTem原创 2022-01-22 15:49:21 · 578 阅读 · 0 评论 -
springCloud-40 restTemplate 整合sentinel 实现熔断
在基于sentinel 的服务保护上一文中,我们通过restTemplate来请求服务提供者,然后通过@SentinelResource 来使用sentinel的降级,如果我们要调用多个http 请求,就需要配置多个降级方法,代码臃肿。所以可以配置一个公用的降级,熔断方法。@GetMapping("/buy/{id}")@SentinelResource(value="order",blockHandler = "orderblockHandler",fallback= "orderfallba原创 2022-01-21 23:01:17 · 810 阅读 · 0 评论 -
springCloud-39 加载本地sentinel设置
因为使用sentinel ,每次重启服务的时候,sentinel 内的配置就失效了,需要重新配置sentinel ,所以我们要使用sentinel 的本地配置,在本地配置好sentinel 后,即使是重启了也能自动配置上。一,配置服务消费者的yml 文件#通过文件读取限流规则spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.jsonspring.cloud.sentinel.datasource.ds1.fil原创 2022-01-21 21:39:39 · 601 阅读 · 0 评论 -
SpringCloud-38 基于Sentinel的服务保护
因为sentinel 的功能就是保护服务的可用,有流量控制,线程数隔离,限流,熔断,降级,种种都是为了系统的可用性。下面我们来简单的使用一下sentinel一, 首先还是加入依赖和配置yml文件详情可以通过上篇文章查看。二,设置熔断方法2.1 编写代码在服务消费者添加熔断方法,主要是使用sentinel的@SentinelResource 注解,参数有@GetMapping("/buy/{id}")@SentinelResource(value="ord..原创 2022-01-21 18:40:22 · 407 阅读 · 0 评论 -
springCloud-37 Sentinel中的管理控制台
一,下载启动控制台1.1 获取sentinel 控制台您可以从官方网站中下载最新版本的控制台 jar 包,下载地址如下: https://github.com/alibaba/Sentinel/releases/download/1.6.3/sentinel-dashboard-1.6.3.jar1.2 启动使用如下命令在该包文件下执行 win dos 启动控制台: java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=原创 2022-01-21 12:59:05 · 596 阅读 · 0 评论 -
springCloud-36 服务熔断Hystrix的替换方案-sentinel
18年底Netflflix官方宣布Hystrix 已经足够稳定,不再积极开发 Hystrix,该项目将处于维护模式。就目前来看Hystrix是比较稳定的,并且Hystrix只是停止开发新的版本,并不是完全停止维护,Bug什么的依然会维护的。因此短期内,Hystrix依然是继续使用的。但从长远来看,Hystrix总会达到它的生命周期,那么Spring Cloud生态中是否有替代产品呢?一,替换方案介绍Alibaba Sentinel Sentinel 是阿里巴巴开源的一款断路器...原创 2022-01-21 10:52:11 · 1090 阅读 · 0 评论 -
springCloud-35 Hystrix的核心源码
原创 2022-01-20 17:42:21 · 56 阅读 · 0 评论 -
springCloud-34 熔断器的隔离策略
微服务使用Hystrix熔断器实现了服务的自动降级,让微服务具备自我保护的能力,提升了系统的稳定性,也较好的解决雪崩效应。其使用方式目前支持两种策略: 线程池隔离策略:使用一个线程池来存储当前的请求,线程池对请求作处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服务申请线程池,有一定的资源消耗,好处是可以应对突发流量(流量洪峰来临时,处理不完可将数据存储到线程池队里慢慢处理) 信号量隔离策略:使用一个原子计数器(或信号量)来记录当前有多少个线程在运行,请求来先判断计原创 2022-01-20 17:40:36 · 324 阅读 · 0 评论 -
springCloud-33 hystrix 断路器的工作状态
一,断路器状态工作模式二,断路器状态测试2.1 设置一个执行成功的参数,设置一个失败的参数失败接口: http://localhost:9013/order/findByIdTest/2成功接口:http://localhost:9013/order/findByIdTest/1@GetMapping(value = "/findByIdTest/{Id}")@HystrixCommand(defaultFallback = "exec")public TbProdu.原创 2022-01-20 16:11:32 · 574 阅读 · 0 评论 -
springCloud-32 断路器聚合监控Turbine
在微服务架构体系中,每个服务都需要配置Hystrix DashBoard监控。如果每次只能查看单个实例的监控数据,就需要不断切换监控地址,这显然很不方便。要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Turbine是一个聚合Hystrix 监控数据的工具,他可以将所有相关微服务的Hystrix 监控数据聚合到一起,方便使用。引入Turbine后,整个监控系统架构如下: 步骤:一,搭建TurbineServer创建工程 shop_hystrix原创 2022-01-20 13:53:51 · 194 阅读 · 0 评论 -
springCloud -31 Hystrix Dashboard可视化监控数据
上篇文章我们使用actuator 来监控了系统数据,但是并不详细,需要一个可视化系统,我们可以使用hystrix dashboard 。一,在服务消费者引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId>原创 2022-01-20 12:59:34 · 158 阅读 · 0 评论 -
springCloud-30 springboot-actuator 监控
actuator 是springboot 下的一个包,官方对actuator 的描述是这样的Spring Boot includes a number of additional features to help you monitor and manage your application when you push it to production. You can choose to manage and monitor your application by using HTTP endpoi原创 2022-01-20 12:01:09 · 546 阅读 · 0 评论 -
springCloud-29 feign 调用hystrix 实现服务熔断
SpringCloud Fegin默认已为Feign整合了hystrix,所以添加Feign依赖后就不用在添加hystrix,那么怎么才能让Feign的熔断机制生效呢,只要按以下步骤开发:一,添加feign依赖 <!--springCloud整合feign--> <dependency> <groupId>org.springframework.cloud</groupId> <原创 2022-01-19 23:06:27 · 408 阅读 · 0 评论 -
springCloud-28 hystrix入门 及restTemplate 调用hystrix
一,服务容错的核心知识1.1 雪崩效应在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问A服务,而A服务需要调用B 服务,B服务需要调用C服务,由于网络原因或者自身的原因,如果B服务或者C服务不能及时响应,A服务将处于阻塞状态,直到B服务C服务响应。此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。雪...原创 2022-01-17 23:21:56 · 331 阅读 · 0 评论 -
springCloud-27 高并发问题:线程池隔离的方式处理请求挤压问题
思路:遇到多线程请求问题导致接口响应速度变慢,可以使用线程池的方法一,创建一个线程池 1.1 通过hystrix将容易受高并发的接口创建线程池,package com.zjk.order.command;import com.netflix.hystrix.*;import com.zjk.order.entity.TbProduct;import org.springframework.beans.factory.annotation.Autow...原创 2022-01-13 22:23:46 · 650 阅读 · 0 评论 -
springCloud-26 高并发问题模拟环境搭建和使用jmeter 模拟高负载存在的问题
Demo:https://gitee.com/vegetarian/spring_cloud_hystrix_demo.git一,模拟高并发情景使用jmeter 软件 来模拟高并发1.1 安装jmeter1.2配置Jmetter 1.2.1创建新的测试计划1.2.2测试计划下创建发起请求的线程组可以配置请求的线程数 以及每个请求发送的请求次数 1.2.3创建http请求模板1.2.4配置测试的接口信息二,测...原创 2022-01-12 23:00:00 · 236 阅读 · 0 评论 -
springCloud-25 feign 源码分析
一,找到启动类的注解:@EnableFeignClients找到服务消费者上启动类的@EnableFeignClients@SpringBootApplication@EntityScan("com.zjk.order.entity")@EnableEurekaClient//通过@EnableFeignClients 激活feign@EnableFeignClientspublic class OrderApplication { @Bean @LoadBalance原创 2022-01-10 23:15:56 · 295 阅读 · 0 评论 -
springCloud-24 feign 日志级别
在开发或者运行阶段往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。 要想用属性配置方式来达到日志效果,只需在 application.yml 中添加如下内容即可: 肯定是在使用feign 的模块上配置,服务消费者使用了feign,所以在服务消费者上配置feign: client: config: shop-service-product: ...原创 2022-01-10 21:17:45 · 1111 阅读 · 0 评论 -
springCloud-23 feign 请求压缩
首先Feign 是通过 http 调用的,那么就牵扯到一个数据大小的问题。如果不经过压缩就发送请求、获取响应,那么会因为流量过大导致浪费流量,这时就需要使用数据压缩,将大流量压缩成小流量。Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能:feign: compression: request: enabled: t...原创 2022-01-10 21:00:14 · 1173 阅读 · 0 评论 -
springCloud-22 feign和ribbon的联系 负载均衡
一,feign 和ribbon 的联系 Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐。 Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的 方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其...原创 2022-01-09 21:46:46 · 230 阅读 · 0 评论 -
springCloud-21 基于feign 的服务调用
目录一,引入依赖二,定义feign 调用接口三,在服务消费者启动类上激活feign注解四,通过自动的接口调用远程微服务feign 的用法一,引入依赖谁使用feign,或者谁是服务消费者谁添加依赖 <!--springCloud整合feign--> <dependency> <groupId>org.springframework.cloud</groupId>原创 2022-02-20 15:20:40 · 312 阅读 · 0 评论 -
springCloud-20 feign 简介
前面我们使用的RestTemplate实现REST API调用,代码大致如下:@GetMapping("/buy/{id}")public Product order() { Product product = restTemplate. getForObject("http://shop-service-product/product/1", Product.class); return product; }由代码可知,我们是使用拼接字符串的方式构造URL的,该URL只...原创 2022-01-09 15:48:56 · 181 阅读 · 0 评论 -
springCloud-19 consul 常见问题 节点和服务注销 健康检查与故障转移
一,节点和服务注销当服务或者节点失效,Consul不会对注册的信息进行剔除处理,仅仅标记已状态进行标记(并且不可使用)。如果担心失效节点和失效服务过多影响监控。可以通过调用HTTP API的形式进行处理 节点和服务的注销可以使用HTTP API: 注销任意节点和服务:/catalog/deregister 注销当前节点的服务:/agent/service/deregister/:service_id 如果某个节点不继续使用了,也可以在本机使用consul lea...原创 2022-01-09 14:11:07 · 1295 阅读 · 0 评论