一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于容器的监控实时数据缓存系统及方法与流程

2022-03-01 22:16:25 来源:中国专利 TAG:


1.本发明涉及一种基于容器的监控实时数据缓存系统及方法,属于通信技术领域。


背景技术:

2.随着自动化、信息化技术的发展,工业控制领域的数据呈几何式增长,同时对热点数据的访问呈现出频次高、时延低、可靠性强的特点。目前,业界普遍通过部署分布式缓存来提高热点数据的效率,但是,分布式缓存普遍缺少统一的管理节点元数据方式,同时缺少有效的管理集群节点的方法;另一方面,分布式缓存不能依据集群负载自动调整集群状态及数据分布。


技术实现要素:

3.为解决现有技术的不足,本发明的目的在于提供一种基于容器的地铁监控实时数据缓存系统及方法,解决了现有技术中实时数据缓存效率低,可靠性差的问题。
4.为了实现上述目标,本发明采用如下的技术方案:
5.一种基于容器的监控实时数据缓存系统,包括zk集群、监听/控制节点、迁移队列节点、客户端模块、k8s集群、redis集群、存储节点、热点数据节点:
6.zk集群,主要用于管理redis集群信息和热点数据节点信息、;
7.监听/控制节点,用于接收、处理zk集群通知的信息并依据策略自动生成对应的迁移任务,以及向redis集群、k8s集群下发控制命令并执行迁移任务;
8.迁移队列节点,存储监听/控制节点生成的迁移任务信息;
9.客户端模块,用于缓存路由表、热点数据记录信息,依据策略读写数据;
10.k8s集群,用于提供若干基于docker技术生成的容器节点,并接受监听/控制节点下发的命令执行节点管理;
11.redis集群,接受监听/控制节点下发的命令执行节点管理,向存储节点写入缓存;
12.存储节点,用于在本地部署缓存数据,并刷新数据到磁盘;
13.热点数据节点,用于存储关键字信息,供客户端模块读写操作。
14.进一步地,前述zk集群、监听/控制节点、迁移队列节点和redis集群由基于docker技术生成的容器节点组成。
15.进一步地,前述k8s集群的组成包括至少一台物理机。
16.进一步地,前述存储节点为物理节点。
[0017][0018]
进一步地,前述监听/控制节点部署有zk客户端、mq客户端、redis客户端、监听模块和控制模块;zk集群部署有zk服务;迁移队列节点部署mq消息中间件;redis集群采用clusetr部署模式;热点数据节点部署redis服务、zk客户端;客户端模块部署zk客户端、redis客户端。
[0019]
一种基于容器的监控实时数据缓存方法,包括如下步骤:
[0020]
启动系统,k8s集群基于docker技术预生成若干容器节点;
[0021]
zk集群统一管理信息数据,信息数据包括热点数据节点的元数据信息、路由表信息、热点数据记录信息以及redis集群的元数据信息、路由表信息、负载、槽负载、热点数据信息;
[0022]
监听/控制节点读取zk集群发送的数据,根据数据信息执行策略,自动生成对应的迁移任务,存储在迁移队列节点中,并向redis集群节点、k8s集群节点下发控制命令、执行迁移任务并及时更新zk信息;
[0023]
客户端模块从zk集群获取路由表信息、热点数据记录信息,依据一定策略向各节点读写数据;
[0024]
redis集群节点负责向存储节点写入缓存、定时刷新数据到磁盘。
[0025]
进一步地,前述监听/控制节点由基于docker技术生成的容器节点组成,部署有zk客户端、mq客户端、redis客户端、监听模块和控制模块;
[0026]
zk集群由基于docker技术生成的容器节点组成,部署有zk服务;
[0027]
迁移队列节点由基于docker技术生成的容器节点组成,部署mq消息中间件;
[0028]
redis集群采用clusetr部署模式,包括基于docker技术生成的容器节点组成的容器服务节点队列km、ks,所述km为集群主节点,部署redis服务、zk客户端,所述ks为km对应的备节点,用于同步km数据,部署redis服务、agent代理;
[0029]
热点数据节点包括基于docker技术生成的容器节点组成的容器服务节点队列kh,部署redis服务、zk客户端;
[0030]
客户端模块部署zk客户端、redis客户端。
[0031]
进一步地,前述redis集群节点元数据和热点数据节点元数据均包括:节点唯一标识(uuid)、地址(host)、端口(port)、集群标识(cluster),角色(role)、关联备节点(rel)、节点访问频次(freq),t
span
时间内该节点访问频次(q),状态(status);路由信息表记录redis集群节点路由信息,包括:槽号(slots)、主机(host)、端口(port),节点槽访问频次(freqs),t
span
时间内的该节点槽访问频次(qs);热点数据记录信息包括:关键字(key)、主机(host)、端口(port)。
[0032]
进一步地,前述监听/控制节点读取zk集群发送的数据,根据数据信息执行策略,自动生成对应的迁移任务,并向redis集群节点、k8s集群节点下发控制命令、执行迁移任务并及时更新zk集群信息的步骤包括:
[0033]
系统启动,设置时间段t
span
时间段t
task
,每隔t
span
触发监听/控制节点读取zk集群信息,统计qi和qisj,qi表示t
span
时间内km上i节点的访问频次,qisj表示t
span
时间内km上i节点下j槽的访问频次;计时器每隔t
task
触发监听/控制节点统计qi节点,并执行自动任务生成,其中t
span
《t
task

