本文共 860 字,大约阅读时间需要 2 分钟。
JDK在1.5版本之后,提供了java.util.concurrent包,其中java.util.concurrent.atomic子包中包含了对于单一变量的线程安全的支持lock-free的编程实现。该包中的类,比如AtomicLong
,提供了和Long类型相对应的原子化操作,比如一些increment方法,基于这些功能,是可以开发出单JVM的序列生成器这样的功能的,但是对于分布式环境,则无能为力。
在Ignite中,除了提供标准的基于键-值的类似于Map的存储以外,还提供了一种分布式数据结构的实现,其中包括:IgniteAtomicLong
, IgniteSet
, IgniteQueue
, IgniteAtomicReference
, IgniteAtomicSequence
, IgniteCountDownLatch
, IgniteSemaphore
,这些类除了提供和JDK相同的功能外,就是增加了对分布式环境的支持,也就是支持集群范围内的原子化操作。
鉴于本文重点是讨论分布式ID生成器,所有下文的重点在于IgniteAtomicSequence。
\IgniteAtomicSequence接口提供了分布式的原子性序列,类似于分布式原子性的Long类型,但是他的值只能增长,他特有的功能是支持预留一定范围的序列值,来避免每次序列获取下一个值时都需要的昂贵的网络消耗和缓存更新,也就是,当在一个原子性序列上执行了incrementAndGet()(或者任何其他的原子性操作),数据结构会往前预留一定范围的序列值,他会保证对于这个序列实例来说跨集群的唯一性。
这个类型的使用是非常简单的,相关代码如下:Ignite ignite = Ignition.start();\IgniteAtomicSequence seq = ignite.atomicSequence(\"seqName\
转载地址:http://uvhsa.baihongyu.com/