1. 分布式系统定义及面临的问题
ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务。
分布式系统定义∶分布式系统是同时跨越多个物理主机,独立运行的多个软件所组成系统。
类比一下,分布式系统就是一群人一起干活。人多力量大,每个服务器的算力是有限的,但是通过分布式系统,由n个服务器组成起来的集群,算力是可以无限扩张的。
优点显而易见,人多干活快,并且互为备份。但是缺点也很明显。想象一下,以一个小研发团队开发软件为例,假设我们有一个5人的项目组,要开始一个系统的开发,项目组将面临如下问题:
图中列举的就是项目组将要面临到的问题,这些问题在日常工作中也是天天发生,并没感觉有多么复杂,但是这是因为人类的大脑是个超级计算机,能够灵活应对这些问题,而且现实中信息的交换不依赖网络,不会因网络延迟或者中断,出现信息不对等,而且现实中对以上问题的处理其实并不严谨,从而也引发了很多问题。想一想,项目中是不是出现过沟通不畅造成任务分配有歧义?是否由于人员离职造成任务进行不下去,甚至要联系离职人员协助?是不是出现过任务分配不合理?类似这样的各种问题,肯定会发生在项目组中。在现实世界,我们可以人为协调,即使出错了,人工补错,加加班搞定就好。但在计算机的世界,这样做是行不通的,一切都要保证严谨