redis+定时 模拟滑动窗口实现熔断降级

业务背景

公司业务现用的通道为 A、B,为了降本,引入新的支付通道 Y,但 Y 通道的稳定性要低于 A、B,系统要能在 Y 通道故障时自动切回到 A、B,等 Y 恢复正常后,再切换到 Y。

乍一看很简单,不就是熔断降级、故障恢复吗,有很多成熟的解决方案了。

但有个特殊的业务场景,在支付通道的页面中(也就是输入密码的这一步)可能因为商户原因,无法继续支付。这一步已经脱离了我们自己业务的页面,所以也无法获知这个失败场景。

还有一个场景是到输密码这一步,由于种种原因,用户返回了,终止了 支付流程。这种我们系统也无法获知,更无法区分是商户还是用户的原因,导致这笔支付没有完成。

这个业务场景很重要,虽然发生的概率极低,但必须要解决,否则真有问题等用户反馈过来,其影响是不能接受的。

调研

现成的技术方案,像 Sentinel 等框架,都需要告诉框架一个明确的采样规则及触发点。

比如1分钟内异常的数量、超时的数量、请求失败的数量,或者调用量达到多少后触发。

由于业务场景的特殊性,没找到可以直接满足业务需求的现成方案,只能自己想办法解决。

方案设计

如上所述,需要解决的2个关键点是采样规则和触发点。

采样规则可细分为 采样窗口、采样数量、采样数据。

根据我们业务的支付量,我们确定了采样窗口为最近半小时内,依次向后滑动;

采样数量为走 Y 通道的全量;

采样数据为支付成功数据、总数据。

上面交代了系统无法直接准确获知 Y 通道失败,所以就换了解决思路。

我们可以从系统现有的 A、B 通道的数据分析出用户原因未支付的比例(A、B 通道非常稳定,通道导致的失败率可以忽略不计),这样一来就可以得出支付成功的比例。

如果切换到 Y 通道后,低于这个比例,大概率是商户问题导致支付中断。

这个比例就可以作为我们的触发点。

简单画个草图

db99b611a6f4e93d8bc068dcace7df02.png

通过这个方案就可以尽早发现商户问题导致的支付中断,满足业务诉求。

扯两句

用低成本满足业务诉求;

任何方案都要权衡取舍。

原创不易,多多关注,一键三连,感谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用链表和数组输出A~Z的ASCII码

输出结果 26个字母以及其对应的ASCII码 一、使用链表创建,注意: 节点需要有next指针初始化时head需要new一下 cur指针代表当前指针,每次不断的New新的节点,pre指针代表当前指针的前一个指针,每次pre的next指针指向cur…

sql注入攻击 - cookie注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Cookie 知识介绍 Cookie(HTTP Cookie)是服务器发送到用户浏览器并保存在本地的一小段数据,用于记录用户的相关信息和状态。这些信息通常包括用户的身份标识、网站偏好设置…

3.1日学习打卡----初学FastDFS(一)

3.1日学习打卡 目录: 3.1日学习打卡一. 为什么要使用分布式文件系统二. FastDFS简介核心概念上传机制下载机制FastDFS环境搭建_LinuxFastDFS指令 一. 为什么要使用分布式文件系统 单机时代 初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项…

二分+质因数分解,LightOJ 1138Trailing Zeroes (III)

一、题目 1、题目描述 You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! 1 * 2 * ... * N. For example, 5! 120, 120 contains one zero on the trail. 2、输入输出 2.1输入 Input…

HTML---Ajax

文章目录 目录 文章目录 前言 一.Ajax概述 二.原生创建Ajax 三,使用Jquery处理Ajax 总结 一.Ajax概述 AJAX(Asynchronous Javascript And XML)是一种创建交互式网页应用的网页开发技术。它使用Javascript语言与服务器进行异步交互,可以传…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

DBGridEh 的排序

DBGridEh 可以点列抬头使得记录按该列排序 不需要写代码,只需要设置好,它就能排序。 网上的文章一般写了如何设置。但一般都少说了一条。 先说如何设置: 1. OptionsEh.AutoSortMarking 设置为 True,如果是设计期属性面板&…

