如何设计一个分布式锁?如何对锁性能进行优化?
如何设计一个分布式锁?如何对锁性能进行优化? 分布式锁的本质:就是在所有进程都能访问到的一个地方设置一个锁资源,让这些进程都来竞争锁资源。(保证只有一个进程获取资源)数据库、zookeeper、redis等。通常对于分布式锁,会要求响应快、性能高、与业务无关。 如何使用redis实现分布式锁 SETNX key value:当key不存在时,将key设置为value,并返回1。如果ke...
如何设计一个分布式锁?如何对锁性能进行优化? 分布式锁的本质:就是在所有进程都能访问到的一个地方设置一个锁资源,让这些进程都来竞争锁资源。(保证只有一个进程获取资源)数据库、zookeeper、redis等。通常对于分布式锁,会要求响应快、性能高、与业务无关。 如何使用redis实现分布式锁 SETNX key value:当key不存在时,将key设置为value,并返回1。如果ke...
如何实现 RocketMQ 高可用? 如何实现 RocketMQ 高可用? 在 「RocketMQ 由哪些角色组成?」 中,我们看到 RocketMQ 有四个角色,需要考虑每个角色的高可用。 RocketMQ 集群 🦅 1. Producer Producer 自身在应用中,所以无需考虑高可用。 Producer 配置多个 Namesrv 列表,从而保证 Produc...
如何保证消息的顺序性? 不同的消息队列,其架构不同,所以实现消息的顺序性的方案不同。所以参见如下文章: RocketMQ 《精尽 RocketMQ 面试题》 的 「什么是顺序消息?如何实现?」 的面试题。 RabbitMQ 《精尽 RabbitMQ 面试题》 的 「RabbitMQ 如何保证消息的顺序性?」 面试题。 Kafka 《精尽 Kafka 面试题》 的 「Kafk...
在 《精尽【消息队列 】面试题》 中,已经解析过该问题。当然,我们有几点要补充下: Producer 在发送消息时,默认会生成消息编号( msgId ),可见 org.apache.rocketmq.common.message.MessageClientExt 类。 Broker 在存储消息时,会生成结合 offset 的消息编号( offsetMsgId ) 。 Cons...
如何使用 Redis 实现消息队列? 一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。 如果对方追问可不可以不用 sleep 呢?list 还有个指令叫 blpop ,在没有消息的时候,它会阻塞住直到消息到来。 如果对方追问能不能生产一次消费多次呢?使用 pub / sub 主题订阅者模式...
如何使用 Redis 实现分布式限流? 在 Spring Cloud Gateway 中,提供了 Redis 分布式限流器的实现,具体直接看艿艿写的 《Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.10) 之 RequestRateLimiterGatewayFilterFactory 请求限流》 的 「5.3 Redis Lua 脚本」 部分。 另外,Redi...
如何使用 Redis 实现分布式锁? Redis 实现分布式锁,需要考虑如下几个方面: 1、正确的获得锁 set 指令附带 nx 参数,保证有且只有一个进程获得到。 2、正确的释放锁 使用 Lua 脚本,比对锁持有的是不是自己。如果是,则进行删除来释放。 3、超时的自动释放锁 set 指令附带 expire 参数,通过过期机制来实现超时释放。 4、未获得到锁的等待机制 sl...
详细,可以看看如下: 因为 Redis Sentinel 的内容很多,艿艿这里就不详细哔哔了。实际场景下,对于开发的面试,我们也不会特别问,毕竟更偏运维的内容。 《Redis 官方文档 —— Sentinel 高可用》 《Redis 开发与运维》 的「9. 哨兵」章节,更加详细完整。
在 Spring Cloud 中,目前使用的声明式调用组件,只有: spring-cloud-openfeign ,基于 Feign 实现。 如果熟悉 Dubbo 胖友的会知道,Dubbo 的 Service API 接口,也是一种声明式调用的提现。 艿艿:注意噢,Feign 并非 Netflix 团队开发的组件。所有基于 Netflix 组件都在 spring-cloud-n...
🦅 Java NIO Epoll BUG Java NIO Epoll 会导致 Selector 空轮询,最终导致 CPU 100% 。 官方声称在 JDK 1.6 版本的 update18 修复了该问题,但是直到 JDK 1.7 版本该问题仍旧存在,只不过该 BUG 发生概率降低了一些而已,它并没有得到根本性解决。 🦅 Netty 解决方案 对 Selector 的 select ...