记一次大事务优化历程(短信发送)

news2024/11/25 20:14:47

问题背景

短信服务数据库连接数告警,grafana查看数据库连接池被打满。

问题分析

在这段时间内,通过链路分析,发现最终调用第三方短信发送服务偶然耗时过长,分析了原有发送逻辑的代码,该实现在入口send处加了事务,导致后续的消息通道等逻辑判断,以及调用第三方发送逻辑全部在一个长事务里。

解决方案

由于环境因素,不同环境部署的中间件不一致,有些环境没有使用mq,所以mq不考虑在解决方案内

1、双缓存队列+动态线程池
在这里插入图片描述
2、初始化线程处理
在这里插入图片描述

Q1:为什么不用线程池?

为保证任务不丢失,线程池拒绝策略

AbortPolicy - 抛出异常,中止任务。抛出拒绝执行 RejectedExecutionException 异常信息。线程池默认的拒绝策略。必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行
CallerRunsPolicy - 使用调用线程执行任务。当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。一般并发比较小,性能要求不高,不允许失败。但是,由于调用者自己运行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大
DiscardPolicy - 直接丢弃,其他啥都没有
DiscardOldestPolicy - 丢弃队列最老任务,添加新任务。当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue 中最老的一个任务,并将新任务加入

CallerRunsPolicy策略不会丢失任务,但是会使用提交线程执行任务,加入提交线程执行的任务超长耗时,将会导致整个线程池不可用

Q2:使用固定线程数不会丢数据吗?怎么解决?

在应用重启的时候,是会丢失极少部分数据,可以通过定时钟补偿。

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

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

相关文章

leetcode4. 寻找两个正序数组的中位数python_二分查找和递归(困难)

题目 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.00000 解释…

第二证券|疫情扰动叠加需求不足,11月制造业PMI回落至48%

国家统计局周三称,11月,受国内疫情点多面广频发,世界环境更趋复杂严峻等多重要素影响,我国制造业收购经理人指数(PMI)较上月回落1.2个百分点至48.0%。制造业PMI接连两个月低于临界点,制造业下行…

第4季2:并口、MIPI、LVDS的简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、并口的简介 1、并口的含义 并口的含义,可以从AR0130或OV9712的原理图中形象地理解。 如下图所示,AR0130采用12bit的并口向SoC传输图像数据信息,而SoC和AR0130…

b站黑马JavaScript的Ajax案例代码——评论列表案例

目标效果: 1.在表单界面输入评论人和内容,点击发表评论按钮,可以在页面下面看到自己刚刚输入的内容 2.发表评论成功之后,用DOM对象的reset方法:重置表单为其默认值 e.g.1初始状态:【下面的评论内容会因为…

STC 51单片机48——数码管显示外部中断次数

#include<reg52.h> #include<intrins.h> #include "math.h" #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //共阴字形码表【实验】数码管实验时&#xff0c;一定要将点阵模块跳针放到VCC上&#xff01;&…

【C语言】哈夫曼树,再来一次解剖

博主&#xff1a;&#x1f44d;不许代码码上红 欢迎&#xff1a;&#x1f40b;点赞、收藏、关注、评论。 格言&#xff1a; 大鹏一日同风起&#xff0c;扶摇直上九万里。 文章目录一、定义结构1.1 定义结点权值的数据类型1.2 定义单个结点信息1.3 字符指针数组中存储的元素类…

