当前位置: 首页 > news >正文

如何提高系统的可用性/高可用

提高系统可用性常用的一些方法,有缓存、异步、重试、幂等、补偿、熔断、降级、限流。

缓存

缓存的速度,比数据库快很多,添加缓存是简单有效的做法。
注意缓存与数据库的一致性,数据表记录变更时记得处理缓存。
Redis缓存的示例,详情见:https://blog.csdn.net/sinat_32502451/article/details/132819596

异步

耗时比较高的功能,可以异步处理。
常用的异步有线程池异步, MQ异步。

线程池异步,详情见:https://blog.csdn.net/sinat_32502451/article/details/133039624

CompletableFuture多任务异步,详情见:https://blog.csdn.net/sinat_32502451/article/details/133955576

重试

访问第三方系统,有时会超时,或者失败,可以进行重试。重试几次,有可能就成功了。
SpringBoot中使用@Retryable注解进行重试。
详情见:https://blog.csdn.net/sinat_32502451/article/details/133774582

重试需要保证幂等性。

幂等性

保证幂等性,有几种常用的方法:

  • 唯一索引
    比如订单id使用唯一索引,在插入相同的订单id时,会报错。
  • 状态机制。版本号机制。利用乐观锁。
update tt_order set status = 2 where status = 1 and id = 'abc'
  • 高并发的场景。可以用唯一key放到redis。
    第一次收到请求时,执行业务逻辑,并将唯一key放到redis中,再次收到请求,发现redis中已经有这个唯一key,就不再执行业务逻辑。

补偿

比如请求第三方系统,第三方系统没有回调时,可以主动调用查询接口。
或者是在接口中处理业务逻辑,有些没有执行成功,可以通过定时任务再次执行业务逻辑,进行补偿。

熔断

服务熔断: 在分布式架构中,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。
熔断可以避免服务雪崩。

常用的熔断:SpringCloud Hystrix 、 Sentinel

降级

服务降级:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些非核心的服务和页面不进行处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。

为了保证重要或基本的服务能正常运行,可以将一些不重要或不紧急的服务或任务延迟使用或暂停使用。

限流

限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。

单机版的RateLimiter限流,详情见 : https://blog.csdn.net/sinat_32502451/article/details/133054998

分布式限流,可以使用 Redis配置lua脚本,或者是 Sentinel 限流。
详情见: https://zhuanlan.zhihu.com/p/556765390

http://www.lryc.cn/news/205970.html

相关文章:

  • PCA和LDA数据降维计算(含数学例子推导过程)
  • 题目 1053: 二级C语言-平均值计算(python详解)——练气三层初期
  • Python —— UI自动化之Page Object模式
  • 职能篇—自动驾驶产品经理
  • ubuntu安装golang
  • ES 8 新特性
  • linux-防火墙
  • Pytorch--3.使用CNN和LSTM对数据进行预测
  • 爬虫进阶-反爬破解9(下游业务如何使用爬取到的数据+数据和文件的存储方式)
  • Docker常用应用部署
  • 【数据分享】2014-2022年我国淘宝村点位数据(Excel格式/Shp格式)
  • Ubuntu 安装 docker-compose
  • vue2、vue3中路由守卫变化
  • Leetcode—547.省份数量【中等】
  • Nginx 防盗链
  • 26. 通过 cilium pwru了解网络包的来龙去脉
  • 刷题笔记day01-数组
  • C#调用C++ 的DLL传送和接收中文字符串
  • 【MySQL】数据库常见错误及解决
  • spring常见问题汇总
  • java8 Lambda表达式以及Stream 流
  • 基于Java的音乐网站管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 【蓝桥】小蓝的疑问
  • 漏洞复现-海康威视综合安防管理平台信息泄露【附Poc】
  • 【完美世界】被骂国漫之耻,石昊人设战力全崩,现在真成恋爱世界了
  • 34二叉树-BFS和DFS求树的深度
  • Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin
  • 设计模式之创建型模式
  • 使用jdbc技术连接数据库
  • OpenLayers入门,快速搭建vue+OpenLayers地图脚手架项目