漫画 | 这该死的分布式!
张大胖所在的公司这几年发展得相当不错,业务激增,人员也迅速扩展。
张大胖也锐意进取,坐上了架构师的“宝座”。
随着技术的发展,公司的IT系统早已从单机转向了分布式, 分布式带来了巨大的挑战。
周一上班,找张大胖的人就络绎不绝。
张大胖一看这个图就明白怎么回事了,为了支持高并发,OrderService被部署了4份,每个客户端都保存了一份服务提供者的列表,但是这个列表是静态的(在配置文件中写死的)!
如果url_3所在的机器down了,或者新增了一个url_5,客户端根本不知道,可能还在傻乎乎地尝试那些已经坏掉的实例呢!
张大胖想到,应该有个注册中心,首先给这些服务命名(例如orderService),其次那些OrderService 都可以在这里注册一下。
不知道是不是下意识的行为,张大胖把这个注册中心的数据结构设计成为了一个树形结构。
当然需要在注册中心和各个服务实例直接建立Session, 让各个服务实例定期地发送心跳,如果过了特定时间收不到心跳,就认为这个服务实例挂掉了,Session 过期, 把它从树形结构中删除,客户端就查不到了。
小梁前脚离开, 小王就风风火火地来了。
为了高可用,一个Batch Job在三台机器上部署了三份,但是同一个时刻只能有一个运行!
如果其中某个不幸down掉,剩下的两个就需要做个选举,选出来的那个Batch Job 需要“继承遗志”,继续工作。
小王很聪明, 他立刻就明白了怎么回事。
当前Master的机器挂掉的时候,需要把/master给删掉。
很明显,注册中心也需要和各个机器通信,看看他们是否活着。
这里还有一个复杂的情况, 如果机器1并没有死掉,只是和注册中心长时间连接不上。
实际上机器1如果无法联系注册中心了,需要停止Batch Job才行,否则就可能和别人冲突。
等到和注册中心再次连接上以后,才知道自己已经不是master了,老老实实地等下一次机会吧。
小王刚走, 小蔡马上就闪了进来。
张大胖一想果然是这样,看来是小瞧这个问题了,分布式锁不是Master选举, 得考虑公平问题。
系统1持有了锁,就可以对共享资源进行操作了, 操作完成以后process_01这个节点删除, 再创建一个新的节点(编号变成process_04了)
这样循环往复下去...... 分布式锁不就实现了?
张大胖决定去向CTO Bill 汇报,组织人力进行开发。
没想到Bill一针见血,一下子就指出了重大缺陷。
这个注册中心也得有多台机器来保证高可用啊!
小王、小梁、小蔡的原始问题没有解决,单单是这个注册中心就要了命了。以自己公司的技术实力,搞出一套这样的注册中心简直是不可能完成的任务!
Zookeeper 有这些核心的概念:
1. Session :表示某个客户系统(例如Batch Job)和ZooKeeper之间的连接会话, Batch Job连上ZooKeeper以后会周期性地发送心跳信息, 如果Zookeeper在特定时间内收不到心跳,就会认为这个Batch Job已经死掉了, Session 就会结束。
2. znode : 树形结构中的每个节点叫做znode, 按类型可以分为永久的znode(除非主动删除,否则一直存在),临时的znode(Session结束就会删除)和 顺序znode(就是小蔡的分布式锁中的process_01,process_02.....)。
3. Watch :某个客户系统(例如Batch Job)可以监控znode, znode节点的变化(删除,修改数据等)都可以通知Batch Job, 这样Batch Job可以采取相应的动作,例如争抢着去创建节点。
更多精彩漫画,尽在码农翻身!
漫画 | 这该死的分布式!相关推荐
- 漫画:什么是分布式锁
转载自 漫画:什么是分布式锁 分布式锁的实现有哪些? 1.Memcached分布式锁 利用Memcached的add命令.此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程 ...
- 漫画:什么是分布式事务
转载自 漫画:什么是分布式事务? ----- 第二天 ----- ------------ 假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交 ...
- 漫画:什么是分布式事务?
点击上方"程序员小灰",选择"置顶公众号" 有趣有内涵的文章第一时间送达! ----- 第二天 ----- ------------ 假如没有分布式事务 在 ...
- (转)漫画:什么是分布式事务?
转自: https://blog.csdn.net/bjweimengshu/article/details/79607522 假如没有分布式事务 在一系列微服务系统当中,假如不存在分布式事务,会发生 ...
- 该死webgl_太该死了
该死webgl It's very hot and sticky here, I'm from the North, I don't recollect it ever getting close t ...
- 分布式服务常见问题—分布式事务
原文作者:程序员小灰 原文地址:漫画:什么是分布式事务? 有趣有内涵的文章第一时间送达! ----- 第二天 ----- 假如没有分布式事务,在一系列微服务系统当中,假如不存在分布式事务,会发生什 ...
- 聊聊redisson的分布式锁
序 本文主要研究一下redisson的分布式锁 maven <dependency><groupId>org.redisson</groupId><artif ...
- 程序员小灰2017-2019年原创汇总
目录 2019 年汇总 2018 汇总 2017 汇总 2019 年汇总 算法 漫画:寻找无序数组的第k大元素(修订版) 漫画:如何将一个链表"逆序"? 漫画:什么是加密算法? 漫 ...
- 程序员小灰灰专栏收集
漫画:如何将一个链表"逆序"? 漫画:如何实现抢红包算法? 漫画:什么是volatile关键字?(整合版) 漫画:什么是单例模式?(整合版) 漫画:什么是 CAS 机制? 漫画:什 ...
最新文章
- img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...
- PHP构建数据结构填充数据
- linux写一个脚本杀进程,linux下如何自动检测并重新启动一个死掉的进程,然后再把它杀死:)(shell脚本实现)...
- Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法
- 使用 Mesos 管理虚拟机
- Gaze Estimation笔记——data normalization
- 公差基本偏差代号_508/f7:基本偏差怎么查,标准公差又怎么查?
- 超键、候选键、主键、外键区别?
- 大学生慕课第二周学习笔记
- Node.js与V8引擎
- HDU_1874_畅通工程续_最短路问题
- [转]如何用SQL命令修改字段名称
- vi编辑器复制删除常用命令
- 三维空间点到直线的距离C++实现
- vue-amap使用教程
- cmd从网站上下载指定文件
- HFSS - 半波偶极子天线的设计与仿真
- 开三个iframe不断刷访问量
- 关于架构师:角色、能力和挑战
- C语言的自动关机程序和一个用来整人的小程序