本章概要:
首先对ZooKeeper进行一个整体上的介绍,包括ZooKeeper的设计目标、由来以及它的基本概念,然后将会重点介绍ZAB这一ZooKeeper中非常重要的一致性协议。

1. 初识ZooKeeper

1.1 ZooKeeper介绍

ZooKeeper由雅虎创建,是Chubby的开源实现。设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

阅读全文 »

前章提要:
主要从理论上讲解了Paxos算法,如何在保证数据一致性的情况下兼顾稳定性和性能也是一个巨大的挑战。从本章开始,我们将结合实际工程实际中的Paxos实现, 来讲解如何真正地使用Paxos算法来解决分布式一致性问题。

1. Chubby

Google Chubby是一个大名鼎鼎的分布式锁服务,GFS和Big Table等大型系统多用它来解决分布式协作、元数据存储和Master选举等一系列与分布式锁服务相关的问题。 Chubby的底层一致性实现就是以Paxos算法为基础的,这给Paxos算法的学习者提供了一个理论联系的范例,从而可以了解到Paxos算法是如何在实际工程中得到应用的。

阅读全文 »

前章提要:
上章我们讲到分布式往往会在系统可用性和数据一致性之间反复权衡,于是就产生了一系列的一致性协议(为什么没有可用性协议?博主认为,数据才是王道)。

1. 2PC和3PC

在分布式系统总,每一个机器节点虽然都能够明确地知道自己在进行事务操作过程中的结果是成功或失败,但却无法直接获取到其他分布式节点的操作结果。 因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性(某个节点为单位),就需要引入一个称为“协调者(Coordinator)” 的组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为“参与者(Participant)”。

阅读全文 »

1. 从集中式到分布式

1.1 集中式的特点

所谓的集中式系统就是指由一台或多台主计算机组成中心节点,数据集中存储于这个中心节点,并且整个系统的所有业务单元都部署在这个中心节点上, 系统的所有功能均由其集中处理。也就是说,在集中式系统中,每个终端或客户端机器仅仅负责数据的录入和输出,而数据的存储与控制处理完全 交由主机来完成。

阅读全文 »

如何挖掘出 Java 线程和同步设施的最大性能


1 线程池与 ThreadPollExecutor

Java EE 应用服务器就是围绕用一个或多个线程池处理请求这一概念构建的:对服务器上 Servlet 的每个调用都是通过池中的线程处理的(也有可能不同)。类似的,其它应用可以使用 Java 的 ThreadPoolExecutor 并行执行任务。

阅读全文 »

0 CPU 使用率

使用 vmstat 命令查看 CPU 使用率,即 us\sy\id 三个参数,用户、系统、空闲使用 CPU 的时间。

  1. 检查应用性能时,首先应该审查 CPU 时间(尤其是多线程,CPU 的上下文切换报告)
  2. 优化代码的目的是提升而不是降低(更短时间段内的)CPU 使用率。
  3. 在试图深入优化应用前,应该先弄清楚为何 CPU 使用率低。
阅读全文 »