IOTXING

记录技术学习之路

0%

本文主要是记录自己在学习zookeeper源码时候的相关内容,主要研究了从zk启动,到完成leader选举的过程。重点是学习leader选举的过程,想配置文件读取这种只是做了大概的了解以及记录
源码的版本是 3.6.1

Quorum是一种分布式协议,在有N个节点的时候,如果某个提议被超过M个节点认可,则任务该提议通过

Read more »

使用方法

  • 创建RateLimiter

    1
    RateLimiter ra = RateLimiter.create(2000);  //创建一个2000/s的限速
  • 使用的时候,去acquire

    1
    2
    3
    4
    while (true){
    ra.acquire();
    xxx
    }
Read more »

观察者模式指的是当存在一对多的场景的时候,一个对象发生了状态的变化之后,多个对象能够得到通知并且获得更新。

这个模式在一些pub/sub方式的中间件中很常见,例如消息的发布与订阅,MQTT的pub与sub。

但是如果真正的比较起来,跟pub/sub方式会存在一些区别,pub/sub的方式中,生产者和消费者中间还有一个broker,也就是说生产者和消费者之间是互相不知道的,生产者只负责生产数据给broker,而消费者只管去broker取数据。观察者模式的话,生产者在产生数据的时候,是会直接通知到消费者的

对于其中的产生变化的对象,我们可以把它称为生产者,而关注变化的对象,我们称为消费者。

在实际的场景中,该设计模式也是很常见。例如我们有 有一个服务是负责库存的,有好几个服务是会依赖库存的数据的,当库存产生数据的时候,他们需要被通知到,并且进行自己的业务处理。

Read more »

懒汉模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class SingletonDemo {

private static volatile SingletonDemo instance;

private String value;

public static SingletonDemo getInstance() {
if (instance == null) {
instance = createInstance();
}
return instance;
}

private static SingletonDemo createInstance() {
return new SingletonDemo();
}

private SingletonDemo() {
}
}
Read more »

背景

工作的时候做了一个agent,需要进行构建打包,上传到oss,然后分发到各个机器。
该操作跟一般的应用不同,因此无法通过已有的发布系统来进行操作,因此自己只能另外单独做一个CI/CD系统。
主要涉及以下技术:

  • Jenkins (主要执行构建,打包,上传OSS)
  • Ansible (执行具体的机器上面的操作,使用playbook来实现具体步骤)
Read more »

背景

前文我们设置了jenkins 的pipeline,并且接受调用方传过来的参数,现在我们实现具体的CD操作,也就是把产物传到目标机器,并且停止老应用,启动新应用。
一般而言CD会包含以下的步骤

  • 登录目标机器
  • 备份原有文件
  • 下载目标文件
  • 停止原有进程
  • 启动新的进程
Read more »

背景

有个controller,里面有个方法,在使用public修饰的时候,能够拿到类中定义的属性,在使用private的时候,取到的属性为null

调查

为public的时候,调试信息如下

public

其中的this对象,是正常的controller对象,并且agentBizService能够拿到正常的值,工作正常

当为private的时候,调试信息如下

private

能够发现this对象明显不一样。并且agentBizService 为null。

Read more »

背景

今天在写单测的时候,会涉及到测试多线程的部分,但是在测试的时候发现现象会诡异
子线程的逻辑还没有执行的时候,jvm就会退出,或者有的时候执行了一小部分,就会退出了。

Read more »

InterProcessMutex 分布式锁

InterProcessMutex是常用的一个使用ZK的分布式锁,它会在我们指定的前缀下面创建类型为有序临时的临时节点,然后序号最靠前的节点会获取到锁。
如果某个持有锁的线程挂了之后,对应的节点就会被删除,如果这时候有线程在等待锁,就会获取到锁

Read more »


ConcurrentHashmap

ConcurrentHashmap整体跟hashmap差不多,主要的区别是线程安全,并且不支持key和value为null
ConcurrentHashmap在插入元素的时候会使用synchronized,保证了写的线程安全。在扩容的时候,将表划分成一个个独立的区域,然后每个执行transfer的线程各自负责一个区域,在保证了线程安全的情况下能提高扩容的效率。

1、族谱

1
2
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable {
Read more »