本文主要是记录自己在学习zookeeper源码时候的相关内容,主要研究了从zk启动,到完成leader选举的过程。重点是学习leader选举的过程,想配置文件读取这种只是做了大概的了解以及记录
源码的版本是 3.6.1
Quorum是一种分布式协议,在有N个节点的时候,如果某个提议被超过M个节点认可,则任务该提议通过
本文主要是记录自己在学习zookeeper源码时候的相关内容,主要研究了从zk启动,到完成leader选举的过程。重点是学习leader选举的过程,想配置文件读取这种只是做了大概的了解以及记录
源码的版本是 3.6.1
Quorum是一种分布式协议,在有N个节点的时候,如果某个提议被超过M个节点认可,则任务该提议通过
观察者模式指的是当存在一对多的场景的时候,一个对象发生了状态的变化之后,多个对象能够得到通知并且获得更新。
这个模式在一些pub/sub方式的中间件中很常见,例如消息的发布与订阅,MQTT的pub与sub。
但是如果真正的比较起来,跟pub/sub方式会存在一些区别,pub/sub的方式中,生产者和消费者中间还有一个broker,也就是说生产者和消费者之间是互相不知道的,生产者只负责生产数据给broker,而消费者只管去broker取数据。观察者模式的话,生产者在产生数据的时候,是会直接通知到消费者的
对于其中的产生变化的对象,我们可以把它称为生产者,而关注变化的对象,我们称为消费者。
在实际的场景中,该设计模式也是很常见。例如我们有 有一个服务是负责库存的,有好几个服务是会依赖库存的数据的,当库存产生数据的时候,他们需要被通知到,并且进行自己的业务处理。
1 | public class SingletonDemo { |
ConcurrentHashmap整体跟hashmap差不多,主要的区别是线程安全,并且不支持key和value为null
ConcurrentHashmap在插入元素的时候会使用synchronized,保证了写的线程安全。在扩容的时候,将表划分成一个个独立的区域,然后每个执行transfer的线程各自负责一个区域,在保证了线程安全的情况下能提高扩容的效率。
1 | public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> |