C++ Reference: Standard C++ Library reference: Containers: list: list: list

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/list/ 公有成员函数 <list> std::list::list C98 默认构造函数 (1) explicit list (const allocator_type& alloc allocator_type()); 填充构造函数 (2) explicit list (size_type n,…

将整个网站变为黑白色

目录 效果&#xff1a; 代码&#xff1a; 兼容性写法&#xff1a; 原理&#xff1a; 效果&#xff1a; ps&#xff1a;实测淘宝也是用的这种方式&#xff0c;有兴趣可以去看看 代码&#xff1a; 使用方式就是找到根标签&#xff0c;将里面的两行代码放进去即可 html {filte…

手写Redux(二):实现React-redux

在React中&#xff0c;组件和组件之间通过props传递数据的规范&#xff0c;极大地增强了组件之间的耦合性&#xff0c;而context类似全局变量一样&#xff0c;里面的数据能被随意接触就能被随意修改&#xff0c;每个组件都能够改context里面的内容会导致程序的运行不可预料。 …

借助cubeMX实现STM32MP157A(-M4核)UART、按键中断、环境检测开关实验

main.c 可以添加一句打印提示 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init(…

准备蓝桥杯的宝贝们,二分法基础篇(下)例题讲解

二分法例题第一题&#xff1a;搜索插入位置解法一&#xff08;左闭右闭&#xff09;解法二&#xff08;左闭右开&#xff09;解法三&#xff08;暴力求解&#xff09;第二题&#xff1a;在排序数组中查找元素的第一个和最后一个位置解法一&#xff08;左闭右闭&#xff09;第三…

​Base64编码知识详解 ​

在我们进行前端开发时&#xff0c;针对项目优化&#xff0c;常会提到一条&#xff1a;针对较小图片&#xff0c;合理使用Base64字符串替换内嵌&#xff0c;可以减少页面http请求。 并且还会特别强调下&#xff0c;必须是小图片&#xff0c;大小不要超过多少KB&#xff0c;等等。…

Flume监听多个文件目录,并根据文件名称不同,输出到kafka不同topic中

一、Flume监听多个文件目录 1. flume的环境搭建和基础配置参考 https://blog.csdn.net/qinqinde123/article/details/128130131 2. 修改配置文件flume-conf.properties #定义两个是数据源source1、source2 agent.sources source1 source2 agent.channels channel1 agent.…

B. Password(KMP)

Problem - 126B - Codeforces Asterix、Obelix和他们的临时伙伴Suffix和Prefix终于找到了和谐寺。然而&#xff0c;它的门被牢牢地锁住了&#xff0c;即使是Obelix也没能打开它们。 过了一会儿&#xff0c;他们发现在寺庙大门下面的一块岩石上刻着一个字符串。亚力认为那是打开…

realme手机配什么蓝牙耳机?realme蓝牙耳机推荐

蓝牙耳机作为人手必备的单品&#xff0c;不同厂商的产品更是多种多样&#xff0c;用户可以有更多的选择&#xff0c;选购蓝牙耳机的时候&#xff0c;除了看重佩戴舒适度、发声单元人们更加追求最新研发的技术。realme是为年轻人而来的科技潮牌。秉持“敢越级”品牌理念&#xf…

iOS MD5基础知识

MD5信息摘要算法&#xff08;英语&#xff1a;MD5 Message-Digest Algorithm&#xff09;&#xff0c;一种被广泛使用的密码散列函数&#xff0c;可以产生出一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c;用于确保信息传输完…

实现了Spring的Aware接口的自定义类什么时候执行的?

在之前的内容中 Spring的Aware接口有什么用&#xff1f;_轻尘的博客-CSDN博客_aware接口的作用 了解到用户可以通过实现相应的Aware接口来获取spring框架提供的能力&#xff0c;俗称“攀亲戚” 以如下代码为例&#xff0c;自定义类MyAware实现了BeanFactroryAware&#xff0…

数据库、计算机网络,操作系统刷题笔记5

数据库、计算机网络&#xff0c;操作系统刷题笔记5 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&…

【MySQL基础】MySQL常用的图形化管理工具有那些?

目录 一、为什么要使用MySQL图形化管理工具 原因 / 目的 / 作用 二、什么是DOS窗口? 三、常见的MySQL图形化管理工具有那些&#xff1f; 四、 常见几个MySQL图形工具的介绍 Navicat SQLyog MySQL Workbench DataGrip 五、Navicat图形工具的安装与使用 第一步&#x…

python带你制作随机点名系统,超级简单

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 在某些难以抉择得时候&#xff0c;我们经常要用外力来帮助我们做出选择 比如&#xff0c;课堂随机点名或面对活动需要人上台表演时等等场景 这个时候&#xff0c;有一个随机点名系统就非常好啦&#xff0c;毕竟运气得事~ …