前言
每当引入一个新的技术在项目中,一定是为了解决某个问题从而提升性能,当然不可避免的会增加维护成本以及技术本身需要考虑的问题。那么就来总结一下当项目引入了消息队列之后,需要去关注的一些常见问题
如何处理消费过程中的重复消息
如何确保消息不丢失
如何保证消息的顺序消费
消息积压了应该如何处理
如何处理消费过程中的重复消息
在消息传递过程中,如果传递失败那么发送方会执行重试,而这个重试的过程就可以会出现重复的消息。
可能会有第一直觉想到说,如果我的消息队列本身消息就是没有重复,那么业务程序不就简单多了吗?
在常见的消息队列中都是遵守At least once,也就是至少一次,消息在传递的过程中,至少会被送达一次,也就是说不允许丢消息,但是允许有少量重复消息出现。
说的这里要避免消费过程中的重复消息,本质还是需要让代码“接受”重复,也就是要让代码能过消除重复消息对业务的影响。
用幂等性来解
📝记录一下在实习遇到的一个线上Bug,整体排查解决链路(已脱敏)。
🤔为什么要写这一个总结呢?问题其实很简单,但是其中的排查步骤是值得思考的,如何将这次经验抽象成通用的解决步骤,这个才是关键所在!。
省流版:因为一张表索引没有设置好,导致的后续一系列的问题!
问题的发现
客户的工单:产品的xxx页面修改操作无法响应,卡死。
定位问题
出现这个问题,第一个需要查看的就是日志和监控系统,可是!项目没有部署监控和日志系统😢
紧急部署内部的监控工具
分析
监控日志分析
通过日志可以发现,在某个时间的时候开始出现锁超时问题其中,xxx_todo表被锁住了。在业务中该表对应着我们其中待办模块。
从上述日志得到的信息就是,xxx_todo表被锁了,该表对应的是待办模块,判断问题的方向为待办相关定时任务
定时任务日志分析
通过拉取数据,找到定时任执行记录,可以锁定到「消息机制」待办定时任务执行
前言
本篇文章就来记录一下HTTP的S究竟是什么?
HTTP大家一定都是十分熟悉了,那么HTTP与HTTPS有什么不同呢?
多了个S
HTTP是明文传输,容易有安全性的问题
HTTPS是会加密传输的,并且需要CA证书
其实HTTPS重点是在这个S上,也就是SSL/TLS这就是HTTPS的核心,所以本篇文章也是从这两个进行展开的。
加密安全协议
SSL其实是TLS的前生它们都是安全加密协议,目前大部分浏览器都不支持SSL,而支持TLS。
到这里可以很清楚的知道,HTTPS需要保证安全性,那么就一定需要对数据进行加密,所以接下来先来说一说加密的知识吧。
对称加密
通俗来说,对称加密就是双方都是使用相同的加密规则,那么这个就称为对称加密。
那么如果有第三方知道这个加密规则,那么就有风险被破解了。
非对称加密
首先,先来讲讲如何得到一个安全的密钥。
首先用户A和用户B都拥有一个公钥
缓存的经典问题
缓存失效
缓存穿透
缓存雪崩
数据不一致
数据并发竞争
Hot Key
Big Key
每一个问题都参照四个步骤进行阐述:问题描述、原因分析、业务场景、解决方案
缓存失效
问题描述
当一个系统中存在大量的热点数据,通常情况下就需要上缓存,大致的流程就是
查缓存(有则直接返回)
查DB(缓存中不存在)
将查到的数据回写到缓存中
我们希望数据查询尽可能命中,这样系统负载最小,性能最佳,但是如果这时候有大量的Key同时失效,很多缓存数据访问都会miss,就会穿透到DB中,这样就会导致整体的系统压力急剧上升,这就是缓存失效的问题。
原因分析
导致缓存失效的主要原因,就是批量Key一起失效,简言之就是在加入缓存时过期时间都是一致的。一般情况下,缓存时逐步写入的,所以自然就会是逐步淘汰的。
但是,在一些场景下,如果需要将一个批次的热点数据添加到缓存中,这时候如果过期时间没
后端开发常见层式结构:时间轮、跳表、LSM-Tree
海量并发的定时任务:时间轮
高并发读写的有序结构组织:跳表
空间利用率以及写性能高的磁盘数据组织:LSM-Tree
什么是层式结构(GPT):层式结构(Layered Structure)在计算机科学和软件工程中通常指的是将系统分成若干层次,每个层次负责不同的功能和任务。这样设计的好处是可以将复杂系统的不同部分进行解耦和模块化,从而提高系统的可维护性、可扩展性和可理解性。
时间轮
单层级时间轮
定时任务是用时间轮进行实现的,那么它是如何去组织数据的呢?
一个格子代表一个时刻
一个格子可存储多个任务
按执行顺序组织数据
多层级时间轮
按照任务的轻重缓急来进行层次划分的,当我们的任务是在秒这个单位下需要执行的,那么只需要放在前60秒即可,那么如果任务是分、时单位下,那么只需要放在对应的层级即可。对比单层级时间轮,多层级时间轮