分布式系统
stevewongbuaa
这个作者很懒,什么都没留下…
展开
-
可扩展的web架构 和 分布式系统
原文链接这是左耳朵耗子推荐的入门文章,咱来读一读吧挑选一些重点做笔记本文覆盖了设计大型网站时的一些关键问题,以及实现目标的一些组件1.1.分布式系统的设计原则关键原则:Availability:可用性。高可用性需要仔细考虑关键组件的冗余、部分系统失败时的快速恢复、出现问题时的降级Performance:性能。响应速度。Reliability:可靠性。请求可以返回相同的数据。Scalability:可扩展性。能处理多少流量。扩容的时候是否容易。...原创 2020-08-27 16:24:39 · 287 阅读 · 0 评论 -
SchedulerLock 分布式锁 原理
背景使用@SchedulerLock可以实现比较轻量级的简单的定时任务,也可以实现分布式锁,那具体的原理是啥?一探究竟不熟悉的同学可以先看一下用法:https://www.baeldung.com/shedlock-spring大概就是定义一个数据表注意这里的name是primary key,是不可重复的。利用了primary key的这个特性,实现了锁的抢占。细节下面会介绍然后加注解实现:看源码直接从注解出发,看源码在注解所在的包内发现一个DefaultLockManager一看原创 2020-06-04 18:46:17 · 5842 阅读 · 2 评论 -
基于mysql实现分布式锁
维护一个锁表CREATE TABLE `dist_lock`( `id` bigint PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '自增主键', `resource_name` varchar(64) NOT NULL DEFAULT '' COMMENT '资源名字', `node_info` varchar(64) NOT NULL DEFAULT ''原创 2020-06-01 14:53:52 · 385 阅读 · 0 评论 -
redis实现分布式锁 单实例情况 多实例情况 RedLock
背景如何用redis实现分布式锁参考https://redis.io/commands/setnx其实redis官网直接就有介绍。注意1、Redlock算法里不推介以下做法;Redlock算法实现起来只是稍微难一丢丢,但是提供了更好的保证,以及容错能力。2、但是我们还是介绍一下这个老办法。3、假设是单实例的,2.6.12版本开始,可能更简单地实现锁,相当于这里讨论的,使用set命令获取锁,再加上简单的Lua脚本来释放锁。这个模式在set命令里有介绍。也就是说,SETNX可以被使用,历史上也原创 2020-05-27 19:00:38 · 872 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-内存的数据如何持久化到硬盘
问题带着问题撸源码系列-zookeeper-内存的数据如何持久化到硬盘猜测这种一般都是有个定时任务往硬盘写吧源码原创 2020-05-19 17:48:30 · 259 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-datatree是什么鬼?
问题带着问题撸源码系列-zookeeper-datatree是什么鬼?源码直接看源码就好了其实就是一个树形结构里面先保存了所有的DataNodeKey是节点路径,如/p1/c1,value就是对应的DataNode。DataNode:用一个Set<String>保存这个节点的孩子。String,是下一个节点的名字,如当前是/p1/c1,父亲是/p1,那么他的孩子就是c1。...原创 2020-05-19 17:45:52 · 575 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-临时节点[ephemeral]是怎么弄的?我写了一堆临时节点为啥我一掉线就全没了?
问题带着问题撸源码系列-zookeeper-临时节点[ephemeral]是怎么弄的?我写了一堆临时节点为啥我一掉线就全没了?猜测可能是有线程维护着,每个session有一个临时节点列表,一旦客户端不再发心跳就全干掉源码debugrun server 1(follower)debug server 2 (leader)client 请求server2: create -e /t1...原创 2020-05-19 11:18:41 · 1069 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-客户端发写请求,最终怎么通过2PC同步到集群所有机器?
问题带着问题撸源码系列-zookeeper-客户端发写请求,最终怎么通过2PC同步到集群所有机器?猜测we all know the 2PC, but how exactly does it work?理论上,就是leader接收到请求,然后发给Prepare,让小伙伴们准备好,过半数人回复ok了之后,leader回复客户端,然后再发Commit请求让小伙伴们真正提交源码Follower接收到客户端的写请求,会先根据责任链调下一个Processor,然后把写请求转发给Leader。leader原创 2020-05-14 19:06:56 · 296 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-客户端先写后读,怎么保证能读到写的数据?
问题带着问题撸源码系列-zookeeper-客户端先写后读,怎么保证能读到写的数据?猜测从我们的系列文章上一篇:带着问题撸源码系列-zookeeper-客户端发读请求给follower,是转发给leader读还是读自己?分析过程中可以看到,在处理请求的时候,有一些神奇的队列帮助处理这个问题。我们猜测就是通过这些队列,把读请求放在写请求后边。下面让我们来探讨细节吧。读源码由于上一篇:带着问题撸源码系列-zookeeper-客户端发读请求给follower,是转发给leader读还是读自己?原创 2020-05-14 15:33:12 · 594 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-不同的RequestProcessor之间是什么关系,如何协调?
问题带着问题撸源码系列-zookeeper-不同的RequestProcessor之间是什么关系,如何协调?参考思考了颇久实在没找到突破的方法,只好找网上文章找突破口了:添加链接描述读源码在这里配置每个RequestProcessor的关系,先调用哪个再调用哪个:org.apache.zookeeper.server.quorum.FollowerZooKeeperServer#setupRequestProcessors可以看到是可以看到,第一个是FollowerRequestProc原创 2020-05-14 11:42:31 · 287 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-客户端发读请求给follower,是转发给leader读还是读自己?
问题带着问题撸源码系列-zookeeper-客户端发读请求给follower,是转发给leader读还是读自己?猜测读自己就行了吧。不过可能要考虑当前有没有在写之类的。读源码参考写请求的分析还把断点打在消费queue消息这儿设置条件断点,如果是ping(request.type==11)请求咱就不断点了。回答问题...原创 2020-05-13 19:02:49 · 786 阅读 · 4 评论 -
带着问题撸源码系列-zookeeper-客户端发写请求给follower,是转发给leader写?
问题带着问题撸源码系列-zookeeper-客户端发写请求给follower,是转发给leader写?猜测是要转发给leader写预读源码首先得看下在哪接受请求呢?由于之前在带着问题撸源码系列-zookeeper-客户端怎么给sever发请求 有看见clientCnxn,所以我们猜测接收请求是在ServerCnxnBTW, Cnxn是什么鬼????? /** * Interface to a Server connection - represents a connection fr原创 2020-05-13 15:06:27 · 754 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-index
带着问题撸源码系列-zookeeper-源码调试选举过程 附mac环境搭建带着问题撸源码系列-zookeeper-客户端怎么给sever发请求原创 2020-05-13 11:53:17 · 217 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-客户端怎么给sever发请求
问题客户端怎么给server发请求?猜测parse 输入的command 然后通过某种方式发给server。预读代码从客户端main代码org.apache.zookeeper.ZooKeeperMain看起,看下怎么给server发请求的。慢慢追踪到这:org.apache.zookeeper.ZooKeeperMain#processZKCmd就是这里:假设我们现在要发一个create /test实现类就是CreateCommandparse不管看exec函数一通操作后走到了原创 2020-05-13 11:37:43 · 236 阅读 · 0 评论 -
带着问题撸源码系列-zookeeper-源码调试选举过程 附mac环境搭建
参考https://blog.csdn.net/po_lao/article/details/52562590过程从github clone到本地安装ant来编译brew install ant换方式https://juejin.im/post/5c7be8546fb9a049c6449089https://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.13/zookeeper-3.4.13-sources.jar下载原创 2020-05-12 16:37:30 · 346 阅读 · 0 评论 -
ZooKeeper 选举过程 源码
参考:https://www.bilibili.com/video/BV1tt41137sT?p=4 视频中带注释的源码:https://github.com/boomblog/zookeeper-vip1/blob/master/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java 启动 传参 脚本启动的时候 .sh 发现调用了一个类 传入配置文件参数 就启动了 我们可以通过idea 加入参数,也能启动。原创 2020-05-11 17:11:56 · 186 阅读 · 0 评论 -
ZooKeeper ZAB协议 详解
参考:B站大法好:https://www.bilibili.com/video/BV1U5411t7Mp?from=search&seid=11109207762490056623 选举 每个机器保存zxid(日志id),自己的机器id(myid) 选举规则,按照<zxid,myid>排序 zxid大的是老大 zxid相同的情况下,myid大的是老大 初始化: 先说结论: 按机器id顺序启动,中间那个机器是leader details原创 2020-05-09 16:03:08 · 172 阅读 · 0 评论 -
Raft原理:作者亲自上阵讲解
参考视频:https://www.youtube.com/watch?v=vYp4LYbnnW8&feature=youtu.be步骤分解1.Leader选举选一个server当leader检测到crashes,就选个新的leader2.复制Log(正常情况)Leader接受client请求,本地append logleader将log复制到其他server(覆写不一致的地方)3.安全保持logs是一致的只有获得最新的logs的servers可以成为leaderServer翻译 2020-05-09 11:52:39 · 623 阅读 · 0 评论 -
Multi-Paxos Raft 原理 流程
Multi-Paxos1、客户端给server发送command2、server使用paxos协议,选择command3、server等待前一个log entries被applied,然后apply一个新的command到状态机4、server状态机的结果给客户端。解答以下问题:来了一个客户端请求,要用哪个log entry?性能优化:选个leader...原创 2020-05-08 15:34:49 · 441 阅读 · 0 评论 -
Paxos算法 实例 时序图
脑图:里面有好几个算法说明http://naotu.baidu.com/file/584323ee64d5ce77a926915e7752d287?token=4bd4b488beb80e0e下面画个时序图来加深理解以这个实例画时序图https://zh.wikipedia.org/zh/Paxos%E7%AE%97%E6%B3%95#.E5.AE.9E.E4.BE.8B...原创 2019-12-30 21:54:25 · 516 阅读 · 0 评论 -
分布式系统学习
参考https://www.jianshu.com/p/bc764647169c重要原理CAP原理ConsistencyAvailabilityPartition tolerance从理论上证明了这三者无法共存;总是要牺牲一部分。我们实际的系统很多是牺牲了Consistency获取了可用性。实际应用数据库的分布式1.使用主从库。只写主库,主库通知从库,从库读。可能会有主从...原创 2019-06-19 20:51:10 · 119 阅读 · 0 评论