> For the complete documentation index, see [llms.txt](https://maxwell.gitbook.io/way-to-architect/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://maxwell.gitbook.io/way-to-architect/xi-tong-she-ji/jiang-ji.md).

# 降级

### 1. 什么是降级

为了保证核心服务的高可用性，如果非核心服务出现了异常情况（如响应时间很长或根本无响应），则可以限制费核心服务的一些能力（比如返回默认值，返回空数据，返回错误页等），来保证核心服务的可用性。这有点类似武侠小说里面的壮士断腕，也有点类似于象棋里面的弃车保帅。

### 2. 为什么需要降级？

在系统复杂度越来越高的今天，我们可能会经常遇到这样的困扰：一个非核心的功能异常最终导致了整个系统的不可用。比如一个获取非核心数据接口的超时最终导致了整个线程池全部阻塞，影响了核心功能线程的运行；业务链条中某个环节的接口不可用导致整个业务链的失败。这样的例子比比皆是，造成的损失往往也非常大，所以为了避免这种小功能搞垮大系统的情况发生，降级的概念就应运而生了。

### 3、降级的分类

按照是否自动化分为：人工降级和自动降级。

按照功能点可分为：

* **页面降级：**&#x5728;大促或者某些特殊情况下，某些页面占用了一些稀缺服务资源，在紧急情况下可以对其整个降级，以达到丢卒保帅；
* **页面片段降级**：比如商品详情页中的商家部分因为数据错误了，此时需要对其进行降级；
* **页面异步请求降级：**&#x6BD4;如商品详情页上有推荐信息/配送至等异步加载的请求，如果这些信息响应慢或者后端服务有问题，可以进行降级；
* **服务功能降级：**&#x6BD4;如渲染商品详情页时需要调用一些不太重要的服务：相关分类、热销榜等，而这些服务在异常情况下直接不获取，即降级即可；
* **读降级：**&#x6BD4;如多级缓存模式，如果后端服务有问题，可以降级为只读缓存，这种方式适用于对读一致性要求不高的场景；
* **写降级：**&#x6BD4;如秒杀抢购，我们可以只进行Cache的更新，然后异步同步扣减库存到DB，保证最终一致性即可，此时可以将DB降级为Cache。
* **爬虫降级：**&#x5728;大促活动时，可以将爬虫流量导向静态页或者返回空数据，从而保护后端稀缺资源。

## 内容来源

[服务化架构-服务降级](http://fengfu.io/2017/04/23/%E6%9C%8D%E5%8A%A1%E5%8C%96%E6%9E%B6%E6%9E%84-%E6%9C%8D%E5%8A%A1%E9%99%8D%E7%BA%A7/)

《亿级流量网站架构核心技术》：降级特技
