zookeeper都有哪些使用场景
摘要:分布式协调 分布式锁 注册中心(元数据/配置信息管理) HA高可用性
阅读全文
posted @
2021-11-18 15:14
公众号/架构师与哈苏
阅读(25)
推荐(0) 编辑
如何保证缓存和数据库的双写的一致性
摘要:最初级的缓存不一致问题以及解决方案 问题: 先修改数据库,再删除缓存,如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据出现不一致 解决思路: 先删除缓存:再修改数据库,如果删除缓存成功了,如果修改数据库失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致因为读的时候缓存
阅读全文
posted @
2021-11-17 10:53
公众号/架构师与哈苏
阅读(41)
推荐(0) 编辑
redis 主从复制的核心原理
摘要:当启动一个 slave node 的时候,它会发送一个 PSYNC 命令给 master node。 如果这是 slave node 初次连接到 master node,那么会触发一次 full resynchronization 全量复制。此时 master 会启动一个后台线程,开始生成一份 RD
阅读全文
posted @
2021-11-16 11:41
公众号/架构师与哈苏
阅读(29)
推荐(0) 编辑
redis集群模式的工作原理
摘要:redis cluster原理 redis cluster(多master + 读写分离 + 高可用) 我们只基于redis cluster去搭建redis集群即可,不需要手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用 redis cluster vs replicati
阅读全文
posted @
2021-11-16 11:41
公众号/架构师与哈苏
阅读(77)
推荐(0) 编辑
redis哨兵原理
摘要:哨兵是redis集群架构中非常重要的一个组件 主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员 故障转移,如果master node挂掉了,会自动转移到slave node上 配置
阅读全文
posted @
2021-11-16 11:40
公众号/架构师与哈苏
阅读(89)
推荐(0) 编辑
redis如何通过读写分离来承载读请求QPS超过10万多
摘要:单机redis,能够承载的QPS大概就在上万,到几万不等 方案 读写分离,一般都是用来支撑读高并发,写请求比较少,可能请求也就一秒几千 大量的请求都是读,一秒钟二十万次 master 同步数据 slave复制,异步的 master持久化对于主从架构的安全保障 如果采用了主从架构,那个建议必须开启ma
阅读全文
posted @
2021-11-15 11:46
公众号/架构师与哈苏
阅读(237)
推荐(0) 编辑
redis有几种数据类型
摘要:string hash list set sorted set string 这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。 hash 这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 redis 里,然
阅读全文
posted @
2021-11-12 16:20
公众号/架构师与哈苏
阅读(45)
推荐(0) 编辑
redis nio 多路复用
摘要:IO多路复用程序 socket进入队列 文件事件分发器 处理器
阅读全文
posted @
2021-11-12 15:58
公众号/架构师与哈苏
阅读(61)
推荐(0) 编辑
es分布式搜索引擎在几十亿数据量级的场景下如何优化查询性能
摘要:(1) 性能优化杀手锏--filesystem cache os cache,操作系统的缓存 你往es里写的数据,实际上都写到了磁盘文件里面去了,磁盘文件里面的数据操作系统会自动将里面的数据缓存到os cache里面去 es的搜索引擎严重依赖于底层filesystem cache,你如果给files
阅读全文
posted @
2021-11-12 11:32
公众号/架构师与哈苏
阅读(336)
推荐(0) 编辑
es写入数据的工作原理是什么啊?es查询数据的工作原理是什么啊?
摘要:es写数据过程 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点) coordinting node,对document进行路由,将请求转发给对应的node(有primary shard) 实际的node上的primary shard处理请求,然后将数
阅读全文
posted @
2021-11-11 17:51
公众号/架构师与哈苏
阅读(35)
推荐(0) 编辑
es分布式结构原理是什么?
摘要:elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。 分布式 核心思想就是在多台机器上启动多个es进程实例,组成了一个es集群。es中存储数据的基本单位是索引,比如说你现在要在es中存储一些订单数据,你就应该在es中创建一个。接着你搞一个索引,这个索引可以拆分成多
阅读全文
posted @
2021-11-11 15:32
公众号/架构师与哈苏
阅读(136)
推荐(0) 编辑
设计MQ的思路
摘要:分布式 首先这个mq得支持可伸缩性吧,就是需要的时候快速扩容,就可以增加吞吐量和容量,那怎么搞?设计一个分布式系统,参照一下kafka的设计理念,broker->topic->pratition,每个partition放一个机器,就存一部分数据。如果现在资源不够了,简单呀,给topic增加parti
阅读全文
posted @
2021-11-11 11:06
公众号/架构师与哈苏
阅读(61)
推荐(0) 编辑
消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?大量消息持续积压几个小时,怎么办?
摘要:消息积压处理办法1:临时紧急扩容 先修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停掉。新建一个topic,partition是原来的10倍,临时建立好原先10倍的queue数量。然后写一个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据,消费之后不
阅读全文
posted @
2021-11-11 10:40
公众号/架构师与哈苏
阅读(330)
推荐(0) 编辑
kafka数据丢失的场景
摘要:消费者弄丢数据 唯一可能导致消费者弄丢数据的情况,就是说,你那个消费到了这个消息,然后消费者那边自动提交了offset,让kafka以为你已经消费好了这个消息,其实你刚准备处理这个消息,你还没处理,你自己就挂了,此时这条消息就丢咯。 这不是一样么,大家都知道kafka会自动提交offset,那么只要
阅读全文
posted @
2021-11-10 15:40
公众号/架构师与哈苏
阅读(158)
推荐(0) 编辑
kafka高可用(集群)
摘要:kafka的分布式和高可用 kafka的一个基本架构:多个broker组成,一个broker是一个节点;你创建一个topic,这个topic可以划分成多个partition,每个parttition可以存在于不同的broker上面,每个partition存放一部分数据。这是天然的分布式消息队列。 实
阅读全文
posted @
2021-11-10 09:40
公众号/架构师与哈苏
阅读(186)
推荐(0) 编辑
RabbitMQ死信队列,延时队列
摘要:死信队列 消息被消费方否定确认,使用channel.basicNack或channel.basicReject, 并且此时requeue属性被设置为false。 消息在队列的存活时间超过设置的TTL时间 消息队列的消息数量已经超过最大队列长度 那么该消息将成为"死信"。"死信"消息会被RabbitM
阅读全文
posted @
2021-11-08 16:45
公众号/架构师与哈苏
阅读(38)
推荐(0) 编辑
Dubbo调用流程
摘要:五个角色 注册中心registry: 服务注册与发现 服务提供者provider: 暴露服务 服务消费者consumer: 调用远程服务 监控中心monitor: 统计服务的调用次数和调用时间 容器container: 服务允许容器 调用流程: container容器负责启动,加载,运行provid
阅读全文
posted @
2021-11-08 15:42
公众号/架构师与哈苏
阅读(80)
推荐(0) 编辑
SpringCloud核心组件及其作用
摘要:Eureka: 服务注册与发现 注册: 每个服务都向Eureka登记自己提供服务的元数据,包括服务的ip地址,端口号,版本号,通信协议等。eureka将各个服务维护在了一个服务清单中(双层Map,第一层key是服务名,第二层key是实例名,value是服务地址加端口)。同时对服务维持心跳,剔除不可用
阅读全文
posted @
2021-11-08 15:22
公众号/架构师与哈苏
阅读(75)
推荐(0) 编辑
什么是Hystrix
摘要:分布式容错框架 阻止故障的连锁反应,实现熔断 快速失败,实现优雅降级 提供实时的监控和警告 实现机制 资源隔离: 线程隔离,信号量隔离 线程隔离: Hystrix会给每一个Command分配一个单独的线程池,这样在进行单个服务调用的时候,就可以在独立的线程池里面进行,而不会对其他线程造成影响。 信号
阅读全文
posted @
2021-11-08 14:17
公众号/架构师与哈苏
阅读(45)
推荐(0) 编辑
Spring Cloud和Dubbo的区别
摘要:底层协议: Spring Cloud基于http协议,dubbo基于Tcp协议,决定了dubbo的性能相对会比较好 注册中心: Spring Cloud使用eureka,dubbo推荐使用zookeeper 模型定义: dubbo将一个接口定义为一个服务,Spring Cloud则是将一个应用定义为
阅读全文
posted @
2021-11-08 10:42
公众号/架构师与哈苏
阅读(179)
推荐(0) 编辑
zk和eureka的区别
摘要:zk CP设计(强一致性),目标是一个分布式的协调系统,用于进行资的统一管理。 当节点crash后,需要进行leader的选举,在这个期间,zk服务是不可用的。 eureka AP设计(高可用),目标是一个服务注册发现系统,专门用于微服务的服务发现注册。 Eureka各个节点都是平等的,几个节点挂掉
阅读全文
posted @
2021-11-08 10:36
公众号/架构师与哈苏
阅读(170)
推荐(0) 编辑
Zookeeper watch机制
摘要:客户端,可以通过在znode上设置watch,实现实时监听znode的变化 Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端 父节点的创建,修改,删除都会触发Watcher事件 子节点的创建,删除会触发Watcher事件
阅读全文
posted @
2021-11-08 10:15
公众号/架构师与哈苏
阅读(108)
推荐(0) 编辑
简述ZAB协议
摘要:ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持奔溃恢复的原子广播协议,实现分布式数据一致性 所有客户端的请求都是写入到Leader进程中,然后由Leader同步到其他节点,称为Follower。在集群数据同步的过程中,如果出现Follower节点奔溃或者Leader进程奔溃时,都会
阅读全文
posted @
2021-11-05 16:33
公众号/架构师与哈苏
阅读(144)
推荐(0) 编辑
分布式事物解决方案
摘要:2PC(二段提交) 准备阶段: 协调者会给各参与者发送准备命令,可以理解成除了提交事务之外啥事都做好了 提交阶段: 分为提交(回滚事务,提交事务) 3PC(三段提交) 准备阶段: 会先去询问此时的参与者是否有条件接这个事务。 预提交阶段: 提交前的操作 提交阶段: 提交 TTC(补偿事务) 2PC和
阅读全文
posted @
2021-11-05 14:15
公众号/架构师与哈苏
阅读(43)
推荐(0) 编辑
分布式锁解决方案
摘要:Zookeeper分布式锁: zk通过临时节点,解决了死锁的问题,一旦客户端获取到锁之后突然挂掉了(Session连接断开),那么这个临时节点就会自动删除掉,其他客户端自动获取锁。临时顺序节点解决惊群效应 Redis分布式锁: Redis分布式锁通过setNX,单线程处理网络请求,不需要考虑并发安全
阅读全文
posted @
2021-11-04 11:50
公众号/架构师与哈苏
阅读(73)
推荐(0) 编辑
分布式id生成方案
摘要:uuid UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。 UUID由以下几部分的组合: UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。 时钟序列。 全局唯一的IEEE机器识别号,如果有网卡,从网卡M
阅读全文
posted @
2021-11-04 11:08
公众号/架构师与哈苏
阅读(155)
推荐(0) 编辑
分布式系统,session共享方案
摘要:服务器(tomcat)之间进行session同步 服务器之间进行Session同步,这样可以保证每个服务器上都有全部的Session信息,不过当服务容器数量比较多的时候,同步是会有延迟甚至同步失败; IP绑定策略 使用Nginx(或其他复杂均衡软硬件)中的IP绑定策略,同一个IP只能在指定的同一个机
阅读全文
posted @
2021-11-03 15:39
公众号/架构师与哈苏
阅读(63)
推荐(0) 编辑
负载均衡算法
摘要:1.轮询法 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 2.随机法 通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于
阅读全文
posted @
2021-11-03 15:02
公众号/架构师与哈苏
阅读(37)
推荐(0) 编辑
redis中的事务
摘要:Redis事务提供了一种"将多个命令打包,然后一次性,按顺序地执行"的机制,并且事务在执行的期间不会主动中断. redis中事务是可以视为一个队列,即我们可以通过MULTI开始一个事务,这相当于我们声明了一个命令队列。接下来,我们向Redis中提交的每条命令,都会被排入这个命令队列。当我们输入EXE
阅读全文
posted @
2021-11-02 16:18
公众号/架构师与哈苏
阅读(51)
推荐(0) 编辑
mysql中的EXPLAIN
摘要:执行计划就是sql的执行查询的顺序,以及如何使用索引查询,返回的结果集的行数 EXPLAIN SELECT * from A where X=? and Y=? id :是一个有顺序的编号,是查询的顺序号,有几个 select 就显示几行。id的顺序是按 select 出现 的顺序增长的。id列的值
阅读全文
posted @
2021-11-01 16:22
公众号/架构师与哈苏
阅读(45)
推荐(0) 编辑