CacheMode基于内存buffer的Issuer架构如图所示,也是我目前正在维护的Issuer之一。优点:1.级别易于扩展2.对高并发的支持很好3.数据库依赖性低,只需要在缓冲区耗尽时请求数据库,连接失败时仍然可以长时间发号4.服务目前支持step发送返回的id格式符合id=startID+idStep*n5。该业务支持一次获取多个号码,性能与单个号码类似。缺点:1.在集群的情况下,数量是呈趋势发放的,而不是严格递增的(呈趋势递增是指ID整体递增且唯一递增,但严格来说不是id的区别两次下发号码之间为1,例如两台服务器A持有1001-2000,B持有2001-3000,服务重启后,未使用的号码段失效实现:服务作为worker工作,对应一个serviceID以服务A为例,服务A初始化,创建一个worker,访问数据库,根据max_id获取2个数字段,填充到内存缓冲区中,数字段段驻留在内存中,number段数据结构为[startID,currentID,MAXID],之后每次取数,只访问和修改currentID,有锁机制保证线程安全,一个number段用完后,使用go通道获取buffer.新号码段,同时服务会生成新号码段并填充到缓冲区中,保证缓冲区中始终有2个号码段(可配置)。服务期间,除初次启动外,请求不依赖数据库,数据库连接失败后仍可继续发送。在一个较长时间段的服务周期内(取决于数段step_size的长度和服务请求量),所有请求只经历内存访问延迟,buffers擦除数据库延迟
