随笔分类 -  分布式

摘要:一些id生成方案 使用uuid生成方案: 优点:本地生成 缺点:uuid太长,性能差,不适合主键生成。 适合场景:随机文件名,编号等。 使用系统时间生成方案: 缺点:高并发时可能会有重复。如果要使用,可以加上一些业务字段,比如订单编号=时间戳+用户id+业务含义编号 关于发号器的设计 参考:有赞:如 阅读全文
posted @ 2021-04-16 15:40 静水楼台/Java部落阁 阅读(170) 评论(0) 推荐(0) 编辑
摘要:Spring Cloud Gateway是使用令牌桶算法来实现限流的,并采用Redis结合lua脚本的方式来实现分布式限流。 lua脚本地址:request_rate_limiter.lua RedisRateLimiter:RedisRateLimiter.java lua脚本如下: --入参部分 阅读全文
posted @ 2021-04-12 12:57 静水楼台/Java部落阁 阅读(534) 评论(0) 推荐(0) 编辑
摘要:一、为什么要使用Redis? 通常,我们使用Redis的目的主要有两个:高性能和高并发。 高性能:把数据放入缓存中,避免走数据库查询,性能提升。 高并发:Mysql扛不住高并发,用Redis来支撑高并发。 数据库建议不要超过2000/s的并发,Redis别说是4000/s,就算是4万/s也没问题。如 阅读全文
posted @ 2020-01-09 17:15 静水楼台/Java部落阁 阅读(127) 评论(0) 推荐(0) 编辑
摘要:官方文档:Redis transactions 相关命令: DISCARD EXEC MULTI UNWATCH WATCH Redis中的事务是一组命令的集合。一个事务中的命令要么都执行,要么都不执行。事务在执行期间,服务器不会中断事务而去执行其它客户端的命令请求,它会将事务中的所有命令都执行完, 阅读全文
posted @ 2019-06-24 22:58 静水楼台/Java部落阁 阅读(2786) 评论(0) 推荐(0) 编辑
摘要:一、缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层,如图11-3所示整个过程分为如下3步:1)缓存层不命中。 2)存储层不命中,不将空结果写回缓存。 3)返回空结果。缓存穿透将导致不存在的数据每次请求都要到存储层去查 阅读全文
posted @ 2019-04-20 21:01 静水楼台/Java部落阁 阅读(1285) 评论(0) 推荐(0) 编辑
摘要:一、传统系统session管理方案 1.利用cookie存放 将Session对象保存在Cookie,然后存放在浏览器端。每次浏览器向服务器发送请求的时候,都会把整个Session对象放在请求里一起发送到服务器,以此来实现Session共享。这样的方案实现起来特别方便,但是由于Cookie的存储容量 阅读全文
posted @ 2019-04-13 23:46 静水楼台/Java部落阁 阅读(312) 评论(0) 推荐(0) 编辑
摘要:1、引入RabbitMQ能带来哪些好处和坏处? 消息队列的作用,可以用四个词来概括:削峰,填谷,异步,解耦。 应用解耦(系统拆分)异步处理(预约挂号业务处理成功后,异步发送短信、推送消息、日志记录等)消息分发流量削峰消息缓冲 引入消息队列,会有什么缺点? 降低了系统可用性:本来系统运行好好的,引入消 阅读全文
posted @ 2019-04-11 15:16 静水楼台/Java部落阁 阅读(164) 评论(0) 推荐(0) 编辑
摘要:消息的可靠投递除了需要硬件,网络,消息中间件等的可靠保证外,还需要生产者,消费者来共同保证来完成。一条消息从生产者产生,到发送到交换机,并被投递到队列,并最终被消费者消费,这整个路径上,途径的每一个地方都要保证消息的可靠性。 其实,官方文档Reliability Guide已经总结了消息系统安全的方 阅读全文
posted @ 2019-04-08 22:10 静水楼台/Java部落阁 阅读(1204) 评论(0) 推荐(0) 编辑
摘要:https://my.oschina.net/liuyuantao/blog/1855531 默认情况下RabbitMQ发送的消息是为字节码,有时我们需要发送JSON格式的消息,则有如下两种处理方式。 1.手动转换成json 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON 阅读全文
posted @ 2019-04-08 21:09 静水楼台/Java部落阁 阅读(7334) 评论(0) 推荐(1) 编辑
摘要:官方文档: Clustering Guide Highly Available (Mirrored) Queues (翻译) 一、普通集群模式(默认) 默认情况下,RabbitMQ集群中队列的内容仅位于单个节点上(即声明该队列的节点,也就是主节点)。创建队列时,只会在某一个节点上创建队列,其它节点上 阅读全文
posted @ 2019-03-23 17:38 静水楼台/Java部落阁 阅读(2050) 评论(1) 推荐(0) 编辑
摘要:一、主从复制 官网:Replication Redis的主从复制默认是异步的(异步确认),这就保证了Redis的低延迟和高性能。客户端可以使用wait命令来同步的复制某些数据。 Redis主从复制的一些重要特点: 1.主从复制是异步的,指的是slave会进行异步确认 2.复制在master端是非阻塞 阅读全文
posted @ 2019-03-20 20:17 静水楼台/Java部落阁 阅读(1105) 评论(0) 推荐(0) 编辑
摘要:一、Redis的单线程模型 Redis基于Reactor模式实现了自己的网络事件处理器,这个处理器称为文件事件处理器(file event handler)。 文件事件处理器使用IO多路复用程序来同时监听多个socket,并根据socket的执行任务来为socket分配不同的事件处理器。 当被监听的 阅读全文
posted @ 2018-08-13 21:04 静水楼台/Java部落阁 阅读(763) 评论(0) 推荐(0) 编辑
摘要:一、传统架构跨库事务解决方案 名词解释 要了解XA协议,必须先了解X/Open DTP模型 X/Open DTP事务模型 X/Open DTP(Distributed Transaction Process)是X/Open 组织定义的一个分布式事务模型。这个模型主要使用了两段提交(2PC,Two-P 阅读全文
posted @ 2017-11-26 14:23 静水楼台/Java部落阁 阅读(310) 评论(0) 推荐(0) 编辑