摘要:
zookeeper客户端主要负责与用户进行交互,将命令发送到服务器,接收服务器的响应,反馈给用户。主要分为一下三层: 用户命令处理层 用户命令处理层的功能是读取用户输入的命令,解析用户命令和输入参数,根据命令和参数,进行一些校验,然后执行节点操作。 源码实例(ZooKeeperMain): 1 pu 阅读全文
摘要:
并发程序的构建 大多数的并发程序都是通过“任务执行”来构造的,任务通常是一些抽象且离散的工作单元。将业务逻辑抽象城一个个的任务,交给不同线程来并发执行。java中可以通过Runnable来定义任务单元,通过Thread以独立的线程执行。线程是比较宝贵的资源,需要合理的复用、管理、分配、执行。线程池管 阅读全文
摘要:
容器类中提供的ArrayList、HashMap、HashSet不是线程安全的,并发包下提供了类似功能的线程安全的集合。 队列是一种数据结构,它以一种先进先出的方式管理数据。如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞。 队列操作: 数组实 阅读全文
摘要:
zookeeper底层通过NIO进行网络传输,如果对NIO不是很熟悉,先参见java NIO。下面我们来逐步实现基于NIO的zookeeper实现,首先我们要定义应用层的通信协议。 传输协议 请求协议格式: 响应协议格式: 请求和响应体类型: List<String> children 1.将请求封 阅读全文
摘要:
zookeeper为了防止,系统宕机或重启导致的数据丢失,会对数据进行定时持久化。有两种持久化方式: 1.为每次事务操作记录到日志文件,这样就可以通过执行这些日志文件来恢复数据。 2.为了加快ZooKeeper恢复的速度,ZooKeeper还提供了对树结构和session信息进行数据快照持久化的操作 阅读全文
摘要:
这一节我们主要来看一下zookeeper文件系统的实现。 树结构 为了提高对指定节点的操作,zookeeper使用一个HashMap来存储树结构数据,key为数据路径,value为节点数据。 树节点(DataNode) 1 public class DataNode implements Recor 阅读全文
摘要:
上一节中讲到了HystrixCommand有四种执行方法,这一节就来讲一下这四种方法直接的关系以及他们的实现。 execute方法使用同步方式获取结果,本质是调用了queue方法获取了一个Future,然后通过该Future获取返回结果。 queue方法通过异步方式活动结果,本质是通过toObser 阅读全文
摘要:
这一节我们开始了解hystrix执行的主流程,在讲解主流程之前,我们先来看一下怎么使用hystrix。 引入jar 继承HystrixCommand public class HelloWorldHystrixCommand extends HystrixCommand { public Hello 阅读全文
摘要:
这一节我们来讲hystrix的properties配置体系,properties配置也是各个功能模块的基础功能。hystrix将配置分成三个部分: 1.HystrixCommandProperties用于HystrixCommand配置,一个HystrixCommandKey对应一个HystrixC 阅读全文
摘要:
讲完metrics我们就来了解一下熔断器的执行情况,熔断器的判断取决metrics数据。 hystrix在执行命令前需要经过熔断器判断,如果服务被熔断,则执行fallback流程,熔断判断逻辑如下: 命令执行失败后逻辑如下: 如果熔断标识为half_open,并重新计算短路窗口期(记录当前时间)。 阅读全文