延时队列 这 Redisson DelayedQueue 实现
基于 Redisson 的最佳实践应用 Redisson 实现了延时队列(Delayed Queue )功能,可以直接拿来使用。
基于 Redisson 的最佳实践应用 Redisson 实现了延时队列(Delayed Queue )功能,可以直接拿来使用。
Redis 从 2.8.0 版本开始提供了 键空间通知 特性。键空间通知允许客户端订阅发布/订阅通道,以便接收以某种方式影响Redis 数据集的事件。
可以基于 Redis 的键空间通知中的 键过期事件通知来实现延时队列的功能。
Redis 的 Sorted Set 数据类型是一个有序集合,不可重复集合。有序集合的每个元素都有一个用于排序的权重(score)属性。
此类型非常适合用于制作排行榜,同样可以借助权重(score)属性作为元素的延时时间来实现延时队列的功能。
最近项目用到了延时队列,是基于 Redis 的 Sorted Set
数据类型和 ZRANGEBYSCORE
命令实现的。
延时队列还有其他实现方式,可以根据项目环境和业务需要选择适当的方案,这里做个汇总和记录。
计一次生产一台服务器重启导致 Redis 集群两个实例宕机服务不可用问题分析排查。
Redis 集群宕机导致签权服务异常,进而导致所有服务不可用,其中还包含支付系统,是一次严重的生产事故。
恢复耗时半小时,电话被打爆,高层领导,现场项目经理,销售,测试都紧盯着问题修复。
分布式发号器(ID生成器)可选方案和需要满足的特性,可参考 分布式微服务系列(十七):高性能分布式发号器(ID生成器)。
本篇基于 Redis 的原子递增命令 INCR 实现 递增ID 的操作。经 200 并发线程测试 5 次,没有出现重复ID的情况。
开发互联网系统及架构在满足测算出的并发请求时,还要预防并发可能突破设计峰值的情况,必要时可以优先处理高优先级数据或特殊特征的数据,也要确保系统可用不崩溃。
开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。本文介结限流相关概念和实现方式。
本篇基于本地事件表加 ActiveMQ 实现分布式事务。
本篇是 分布式微服务应用系列(九):分布式事务概念及解决方案 ,分布式微服务应用系列(十):本地事件表加消息队列实现分布式事务思路 的延续。
负载均衡(Load Balance):指将负载(工作任务)进行均衡,分摊到多个处理节点上。负载均衡是一个统一的流量入口节点,映射了多个处理请求的映节点,入口节点将请求任务分发到不同的处理节点,实现分治。
互联网应用服务为了能满足大流量请求处理,通常会集群部署,使用负载均衡来分担单台服务器的压力,避免单点故障。
Web 系统的表单重复提交问题必然会出现,如注册、秒杀下单、支付等场景都可能出现重复提交。必须对重复提交进行处理,否则会出现脏数据,若建了唯一索引则会抛 JDBC
异常。单体应用的表单重复提交问题可参考 拦截器 与Spring AOP 实现防止表单重复提交。
分布式集群部署的 Web 做防止表单重复提交的处理上,其根本也是基于 TOKEN
的方式来实现,因是集群布署,所以此 TOKEN 不能存放在 SESSION
中(未使用共享 SESSION 方案) ,而是存放在外部存储系统中,如 Reids,这里其实引入了类似分布式锁的概念。