[0034]
当qi>d2,则对qisj做升序排列保存为q1,q2,...,qm,遍历q1,q2,...,qm中的各数据qc,统计的个数qcount,当qcount《u,则生成热点任务:从k8s获取新的容器节点服务kh,并生成新节点,若新节点中不存在该关键字,则将热点数据复制到新节点;否则生成扩容任务:从k8s获取新的容器节点服务km、ks,使km、ks以主备模式加入redis集群节点,选取满足条件的槽号向量,迁移对应槽到km节点,更新zk集群信息,d2表示第一阈值参数,β
表示调节参数,u表示第一设定值,其中,0<β<1,1≤c≤m,m为i节点下的槽数,表示对q1,q2,...,qm中所有数据求和,
[0035]
当qi<d1,若cluster=0且rel指向i节点的节点存在,则生成删除该节点任务:k8s回收该节点,修改zk集群信息,修改热点数据记录;若cluster=0且rel指向i节点的节点不存在且redis集群节点大于第二设定值,则生成迁移任务:将该节点上的槽数据迁移到访问频次最低的节点,删除并通过k8s回收该节点,d1表示第二阈值参数,且d
1《
d2;
[0036]
当d1≤qi≤d2,若s2》g,则生成换算任务:换算出需要迁移的槽号及所在的节点的信息,迁移该节点下槽数据到对应的剩余节点中,g表示第三阈值参数,其中信息,迁移该节点下槽数据到对应的剩余节点中,g表示第三阈值参数,其中n为集群km个数。
[0037]
进一步地,前述扩容任务中,选取满足条件的槽号向量的方法包括:
[0038]
迭代计算其中1≤j≤m,当acc≥η,0<η<1,通过[q1,q2,...,qj]换算出对应的槽号向量[s
v1
,...,s
vj
],其中s
v1
表示槽号为sv1,表示对q1,q2,...,qm中前j个数据进行求和。
[0039]
进一步地,前述换算任务中换算出需要迁移的槽号及所在的节点的方法包括:
[0040]
将km各节点的qi降序排列,记为p1,p2,...,pn,依次迭代计算通过[p1,p2,...,pj]换算出对应的节点序列n
v1
,...,n
vj
,其中1≤j≤n,当acc1≥80%,表示对p1,p2,...,pn中所有数据求和,表示对p1,p2,...,pn中前j个数据进行求和;
[0041]
将所有槽的qisj升序排列,记为q1,q2,...,qm,其中节点m表示n
v1
,...,n
vj
节点上所有槽的个数,依次迭代计算其中1≤s≤m,当acc2≥40%,通过[q1,q2,...,qs]换算出需要迁移的槽号及所在的节点的信息nas
t
,nas
t
表示a节点上的t槽号,表示对q1,q2,...,qm中所有数据进行求和,表示对q1,q2,...,qm中前s个数据进行求和。
[0042]
进一步地,前述迁移该节点下槽数据到对应的剩余节点中的方法包括:
[0043]
剩余节点序列记为nk,对nk节点的qi做升序排列,并记为l1,...,le,迁移a节点上的槽s
t
到主机host(a1),其中a1=l
(t mod e) 1
,e表示剩余节点序列nk中节点的个数。
[0044]
进一步地,前述方法还包括遍历zk集群目录下的status节点,若zk集群目录下的
status节点已删除,则生成该节点宕机任务。
[0045]
进一步地,前述客户端模块从zk集群获取路由表信息、热点数据记录信息,依据一定策略向各节点读写数据的步骤包括:
[0046]
客户端读操作,若关键字在热点数据记录表中,客户端依据均衡散列的方式依次从kh节点,km节点读取数据,若关键字不在,计算槽号并通过路由表获取主机km信息,从该主机读取数据;
[0047]
客户端写操作,若关键字在热点数据记录表中,客户端写热点数据节点kh,同时通过路由表写集群节点km,若关键字不在,则查询路由表写集群km节点;
[0048]
客户端实时更新km的节点的访问频次和槽访问频次。
[0049]
进一步地,前述redis集群节点负责向存储节点写入缓存、定时刷新数据到磁盘的步骤包括:
[0050]
redis集群节点的ks节点通过代理将数据写入存储节点的本地缓存ecache中,ecache采用map结构存储kv数据,ecache数据定时刷新到磁盘中。
[0051]
本发明所达到的有益效果:
[0052]
1.通过zk集群集中管理各节点的元数据、路由表、热点数据记录表信息,提高节点数据管理的效率;
[0053]
2.通过k8s提供基于容器的节点,提高系统的资源分配效率,节点管理效率;
[0054]
3.监听/控制节点自动生成迁移任务、下发控制执行迁移,调整集群节点的分布和数据的分布,提高了系统的高效率、高可靠性。
附图说明
[0055]
图1是本发明缓存系统设计图;
[0056]
图2是本发明迁移任务自动生成流程图。
具体实施方式
[0057]
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
[0058]
依图1所示,构建监控系统,该系统包括客户端模块、zk集群、监听/控制节点、迁移队列节点、k8s集群、redis集群、存储节点和热点数据节点。
[0059]
其中k8s集群的组成包括至少一台物理机,本实施例中由三台物理机组成。系统启动时k8s集群预生成若干基于docker的容器节点。监听/控制节点由基于docker技术生成的容器节点组成,部署有zk客户端、mq客户端、redis客户端、监听模块和控制模块;zk集群由基于docker技术生成的容器节点组成,部署有zk服务;迁移队列节点由基于docker技术生成的容器节点组成,部署mq消息中间件;redis集群采用clusetr部署模式,包括基于docker技术生成的容器节点组成的容器服务节点队列km、ks,所述km为集群主节点,部署redis服务、zk客户端,所述ks为km对应的备节点,用于同步km数据,部署redis服务、agent代理;热点数据节点包括基于docker技术生成的容器节点组成的容器服务节点队列kh,部署redis服务、zk客户端。其中,zk客户端以程序形式运行主要是与redis服务通讯并执行相关控制操作;redis客户端以程序形式运行,主要与zk服务通讯并执行相关控制操作;mq客户端以
程序形式运行,主要与mq消息中间件通讯并执行相关控制操作;agent代理主要程序形式运行,用于将ks数据写入存储节点。
[0060]
zk集群管理热点数据节点的元数据信息、路由表信息、热点数据记录信息以及redis集群的元数据信息、路由表信息、负载、槽负载、热点数据信息。监听/控制节点的监听模块接受zk集群管理的redis集群和热点数据节点信息,同时计算redis集群节点的负载、槽负载、热点数据信息,基于上述信息处理结果自动生成对应的迁移任务,存储在迁移队列节点中;控制模块订阅迁移消息队列获取迁移任务并向redis集群节点、k8s集群节点下发控制命令并执行迁移任务。
[0061]
存储节点为物理节点,连接redis服务并在本地部署ecache缓存,redis集群的ks节点上部署agent代理,agent代理向存储节点写入数据,并刷新数据到磁盘;物理节点接受agent代理写入的数据。
[0062]
客户端模块部署zk客户端、redis客户端,用于缓存路由表、热点数据记录表,依据策略读写数据,同时更新节点的访问频次信息。
[0063]
redis集群,通过ks节点的agent代理向存储节点写入数据并向zk集群上报信息。
[0064]
基于上述系统,本发明提供一种基于容器的监控实时数据缓存方法,其步骤具体如下:
[0065]
步骤1:zk集群进行数据存储结构的设计并记录相关信息。
[0066]
a.系统启动时,k8s集群预生成若干基于docker技术生成的容器服务节点队列km、ks、kh;其中km为redis集群主节点,ks为km对应的备节点,ks同步km数据,kh为热点数据节点,k8s集群同时生成并初始化监听/控制节点、zk集群、迁移队列节点。
[0067]
b.zk集群的树形存储目录结构存储热点数据节点的元数据信息、路由表信息、热点数据记录信息以及redis集群的元数据信息、路由表信息、负载、槽负载、热点数据信息。其中,节点(包括redis集群节点、热点数据节点)元数据包括:节点唯一标识(uuid)、地址(host)、端口(port)、集群标识(cluster),角色(role)、关联备节点(rel)、节点访问频次(freq),t
span
时间内该节点访问频次(q),状态(status),记为:(uuid,host,port,cluster,role,rel,freq,status,q);路由信息表记录redis集群节点路由信息,包括:槽号(slots)、主机(host)、端口(port),节点槽访问频次(freqs),t
span
时间内的该节点槽访问频次(qs),记为(slots,host,port,freqs,qs);热点数据记录信息包括:关键字(key)、主机(host)、端口(port),记为(key,host,port)。前述的status节点为临时节点,其他节点为永久节点。
[0068]
步骤2:如图2所示,监听/控制节点执行策略,自动生成对应迁移任务。
[0069]
a.系统启动时,设置时间段t
span
和时间段t
task
,每隔t
span
触发监听/控制节点读取zk集群数据,统计km各节点在t
span
内的访问频次qi(i节点访问频次),各节点槽对应的访问频次qisj(i节点j槽的访问频次),并更新zk集群信息;计时器每隔t
task
触发监听/控制节点统计qi,并执行自动任务生成,其中t
span
《t
task

