服务降级是什么?Spring Cloud如何实现?
当访问量剧增,服务出现问题时,需要做一些处理,比如服务降级。服务降级就是将某些服务停掉或者不进行业务处理,释放资源来维持主要服务的功能。
某电商网站在搞活动时,活动期间压力太大,如果再进行下去,整个系统有可能挂掉,这个时候可以释放掉一些资源,将一些不那么重要的服务采取降级措施,比如登录、注册。登录服务停掉之后就不会有更多的用户抢购,同时释放了一些资源,登录、注册服务就算停掉了也不影响商品抢购。
服务降级有很多种方式,最好的方式就是利用 Docker 来实现。当需要对某个服务进行降级时,直接将这个服务所有的容器停掉,需要恢复的时候重新启动就可以了。
还有就是在 API 网关层进行处理,当某个服务被降级了,前端过来的请求就直接拒绝掉,不往内部服务转发,将流量挡回去。
在 Zuul 中对服务进行动态降级,结合我们的配置中心来做。
定义 Apollo 配置类,存储需要降级的服务信息见如下代码。
@Data
@Configuration
public class BasicConf {
// 降级的服务 ID,多个用逗号分隔
@Value("${downGradeServiceStr:default}")
private String downGradeServiceStr;
}
编写过滤器来执行降级逻辑,见如下代码。
public class DownGradeFilter extends ZuulFilter {
@Autowired
private BasicConf basicConf;
public DownGradeFilter() {
super();
}
@Override
public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext();
Object success = ctx.get("isSuccess");
return success == null ? true : Boolean.parseBoolean(success.toString());
}
@Override
public String filterType() {
return "route";
}
@Override
public int filterOrder() {
return 4;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
Object serviceId = ctx.get("serviceId");
if (serviceId != null && basicConf != null) {
List<String> serviceIds = Arrays.asList(basicConf.getDownGradeServiceStr().split(","));
if (serviceIds.contains(serviceId.toString())) {
ctx.setSendZuulResponse(false);
ctx.set("isSuccess", false);
ResponseData data = ResponseData.fail("服务降级中", ResponseCode.DOWNGRADE.getCode());
ctx.setResponseBody(JsonUtils.toJson(data));
ctx.getResponse().setContentType("application/json; charset=utf-8");
return null;
}
}
return null;
}
}
主要逻辑在 run 方法中,通过 RequestContext 获取即将路由的服务 ID,通过配置信息获取降级的服务信息,如果当前路由的服务在其中,就直接拒绝,返回对应的信息让客户端做对应的处理。
当需要降级的时候,直接在 Apollo 的后台改一下配置就可以马上生效,当然也可以做成自动的,比如监控某些指标,流量、负载等,当达到某些指标后就自动触发降级。
服务降级是什么?Spring Cloud如何实现?相关推荐
- java什么是服务治理平台_Java | Spring Cloud 是如何实现服务治理的
Spring Cloud 是如何实现服务治理的 Table of Contents 建议提前阅读 Spring Cloud Commons 之服务治理浅析 Spring 在设计的时候,通常会考虑方便扩 ...
- spring cloud微服务分布式云架构-Spring Cloud简介
Spring Cloud是一系列框架的有序集合.利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现.注册.配置中心.消息总线.负载均衡.断路器.数据监控等(这里只简单的列了 ...
- spring cloud微服务分布式云架构 - Spring Cloud简介
Spring Cloud是一系列框架的有序集合.利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现.注册.配置中心.消息总线.负载均衡.断路器.数据监控等(这里只简单的列了 ...
- 两大微服务框架dubbo和spring cloud对比
一.基本介绍 dubbo Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案.简单的说,Dubbo 就是个服务框架,说白了就是个远程服务 ...
- 使用Nacos实现服务注册与发现(spring cloud 组件教程大全四)
使用Nacos实现服务注册与发现(spring cloud 组件教程大全四) idea 创建maven父子工程(spring cloud 组件教程大全 一) windows下nacos的安装及Mysq ...
- spring cloud微服务分布式云架构 - Spring Cloud简介(一)
点击上面 免费订阅本账号! 本文作者:it菲菲 原文:https://yq.aliyun.com/articles/672239? 点击阅读全文前往 Spring Cloud是一系列框架的有序集合.利 ...
- hystrix 页面_微服务 | 使用Hystrix实现Spring Cloud的熔断机制
1. 熔断机制介绍 在介绍熔断机制之前,我们需要了解微服务的雪崩效应.在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进.但是,一个应用可能会有多个微服 ...
- 服务迁移之路 | Spring Cloud向Service Mesh转变 | 技术干货
戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作者: 李宁 转自:博云技术社区 Sp ...
- spring cloud微服务分布式云架构 - Spring Cloud集成项目简介
Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的.在学习Spring Clo ...
- 公益:开放一台Nacos服务端给各位Spring Cloud爱好者
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 之前开放过一台公益Eureka Server给大家,以方便大家在阅读我博客中教程时候做实验.由于目前在 ...
最新文章
- Python 3.3.2 中文版
- 2020计算机考研初试考试先后顺序,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
- python读取nc文件并转换成csv_python3使用类型转换读取csv文件
- 关于回调函数的那点事
- 在SqlServer中把多个job生成一个sql脚本
- IOS之UIToolBar约束报错
- 【转载】通过金矿模型介绍动态规划 (动态规划入门)
- 学UI设计好不好找工作?零基础能学UI设计吗?
- Spark createDirectStream 维护 Kafka offset(Scala)
- panda提取时间戳中的日期_Pandas处理时间序列数据的20个关键知识点
- 添加用户到sudoers
- Flutter之SafeArea
- Mybatis Configuration.xml中properties属性定义
- BlackBerry7290上网步骤
- Ardunio开发实例-BME280传感器
- Openbci升级版使用方法
- js中什么是事件气泡,如何阻止事件气泡
- Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(一)
- 国外问卷调查所需准备
- 范式1NF、2NF、3NF和BCNF的区别