Blog

Agility6

消息队列——常见问题的思考

Tech

前言 每当引入一个新的技术在项目中,一定是为了解决某个问题从而提升性能,当然不可避免的会增加维护成本以及技术本身需要考虑的问题。那么就来总结一下当项目引入了消息队列之后,需要去关注的一些常见问题 如何处理消费过程中的重复消息 如何确保消息不丢失 如何保证消息的顺序消费 消息积压了应该如何处理 如何处理消费过程中的重复消息 在消息传递过程中,如果传递失败那么发送方会执行重试,而这个重试的过程就可以会出现重复的消息。 可能会有第一直觉想到说,如果我的消息队列本身消息就是没有重复,那么业务程序不就简单多了吗? 在常见的消息队列中都是遵守At least once,也就是至少一次,消息在传递的过程中,至少会被送达一次,也就是说不允许丢消息,但是允许有少量重复消息出现。 说的这里要避免消费过程中的重复消息,本质还是需要让代码“接受”重复,也就是要让代码能过消除重复消息对业务的影响。 用幂等性来解

一个索引导致的惨案😱(已脱敏)

Tech

📝记录一下在实习遇到的一个线上Bug,整体排查解决链路(已脱敏)。 🤔为什么要写这一个总结呢?问题其实很简单,但是其中的排查步骤是值得思考的,如何将这次经验抽象成通用的解决步骤,这个才是关键所在!。 省流版:因为一张表索引没有设置好,导致的后续一系列的问题! 问题的发现 客户的工单:产品的xxx页面修改操作无法响应,卡死。 定位问题 出现这个问题,第一个需要查看的就是日志和监控系统,可是!项目没有部署监控和日志系统😢 紧急部署内部的监控工具 分析 监控日志分析 通过日志可以发现,在某个时间的时候开始出现锁超时问题其中,xxx_todo表被锁住了。在业务中该表对应着我们其中待办模块。 从上述日志得到的信息就是,xxx_todo表被锁了,该表对应的是待办模块,判断问题的方向为待办相关定时任务 定时任务日志分析 通过拉取数据,找到定时任执行记录,可以锁定到「消息机制」待办定时任务执行

HTTPS的「S」

Tech

前言 本篇文章就来记录一下HTTP的S究竟是什么? HTTP大家一定都是十分熟悉了,那么HTTP与HTTPS有什么不同呢? 多了个S HTTP是明文传输,容易有安全性的问题 HTTPS是会加密传输的,并且需要CA证书 其实HTTPS重点是在这个S上,也就是SSL/TLS这就是HTTPS的核心,所以本篇文章也是从这两个进行展开的。 加密安全协议 SSL其实是TLS的前生它们都是安全加密协议,目前大部分浏览器都不支持SSL,而支持TLS。 到这里可以很清楚的知道,HTTPS需要保证安全性,那么就一定需要对数据进行加密,所以接下来先来说一说加密的知识吧。 对称加密 通俗来说,对称加密就是双方都是使用相同的加密规则,那么这个就称为对称加密。 那么如果有第三方知道这个加密规则,那么就有风险被破解了。 非对称加密 首先,先来讲讲如何得到一个安全的密钥。 首先用户A和用户B都拥有一个公钥

关于缓存

Tech

缓存的经典问题 缓存失效 缓存穿透 缓存雪崩 数据不一致 数据并发竞争 Hot Key Big Key 每一个问题都参照四个步骤进行阐述:问题描述、原因分析、业务场景、解决方案 缓存失效 问题描述 当一个系统中存在大量的热点数据,通常情况下就需要上缓存,大致的流程就是 查缓存(有则直接返回) 查DB(缓存中不存在) 将查到的数据回写到缓存中 我们希望数据查询尽可能命中,这样系统负载最小,性能最佳,但是如果这时候有大量的Key同时失效,很多缓存数据访问都会miss,就会穿透到DB中,这样就会导致整体的系统压力急剧上升,这就是缓存失效的问题。 原因分析 导致缓存失效的主要原因,就是批量Key一起失效,简言之就是在加入缓存时过期时间都是一致的。一般情况下,缓存时逐步写入的,所以自然就会是逐步淘汰的。 但是,在一些场景下,如果需要将一个批次的热点数据添加到缓存中,这时候如果过期时间没

层式结构-时间轮

Tech

后端开发常见层式结构:时间轮、跳表、LSM-Tree 海量并发的定时任务:时间轮 高并发读写的有序结构组织:跳表 空间利用率以及写性能高的磁盘数据组织:LSM-Tree 什么是层式结构(GPT):层式结构(Layered Structure)在计算机科学和软件工程中通常指的是将系统分成若干层次,每个层次负责不同的功能和任务。这样设计的好处是可以将复杂系统的不同部分进行解耦和模块化,从而提高系统的可维护性、可扩展性和可理解性。 时间轮 单层级时间轮 定时任务是用时间轮进行实现的,那么它是如何去组织数据的呢? 一个格子代表一个时刻 一个格子可存储多个任务 按执行顺序组织数据 多层级时间轮 按照任务的轻重缓急来进行层次划分的,当我们的任务是在秒这个单位下需要执行的,那么只需要放在前60秒即可,那么如果任务是分、时单位下,那么只需要放在对应的层级即可。对比单层级时间轮,多层级时间轮