[0070]
b.若zk集群目录下的status节点删除,则表示节点宕机,生成节点宕机任务t(node,down)[host,port,role,rel];
[0071]
c.若qi>d2,表示i节点负载过大,其中d2为第一阈值参数。将i节点上的所有节点槽qisj做升序排列保存为q1,q2,...,qm,其中m为i节点上的槽个数,遍历q1,q2,...,qm中的各
数据qc,统计(其中β为调节参数,0<β<1,1≤c≤m,)的个数qcount,如果qcount《u(u为第一设定值),表示访问集中在少数槽上,生成热点任务t(hotkey,add)[host,port];如果qcount≥u,依次迭代计算其中1≤j≤m,当acc≥η,0<η<1,表示对q1,q2,...q,m中所有数据求和,表示对q1,q2,...q,m中前j个数据进行求和。通过[q1,q2,...,qj]换算出对应的槽号向量[s
v1
,...,s
vj
],其中s
v1
表示槽号为sv1,并把对槽号s
vj
访问量迁移到新的节点副本,生成扩容任务t(node,add)[host,port,s
v1
,...,s
vj
];
[0072]
d.当qi<d1,表示节点负载过低,其中d1为第二阈值参数,且d2》d1,从zk集群遍历元数据信息,寻找cluster=0且rel指向i节点的节点;若存在cluster=0且rel指向i节点的节点,则生成删除节点任务t(hotkey,del)[host,port];若找不到节点cluster=0且rel指向i节点的节点,且redis集群节点大于第二设定值(本实施例中设定值为3),取q
t
=min(q1,..,qn),i≠n,将i节点的槽数据迁移到t节点,生成转移任务t(node,del)[host,port,tohost,toport],其中tohost、toport为t节点host、port信息;
[0073]
e.当d1≤qi≤d2,计算和方差其中n为集群km个数,若s2》g,表示各节点频次访问偏差大,负载不均匀,其中g为第三阈值参数。将km各节点的qi降序排列,记为p1,p2,...,pn,依次迭代计算其中1≤j≤n,表示对p1,p2,...,pn中所有数据求和,表示对p1,p2,...,pn中前j个数据进行求和。当acc1≥80%,通过[p1,p2,...,pj]换算出对应的节点序列n
v1
,...,n
vj
,将所有槽的qisj升序排列,记为q1,q2,...,qm,其中节点m表示n
v1
,...,n
vj
节点上所有槽的个数,依次迭代计算其中1≤s≤m,,表示对q1,q2,...,qm中所有数据进行求和,表示对q1,q2,...,qm中前s个数据进行求和。当acc2≥40%,通过[q1,q2,...,qs]换算出需要迁移的槽号及所在的节点的信息nas
t
,nas
t
表示a节点上的t槽号,其中生成换算任务t(node,transfer)[nas
t
]。
[0074]
步骤3:监听/控制节点执行上述自动生成的迁移任务;
[0075]
a.对于t(node,down)[host,port,role,rel],若role的状态为master,此时rel节点状态上升为master,从k8s获取新的容器节点服务ks,登录ks节点执行命令使ks成为rel节点的slave节点,并更新相应的zk集群信息;若role的状态为slave,则从k8s获取新的容器节点服务ks,登录km节点执行命令使ks成为host节点新的slave节点,并更新相应zk集群信息。
[0076]
b.对于t(node,add)[host,port,s
v1
,...,s
vj
],从k8s获取新的容器节点服务km、ks,登录host节点执行命令使km、ks以主备模式(其中km为主,ks为备)加入集群节点,迁移host节点上的槽s
v1
,...,s
vj
到km节点,更新zk集群信息。
[0077]
c.对于t(hotkey,add)[host,port],从k8s获取新的容器节点服务kh,统计host节点上的热点数据向量hotkey=[k1,k2,...kn],并生成t(hotkey,dwrite)(s,sport,host,port,hotkey),s为新节点的主机信息,sport为新生成节点的端口,同时更新zk集群信息。
[0078]
d.对于t(hotkey,dwrite)(s,sport,host,port,hotkeys),更新zk集群热点数据记录信息,设置s节点的元数据的cluster为0,rel指向host节点,从host主机迁移复制hotkey数据到s节点,如果发现key在s节点中已存在,则丢弃,否则写入s节点。
[0079]
e.对于t(hotkey,del)[host,port],k8s回收host节点,修改zk集群信息,修改热点数据记录。
[0080]
f.对于t(node,del)[host,port,tohost,toport],从host节点迁移所有qs到tohost节点,登录host节点从集群中删除host及其备节点,k8s回收host及其备节点,更新zk集群信息。
[0081]
g.对于t(node,transfer)[nas
t
],假定剩余节点序列nk,对nk节点依据qi做升序排列,并记为l1,...,le。迁移a节点上的槽s
t
到主机host(a1),a1=l
(t mod e) 1
,并更新zk集群,e表示剩余节点序列nk中节点的个数。
[0082]
步骤4:客户端读写上述任务执行完毕后各节点数据。
[0083]
客户端读操作,若关键字在热点数据记录表中,客户端依据均衡散列的方式依次从kh节点,km节点读取数据,若关键字不在,计算槽号并通过路由表获取主机km信息,从该主机读取数据。客户端实时更新km的节点的访问频次和槽访问频次;
[0084]
客户端写操作,若关键字在热点数据记录表中,客户端写热点数据节点kh,同时通过路由表写集群节点km,若关键字不在,则查询路由表写集群km节点。客户端实时更新km的节点的访问频次和槽访问频次。
[0085]
步骤5:存储节点接收ks节点写入
[0086]
redis集群节点的ks节点通过agent代理将数据写入本地缓存ecache中,ecache采用map结构存储kv数据,ecache数据定时刷新到磁盘中。
[0087]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献