Linux上搭建并使用ffmpeg(Java)

关于MacOs和Windows系统上使用ffmpeg就不多说了,有很多相关文章,今天给大家分享一个在Linux环境下使用Java语言来使用ffmpeg 一、首先去官网下载一个Linux对应的ffmpeg包 1、进入ffmpeg官网:官网 2、点击左侧导航栏Download 3、选择Linux对…

如何利用graylog进行容器化日志管理?

Docker日志 当一个容器启动的时候,它其实是docker deamon的一个子进程,docker daemon可以拿到容器里面进程的标准输出,然后通过自身的LogDriver模块来处理,LogDriver支持的方式很多,默认写到本地文件,也可…

vue自定义实现icon选择器

<template> <div> <span class"iconStyle" click"selectIcon"> <i :class"value" /> </span> <div class"iconTitle">选择图标</div> <el-dialog title"" :visible.sync"…

springboot + nacos + aws secretmanager 做账号密码隐私处理

方式一&#xff1a; #nacos配置文件data.yml: spring:cloud:nacos:discovery:ip: ****.comport: 80datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://*********/database?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&fail…

java 商机管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 商机管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

LeetCode142. 环形链表 II刷题详解

今天力扣刷到了一个特别有意思的题目&#xff0c;于是就写了下面的题解来加深以下理解。 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 这个可以分为两大步去写&#xff0c;首先要判断链表是否有环&#xff0c;然后如果有环就去找到环的入口&#xff0c;没有环返…

python3.x的在线与离线安装纯净版

由于计划搭建一套使用python自动分析日志的流程&#xff0c;发现我们的测试环境CentOS 7仍然没有安装python3&#xff0c;无法使用这些新的库。Python 3在设计上着重提升了语言的一致性和易用性&#xff0c;它引入了许多关键改进&#xff0c;此外&#xff0c;Python 3环境拥有丰…

基于springboot+html实现的衣物捐赠平台

一、系统架构 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | thymeleaf | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 注册 03. web页-首页 04. web页-捐赠衣服 05. web页-论坛交流…

C# 中的 IReadOnlyDictionary 和 IReadOnlyList

C# 中的 IReadOnlyDictionary 和 IReadOnlyList 是接口&#xff0c;用于表示只读的字典和只读的列表。这些接口提供了对集合的只读访问权限&#xff0c;即不允许对集合进行修改操作&#xff0c;例如添加、删除或修改元素。这种只读特性对于需要保护数据完整性或只需要进行读取操…

MYSQL--锁机制*

一.对锁机制的大概介绍: 1.大概的来说,MYSQL当中的锁实际上就是合理的管理多个服务器对于同一个共享资源的使用,是计算机协调多个进程或者是线程并发访问某一资源的机制(避免争抢资源的现象发生) 2.在数据库当中,数据是一种可以供许多的用户进行共享使用的资源,如何保证数据并发…

软考笔记--软件开发模型

软件开发模型给出了软件开发活动各个阶段之间的关系&#xff0c;它是软件开发过程的概括&#xff0c;是软件工程的重要内容。软件开发模型为软件工程管理提供了里程碑和进度表&#xff0c;为软件开发过程提供了原则和方法。 一.软件开发模型概述 软件开发模型可分为三种类型&…

第十一届蓝桥杯省赛第一场C++ A组 / B组《整数拼接》(c++)

1.题目说明 给定一个长度为 n 的数组 A1,A2,⋅⋅⋅,An。 你可以从中选出两个数 Ai 和 Aj(i 不等于 j)&#xff0c;然后将 Ai 和 Aj 一前一后拼成一个新的整数。 例如 12 和 345 可以拼成 12345 或 34512。 注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法&#xff0c;即便是 …

考研倒计时半年:如何高效安排学习计划?

距离考研还有半年的时间&#xff0c;这是一个既紧张又充满希望的阶段。如何利用好这段时间&#xff0c;制定一个高效的学习计划&#xff0c;成为了每位考生关注的焦点。下面&#xff0c;我将为大家提供一些关于政治、英语和专业课的学习建议&#xff0c;希望能对大家有所帮助。…