1.1 动物园也要保障安全
zookeeper 是 hadoop 下面的一个子项目,用来协调跟 hadoop 相关的一些分布式的框架,
如 hadoop, hive, pig 等, 其实他们都是动物,所以叫 zookeeper ——“动物园管理员”。动物
园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,
而不是像走在原始丛林里,心惊胆颤的被动物所观赏。为了让各种不同的动物呆在它们应该呆
的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类
和管理,这样我们才能更加放心安全的观赏动物。
1.2 进程内的协调方法
在实际应用中,Zookeeper 主要是针对大型分布式系统进行高可靠的协调。由这个定义我们
知道 zookeeper 是个协调系统,作用的对象是分布式系统。说到协调,我们可以联想到的现
实生活中很多十字路口的交通协管,他们手握着小红旗,指挥车辆和行人是不是可以通行。如
果我们把车辆和行人比喻成运行在计算机中的单元(线程),那么这个协管是干什么的?很多人
都会想到,这不就是锁么?对,在一个并发的环境里,我们为了避免多个运行单元对共享数据
同时进行修改,造成数据损坏的情况出现,我们就必须依赖像锁这样的协调机制,让有的线程
可以先操作这些资源,然后其他线程等待。对于进程内的锁来讲,我们使用的各种语言平台都
已经给我们准备很多种选择。例如在 C#中,最常用的莫过于借助语法糖 lock 构造同步块:
int Withdraw(int amount)
{
if (balance < 0)
{
throw new Exception("Negative Balance");
}
lock(thisLock)
{
if (balance >= amount)
{
Console.WriteLine("Balance before Withdrawal : " +
balance);
Console.WriteLine("Amount to Withdraw : -" + amount);
balance = balance - amount;
Console.WriteLine("Balance after Withdrawal : " +
balance);
return amount;
}