Zookeeper深入理解(二)(编程实践之Master-Worker)

作者:JerryXia | 发表于 , 阅读 (0)
Zookeeper提供了一个创建句柄的构造器/*** connectString: server列表,如127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184* sessionTimeout: 如果Server超过该时间(毫秒)没能和Client通信,Server将关闭此次会话,通常为5 ~ 10秒。* watcher: 用于接收Session事件,该事件会在会话建立,关闭或过期时产生,Client也可以用于监控Zookeeper数据变化。*/ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)...阅读全文

ElasticSearch初探

作者:JerryXia | 发表于 , 阅读 (0)
单个索引本质上可以存储大量数据(可能超出单个节点的硬件限制),比如,一个索引里包含了十亿个文档,并占用了1TB磁盘空间,这将不利于单个节点提供查询服务。为了解决这种问题,ElasticSearch具有将索引细分为多个分片(Shards)的能力。当你创建索引时,可以定义想要的分片数。分片即是一个具有独立功能的"索引",可以位于集群中的任何节点上。分片主要有两个原因:
1. 水平分割扩展容量。2. 跨分片(本质是节点)分发和并行操作,因此提升性能和吞吐量。
分片如何被分布以及它的文档如何被聚合到搜索请求中,都被ElasticSearch隐藏起来,对用户完全透明。在分布式网络环境中,故障任何时候都可能发生,通过分片实现容错机制是十分有用并被推荐的。为此,ElasticSearch允许对索引分片进行备份,即备份分片。备份主要有两个原因:
1. 当分片失败时提供高可用,需要注意备份分片永远不会和其主分片分配在同一节点上。2. 这将扩展集群的搜索吞吐量,因为所有搜索可以在备份分片上并行执行。
大致的总结就是每个索引可以分割为多个分片,也可以有0个或多个备份,一旦备份,每个索引将有主分片和备...阅读全文

Zookeeper深入理解(二)(编程实践之故障处理)

作者:JerryXia | 发表于 , 阅读 (0)
Zookeeper会对所有连接它的Client表现出一致的状态,当一个Client收到Zookeeper的一个响应时,它会相信其他Client收到的响应将是一致的,但如果ZK Client Library与Zookeeper服务断开连接,将不能再保证信息的一致性,这时ZK Client Library将发布Disconnected事件和ConnectionLossException异常。当然,ZK Client Library会尽力尝试摆脱这种情形,它将持续尝试连接另一个Server,直到和Server重新建立连接,一旦会话建立,Zookeeper将生成SyncConnected事件并开始处理请求,这是Zookeeper将重新注册之前注册的监听器,并且对于在连接断开期间发生的变化,生成监听事件。典型的Disconnected事件和ConnectionLossException异常都是Zookeeper服务器故障。下图阐述了这种问题如果Client没有任何待处理的请求,Connection Loss很少会中断Client,除了发生Disconnected事件,接着SyncConnecte...阅读全文

Zookeeper深入理解(一)(概念及基础)

作者:JerryXia | 发表于 , 阅读 (0)
前两天被问到有关Zookeeper的一些问题,但确没有很好的回答上来。之前也接触过Zookeeper,比如使用其Watcher实现一些通知,或者Leader选举功能,也可以作为如Dubbo服务框架的注册中心等,但是对Zookeeper的运作原理等是不太了解的,也没有认真仔细研究过,特此希望通过阅读和记录文章,深入理解一番Zookeeper,觉得其中很多分布式的思想,会对自己有很大的帮助。
资源网上比较完整统一的资料不是很多,很多文章感觉也说得不是很清楚,或者版式体验真不太好。主要就找到两本书籍,一本英文,一本才出不久的中文,第二本还在路上,就先用第一本过过瘾。这本英文书主要就三个部分,所以希望能用几篇文章来记录,还有个地方就是官网。...阅读全文

Zookeeper深入理解(二)(编程实践之高级API:Curator)

作者:JerryXia | 发表于 , 阅读 (0)
监听器将处理Curator库生成的事件,我们仅需要将通过Curator客户端注册这些监听器即可。我们需要实现一个CuratorListenerCuratorListener masterListener = new CuratorListener() {public void eventReceived(CuratorFramework client, CuratorEvent event) {try {switch (event.getType()) {case CHILDREN://...break;case CREATE://...break;case DELETE://...break;case WATCHED://...break;}} catch(Exception e){//......阅读全文