分布式系统
郑琨51
好好学习,只争朝夕
展开
-
负载均衡
挖个坑,后面找时间写一下美团MGWLVS 负载均衡集群原创 2021-03-01 19:00:17 · 276 阅读 · 0 评论 -
rocketMQ保证不丢消息的处理方法
目录消息发送发送方式同步发送异步发送单向发送重试机制多Master消息存储同步刷盘异步刷盘(默认)磁盘挂了?消息消费手动ack失败重试保证一条消息不被丢失,主要可以从消息流转的三个环节考虑。消息发送可能有成功,消息存储肯能还没存盘或者存盘以后磁盘挂了,消息消费失败,但是已经ack,无法再消费。所以解决思路从下面几点考虑。消息发送发送方式同步发送发送以后,等broker返回ack才算发送完成。异步发送发送以后就过,不再等待ack。等回调函数触发。单向发送只负责发送消息而不等待服务器回应且没有原创 2021-02-02 23:00:06 · 364 阅读 · 0 评论 -
redis持久化
原创 2021-01-26 19:20:14 · 66 阅读 · 0 评论 -
CAS登录验证流程
最近一个项目用到CAS登录认证,研究了很多资料,这两篇把这个讲清楚了,这里记录下,以后有时间把详细流程在这里补一下。单点流程序列图相关术语解释(TGT、ST、PGT、PT、PGTIOU)原创 2021-01-19 17:16:06 · 469 阅读 · 0 评论 -
BIO、NIO和AIO一文搞懂
目录BIO缺点服务端代码客户端NIONIO三大核心组件server端代码client端代码NIO服务端程序详细步骤AIO服务端代码客户端代码简单总结阻塞和非阻塞同步和异步BIO阻塞式IO。一个线程对应一个客户端。缺点IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源。线程太多的情况下服务器压力较大。服务端代码public class SocketServer { public static void main(String[] args) thr原创 2020-12-26 18:14:04 · 138 阅读 · 0 评论 -
RocketMQ消息存储
目录何时存储消息消息存储介质磁盘存储速度零拷贝技术消息存储结构刷盘机制同步刷盘异步刷盘配置方式消息主从复制同步复制异步复制配置方式负载均衡Producer负载均衡Consumer负载均衡集群模式广播模式消息重试如何让消息进行重试重试如何处理重试次数:关于MessageId:配置覆盖:死信队列消息幂等消息幂等的必要性发送时消息重复投递时消息重复负载均衡时消息重复(包括但不限于网络抖动、Broker 重启以及订阅方应用重启)处理方式何时存储消息MQ收到一条消息后,需要向生产者返回一个ACK响应,并将消息存原创 2020-12-19 19:39:13 · 2080 阅读 · 1 评论 -
RocketMQ学习笔记
RocketMQ组件结构NameServer提供轻量级的Broker路由服务。启动NameServer服务:$ROCKETMQ_HOME/bin目录下有个mqnamesrnohup bin/mqnamesrv & Broker实际处理消息存储、转发等服务的核心组件。启动命令:nohup ./mqbroker &Producer消息生产者集群。通常是业务系统中的一个功能模块。Consumer消息消费者集群。通常也是业务系统中的一个功能模块。RocketMQ的编程原创 2020-12-17 23:46:55 · 180 阅读 · 0 评论 -
三大主流消息队列Kafka、RabbitMQ、RocketMQ比较
RocketMQ淘宝内部的交易系统使用了淘宝自主研发的Notify 消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011 年初,Linkin 开源了Kafka 这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka 无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用 在淘宝交易、订单、充值等场景下还有诸多特性不满足,为此我们重新用 Java 语言编写了 Rocke原创 2020-12-17 22:18:44 · 1386 阅读 · 0 评论 -
RabbitMQ学习-高级特性
消息可靠性投递生产端confirm在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。confirm 确认模式return 退回模式rabbitmq 整个消息投递的路径为:producer—>rabbitmq broker—>exchange—>queue—>consumer消息从 producer 到 exchange 则会返回一个 confirmCallbac原创 2020-12-15 22:01:18 · 72 阅读 · 0 评论 -
RabbitMQ学习
这里写目录标题MQ 简介优点缺点常见MQ产品AMQP协议RabbitMQ简介基本概念BrokerVirtual hostConnectionChannelExchangeQueueBinding工作模式简单模式work queuesPublish/Subscribe 发布与订阅模式Routing 路由模式通配符Topic主题模式RPC 远程调用模式发布者确认模式MQ 简介优点异步解耦,提高可维护性,提高容错性削峰填谷,提高系统稳定性异步提速,提高提高吞吐量缺点降低可用性引入新的组件,M原创 2020-12-14 23:07:47 · 107 阅读 · 0 评论 -
redis缓存设计
目录缓存穿透解决办法1. 缓存空值2. 布隆过滤器注意缓存击穿解决办法缓存雪崩解决方法热点缓存重建优化解决方法缓存与数据库双写不一致解决方法redis开发规范键值设计键设计值设计命令规范客户端规范缓存穿透缓存穿透是指查询的数据在缓存中不存在,需要到数据库中查询,导致缓存没有起到作用。解决办法1. 缓存空值对于不存在的key,在缓存中存储value为空,以后来的查询仍然去缓存中查询。2. 布隆过滤器对于每一次查询,把key放入布隆过滤器进行过滤,如果布隆过滤器判断不存在,就直接返回空,不再去数据原创 2020-11-14 16:34:17 · 96 阅读 · 0 评论 -
redis核心数据结构
目录RedisDb数据结构String数据结构示意图listziplistquiklisthashsetintsetzsetzset数据结构RedisDb数据结构typedef struct redisDb { dict *dict; dict *expires; dict *blocking_keys; dict *ready_keys; dict *watche原创 2020-11-10 22:48:51 · 95 阅读 · 0 评论 -
redis数据结构
目录redis五种数据结构string基本操作字符串常用操作原子加减使用场景单值缓存对象缓存分布式锁计数器Web集群session共享分布式系统全局序列号hash哈希Hash常用操作使用场景对象缓存电商购物车优缺点list常用操作应用场景常用数据结构微博消息和微信公号消息set常用操作使用场景微信抽奖小程序微信微博点赞,收藏,标签zset常用操作集合操作应用场景集合操作实现排行榜redis五种数据结构string基本操作字符串常用操作SET key value //存入字符串键值对M原创 2020-11-10 22:11:00 · 128 阅读 · 0 评论 -
两阶段提交和三阶段提交
分布式提交的问题在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突,造成事实上的数据不一致。解决思路可以看到,这里出现问题的主要原因是多个副本之间没有同步机制,可以增加一个协调机制来解决数据不一致问题。下面介绍的两阶段提交和三阶段提交都是通过引入一个协调者来进行协调。两阶段提交概述原创 2020-11-03 23:47:32 · 3045 阅读 · 0 评论