服务集群作用:分解压力、在一定程度上打破性能瓶颈,提高系统的可用性。
分布式系统:每台机器都跑着同一个应用程序的一部分,彼此之间通过网络连接起来,构成一个系统来为用户提供服务,对用户来说,这个系统是透明的,他们感觉不到这个系统是怎样的一种架构。
分布式系统的问题:
1)怎么保证所有机器共享的配置信息(数据库配置、黑名单、服务地址列表等)保持一致
2)如果有一台机器挂掉了,其他机器如何感知到这一变化并接管任务?如果用户激增,需要增加机器来缓解压力,如何做到不重启集群而完成机器的添加?
3)用户数量增加或者减少,会出现有的机器资源使用率繁忙,有的却空闲,如何让每台机器感知到其他机器的负载状态从而实现负载均衡?
4)在一台机器上要多个进程或者多个线程操作同一资源比较简单,因为可以有大量的状态信息或者日志信息提供保证,比如两个A和B进程同时写一个文件,加锁就可以实现。但是分布式系统怎么办?需要一个三方的分配锁的机制,几百台worker都对同一个网络中的文件写操作,怎么协同?还有怎么保证高效的运行?
ZooKeeper:
ZooKeeper用來解决分布式应用中经常遇到的一些数据管理的问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项管理等。简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
ZooKeeper的目标就是封装好复杂 易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Zab协议
布式锁、配置维护、组服务
znode:zookeeper的数据结构
原语:在数据结构的基础上定义的一些原语
Watcher机制:ZooKeeper服务是通过网络以消息的形式发送给其他的应用程序。
ZooKeeper所提供的服务主要是通过:数据结构+原语+watcher机制,三个部分来实现的。