随着互联网的普及,RESTful API (Representational State Transfer Application Programming Interface) 的使用越来越广泛,但是由于一些外部依赖性和服务器负载的限制,RESTful API 可能会发生故障。为了保证 API 的可用性和稳定性,我们需要实施熔断和降级策略,文章将会展示 RESTful API 熔断和降级策略的实际方法以及代码示例。
什么是熔断机制?
熔断机制是指,当系统发生异常的时候,我们可以将代码块中的一部分指令或:连接,对象或者服务暂时关闭或者转移到其他处置方法上,以保证系统的通用性以及可用性,并且防止系统的出现故障,减少用户的心理压力和对系统的不满情绪。实际上熔断的目地就是当调用某个接口或者服务器返回异常或者错误之后,我们可以暂时关闭或者转移其他可用资源或者提供相应的故障保护措施,保证系统的正常运行以及用户的满意。
什么是降级机制?
降级机制是指,当系统异常的时候,我们可以采用一些预设计的代替措施来保证用户体验,并减少资源浪费。通常情况下,如果没有模块进行降级处理,则当系统出现故障时,后台程序仍会不停地产生大量访问来解决问题,从而导致服务器严重负载而出现宕机的风险。降级机制有助于缓解服务器的负载,减少与竞争优先级较低的客户的互动次数,并让系统有足够的时间和资源来处理和解决和处理先前出现的问题或错误。
下面我们将介绍几种 RESTful API 的熔断和降级策略。
短路器(Hystrix)
短路器是一种使用 Java 构建的熔断器库,可用于使用 Spring Cloud,Netflix OSS 或 Spring Boot 构建微服务。短路器能够随时检测并分析系统中的故障,一旦检测到故障,它可以根据需要采取相应的措施,如暂停请求并返回默认响应,以保证系统的可用性。
Hystrix 并不是仅仅针对 RESTful API 的,而是该机制能够与许多其他类型的后端服务进行集成,如 RPC、数据库和其他 Web 服务等。
下面是 Hystrix 的示例代码:
-- -------------------- ---- ------- ------ ----- ------------- - ------------------------------ - -------------------- ------ ------ -------------- ---- - -- --- ------ --- ---- ---- - ------ ------ --------------------- ---- - ------ --- ------- ---------- ------ --- ----- -------- - -
上面的代码中,我们使用了 HystrixCommand 注释来标记方法使用了 Hystrix 机制,并且我们在其中设置了降级方法。如果发生故障,ServiceClient 类将返回默认值“No service available, please try again later.",这有助于保证系统的正常运行以及用户的正常使用。
服务发现(Discovery)
服务发现策略让我们更好的组织 API 系统,负载均衡及灵活的服务降级策略。例如,我们可以在多个地理位置(或不同的数据中心)上运行相同的资源。然后,通过负载均衡和服务发现功能,可以向用户提供最接近和最快速的资源。
Microservices 目前是业界最流行的实现方案之一,其核心理念就是将一个大型的应用程序拆分成许多小型的微服务,并在需要时连接它们。微服务一般使用独立的实例,使得其能够便于创建和管理。
下面是服务发现的示例代码:
-- -------------------- ---- ------- ------ ----- ------------- - ------- ------ ----- ------ --- - ------------------------ ------ ------ ------------ - ---------- ---------- - --- ------------- ----------------------------- ------ ------------------- - -
上面的代码中,我们通过 ServiceClient 类的 getService() 方法来进行请求,该方法里面我们创建了 RestClient 类对象,设置了服务请求数据,然后进行了数据获取。这里我们通过让 ServiceClient 类中的 URL 可以更好的适应不同的数据中心来实现了 API 的熔断和降级。
限流和缓存
限流和缓存是常见的用于降级的策略。如果您的 API 频繁发送某个请求,您可以发送一些限制其请求速率的请求,并自动缓存数据以降低联网延迟,从而提高 API 的性能和可靠性。我们可以使用 Redis 等缓存工具来实现 API 的缓存,保证前端的数据获取性能和效率。
下面是限流和缓存的示例代码:
-- -------------------- ---- ------- --------------------- --- -------------------- --- -------------- --- -------------- --- ---------------- ------------- --- --------------- ------------- -- ------------------- - - --
除此之外,过滤器、超时设置、重试机制等策略同样可以用于熔断和降级。
总结
RESTful API 的熔断和降级策略是实现高可用性和可靠性的关键。单独使用以上策略或结合使用均可有效提高 RESTful API 的可用性和可靠性。并且降级和熔断策略不仅适用于 RESTful API,适用于任何Web应用程序或者我们使用的软件包,这些策略可以使我们在不进行代码修改的情况下改善系统的性能和稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6454555f968c7c53b0847d1a