Why

在微服务架构中,由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。可能导致服务间延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。

为了维护服务的稳定,我们需要在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

How

服务熔断

一般发生于下游服务,下游服务发生故障时,将服务熔断不可用

电路中的保险丝,超过负荷,直接熔断,断电,不可用,保护整体安全

服务降级

将某一服务降级暂时不可用,为了服务整体的稳定,牺牲部分不重要的功能,保证核心功能的进行

妈妈让小明去买酱油,给了10块钱,小明到超市看到自己喜欢的玩具2块钱,拿上玩具和酱油去柜台结账发现一共需要12元,为了完成妈妈的任务,选择不买玩具。等下次在买玩具

所以从上述分析来看,两者其实从有些角度看是有一定的类似性的:

目的很一致:都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段;

最终表现类似:对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用;

自治性要求很高:熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,开关预置、配置中心都是必要手段;

而两者的区别也是明显的:

触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;

What

由于我司使用nacos作为服务注册和发现,所以我们使用sentinel进行熔断降级。

首先导入依赖

// Gradle

implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel') {

exclude module: 'guava'

}

// Maven

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

配置文件中打开sentinel

feign:

sentinel:

enabled: true

使用语言 kotlin

阅读@FeignClient源码,我们发现fallback是由spring创建

/**

* Fallback class for the specified Feign client interface. The fallback class must

* implement the interface annotated by this annotation and be a valid spring bean.

* @return fallback class for the specified Feign client interface

*/

Class> fallback() default void.class;

/**

* Define a fallback factory for the specified Feign client interface. The fallback

* factory must produce instances of fallback classes that implement the interface

* annotated by {@link FeignClient}. The fallback factory must be a valid spring bean.

*

* @see feign.hystrix.FallbackFactory for details.

* @return fallback factory for the specified Feign client interface

*/

Class> fallbackFactory() default void.class;

1.fallbackFactory

package com.karl.cloud;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

import com.karl.DTO.UserInfoDTO;

@FeignClient(value = "karl-service-user", fallbackFactory = UserFallbackFactory::class)

interface UserFeign {

@GetMapping("/karl/user")

fun getUser(): UserInfoDTO

}

@Component

class UserFallbackFactory: FallbackFactory {

val logger = LoggerFactory.getLogger(UserFallbackFactory::class.java)!!

override fun create(cause: Throwable): DataFeign {

logger.error(cause.message, cause)

return UserFallback()

}

}

class UserFallback: UserFeign {

override fun getUser(): UserInfoDTO{

return UserInfoDTO()

}

}

2.fallback

package com.karl.cloud;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

import com.karl.DTO.UserInfoDTO;

@FeignClient(value = "karl-service-user", fallback = UserFallback::class)

interface UserFeign {

@GetMapping("/karl/user")

fun getUser(): UserInfoDTO

}

@Component

class UserFallback: UserFeign {

override fun getUser(): UserInfoDTO{

return UserInfoDTO()

}

}

php如何做熔断降级,spring cloud 如何实现服务熔断服务降级相关推荐

  1. 【Spring Cloud】03_SpringCloud Alibaba 微服务解决方案

    微服务简介 背景分析 讲微服务之前,我们先分析以下单体应用.所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于SpringBoot,spring,mybatis框架进行整 ...

  2. Spring Cloud 系列之 Netflix Zuul 服务网关(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Netflix Zuul 服务网关(一) Spring Cloud 系列之 Netflix Zuul 服务网关(二) ...

  3. 基于Spring Cloud及K8S构建微服务应用

    摘要 广发证券蔡波斯先生通过三个大方向来为我们分享基于Spring Cloud及K8S构建微服务应用. 内容来源:2017年6月10日,广发证券蔡波斯在"Spring Cloud中国社区技术 ...

  4. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  5. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  6. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章<手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)>实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A ...

  7. 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设

    转载自  阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设 本周,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 S ...

  8. spring react_使用Spring Cloud Gateway保护React式微服务

    spring react 朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护. 所以你想 ...

  9. 使用Spring Cloud Gateway保护反应式微服务

    朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 所以你想完全反应,是吗? 大! ...

  10. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

最新文章

  1. 训练LaneATT遇到CUDA_HOME环境变量问题
  2. linux系统常用的中间件
  3. python3 爬淘女郎
  4. [游戏模版17] Win32 推箱子 迷宫
  5. 顺序容器的访问:访问成员函数的返回是引用(和普通数组一样,普通数组的下标返回值也是数组)
  6. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】
  7. 详述白盒测试的逻辑覆盖法的条件判定覆盖及其优缺点
  8. Debenham养老金项目关键流程4-Opt in 流程
  9. Go语言之高级篇beego框架之模型(Models)
  10. 简约记账系统基于android,基于Android平台的记账系统的设计与实现
  11. 真假Kingston U盘识别
  12. Openwrt中安装njit-client(njit8021xclient)及使用方法
  13. 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
  14. [转]U盘启动制作工具|大白菜启动制作工具
  15. SwiftUI 动态岛开发教程之 07 Live Activities实时活动的要求和限制
  16. Path.Direction.CCW与Path.Direction.CW的意思
  17. 看看乔帮主留下的世界
  18. 股票投资过程中要有“抑制欲望”的心态
  19. 在 Kubernetes 上运行 GitHub Actions Self-hosted Runner
  20. FAF世链区块链大会|赤兔云算CTO 杨钧淏:共建区块链生态,创造新财富时代

热门文章

  1. 新计算机教师工作随笔反思,信息技术反思随笔 (2)
  2. 还在用Jenkins?看看这些替代方案,是否更适合你!
  3. 码农与架构师之间的差距,究竟在哪里?
  4. 昔日的独角兽Docker资金紧张,未来前途未卜
  5. Java 14 可能带来什么新特性?
  6. Apache的架构师们遵循的30条设计原则
  7. canvas 添加 竖版文字_CSS题目系列(4) - 文字穿透遮罩层
  8. python requirements.txt_python生成requirements.txt的两种方法
  9. linux dmesg信息哪来的,linux中的dmesg命令简介
  10. windows mysql 主从_mysql读写分离实战二-windows 上mysql主从数据库搭建及问题总结