分布式
文章平均质量分 94
探讨分布式的奥秘
SunAlwaysOnline
开始工作的第3年!
展开
-
面试常问集锦——分布式系列
到底啥是分布式系统开发经验?https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247484872&idx=1&sn=d28383f3397ef6b250afc5c182fcb200&chksm=fba6edcbccd164dd38701a0e06a381249ebb6ad9d0205df2c605b9634688d0dd58f00a2d645a&scene=21#wechat_redirect图解 |原创 2022-05-18 19:10:30 · 2021 阅读 · 0 评论 -
从Curator实现分布式锁的源码再到羊群效应
本文从源码角度讲解了使用Curator获取分布式锁的流程,接着从等待锁的演化过程角度出发,分析了Zookeeper在分布式锁场景下避免羊群效应的解决方案。原创 2022-01-02 23:02:07 · 2041 阅读 · 1 评论 -
Redis哨兵机制原理浅析
一、前言上一篇文章Redis主从复制原理中简要地说明了主从复制的一个基本原理,包含全量复制、复制积压缓冲区与增量复制等内容,有兴趣的同学可以先看下。利用主从复制,可以实现读写分离、数据备份等功能。但如果主库宕机后,需要运维人员手动地将一个从库提升为新主库,并将其他从库slaveof新主库,以此来实现故障恢复。因此,主从模式的一个缺点,就在于无法实现自动化地故障恢复。Redis后来引入了哨兵机制,哨兵机制大大提升了系统的高可用性。二、什么是哨兵哨兵,就是站岗放哨的,时刻监控周围的一举一动原创 2021-12-30 23:32:23 · 2617 阅读 · 6 评论 -
面试官:能给我画个Zookeeper选举的图吗?
Zookeeper是一个分布式协调框架,提供分布式锁、配置项管理、服务注册与集群管理等功能。为了保证Zookeeper的高可用,一般都会以集群的模式部署。这个时候需要考虑各个节点的数据一致性,那么集群在启动时,需要先选举出一位Leader,再由Leader完成向其他节点的数据同步工作。本文将是Zookeeper系列的第一篇文章,从源码角度讲述Zookeeper的选举算法。原创 2021-12-26 17:19:48 · 2008 阅读 · 2 评论 -
Redisson可重入与锁续期源码分析
Redisson是一个可以在java项目中使用的Redis客户端,其屏蔽了原子性、可重入、锁续期的诸多细节,内部实现各种各样的锁。例如可重入锁、公平锁、MultiLock与Red Lock与读写锁等,今天主要分析可重入锁与锁续期的源码。原创 2021-12-18 00:42:03 · 2825 阅读 · 4 评论 -
面试官:说说你了解几种限流算法,手写个demo?
在流量突增的场景下,为了保证后端服务在整体上一个稳定性,我们需要对请求进行限流,来避免系统崩溃。不过限流会对少部分用户的请求直接进行拒绝或者延迟处理,影响这些用户的体验。本文会介绍一些常见的限流算法,并在最后附上对分布式限流的一些思考。原创 2021-12-05 22:55:58 · 10732 阅读 · 13 评论 -
8种方案,保证缓存和数据库的最终一致性
我们通常使用缓存机制来提升系统的性能,缓存系统下的读写操作,一般都需要操作数据库与缓存。对于读操作,一般是先查询缓存,查询不到再查询数据库,最后回写进缓存。而对于写操作,究竟是先删除(更新)缓存,再更新数据库,还是先更新数据库,再删除(更新)缓存呢?由于对数据库以及缓存的整体操作,并不是原子性的,再加上读写并发,究竟什么样的方案可以保证数据库与缓存的一致性呢?下面介绍8种方案,配合读写时序图,希望你能从其中了解到保证一致性的设计要点。原创 2021-11-25 23:42:24 · 9490 阅读 · 5 评论 -
22张图,带你入门分布式一致性算法Raft
Raft节点的角色划分与任期在Raft中,有以下三种角色:Follower 跟随者所有节点的初始状态,内部都会有一个超时时间。对于每一个Follower,其超时时间是随机的。这个超时时间,规定了在倒计时结束后仍然收不到Leader的心跳,Follower就会转变为Candidate。为什么每个Follower的超时时间是随机的,改成一样的可以吗?不可以,相同的超时时间会造成多个Follower同时转变为Candidate,选票被瓜分,导致获取不到半数以上的选票,就需要进行新一轮的选举原创 2021-10-30 22:31:17 · 2280 阅读 · 3 评论 -
9张图,带你了解一致性哈希原理
假设我们现在做一个简单的文件缓存服务,由于文件数过多,我们先使用3台机器用来存储文件。为了由文件名(假设文件名称不重复)能得到存储的机器,考虑先对文件名做hash运算,接着对3取余,得到的余数即为所在机器的编号。这套系统运行了很久,后来文件数量慢慢增多,3台机器存不下了,现在我们考虑扩充到4台。这个时候,我们的算法更新为hash(文件名)%5。那么使用该算法获取abc.txt文件所在的缓存机器时,在其hash值为10的时候,将会映射到0号机器上,而之前是存储在1号机器上的,这个时候就会重原创 2021-10-21 22:55:56 · 2343 阅读 · 5 评论 -
常说的分布式系统核心理论CAP与BASE到底是什么
先不管CAP是什么,就谈谈对于一个分布式的系统,它有哪些特征或行为。(1)分布式系统会把微服务部署在多个节点上(2)每个节点都有可能存储数据,一份数据可能在多个节点上有副本(3)节点之间通过网络进行数据的同步假设有个微服务,需要部署在3个节点上,每个节点都需要存储同一份数据id,id的初始值都是1。现在对节点1写入id=2,当网络正常的情况下,节点1会向节点2与节点3进行数据同步,此时3个节点的id值都是2。不管访问哪个节点,读取的id都是一样的值。再对节点1写入id=3时.原创 2021-09-25 22:04:46 · 1490 阅读 · 1 评论 -
RabbitMQ如何在各个环节保证消息不丢失
以RabbitMq为例,消息从生产到消费,要经历三个阶段,分别是生产、队列转发与消费,每个环节都可能丢失消息。一、生产端投递到队列过程中可能丢失消息1、生产端发送消息时,由于网络闪断原因,消息未到达队列。开启队列的confirm机制,mq接收到消息后,回传ack进行确认。2、消息正确到达队列,队列也处理完毕,回传ack时由于网络闪断,生产端未收到ack。进行重试二、队列本身可能丢失消息1、队列处理消息异常mq会回传nack2、消息还没来得及刷盘,mq就宕机了,原创 2021-09-21 00:07:29 · 4344 阅读 · 1 评论 -
我用了上万字,走了一遍Redis实现分布式锁的坎坷之路,从单机到主从再到多实例,原来会发生这么多的问题
一、分布式锁的背景在同一个jvm进程内,我们可以使用synchronized或者lock锁,来完成对共享资源的互斥访问。然而现在大多数系统都是分布式系统,jvm进程分布在不同的节点上,为了全局数据的一致性,这个时候就需要分布式锁了。实现分布式锁,有多种方案(1)借助于数据库,乐观锁使用版本号机制,悲观锁使用for update机制。(2)借助于Zookeeper,通过创建临时的顺序节点。(3)借助于Redis,这篇文章会详细说明Redis锁的演进历程。二、Redis实现分布式锁的原创 2021-08-29 21:59:52 · 2116 阅读 · 3 评论