基于共享内存kvmap实现的高速服务注册系统及方法与流程

未命名 09-17 阅读:101 评论:0


1.本发明涉及共享内存技术领域,特别涉及一种基于共享内存kvmap实现的高速服务注册系统及其方法。


背景技术:

2.随着业务的发展,用户量日益上升,单一的系统越来越复杂,越来越庞大,单纯的提升服务器性能始终有跟不上需求的一天,因此我们可以通过分布式技术,例如:服务器集群,水平业务划分,应用分解,系统分流,微服务架构等方式来解决系统性能问题和复杂业务问题。
3.目前的服务注册与发现系统,都是通过http、tcp等网络封装的接口进行访问的,其读写效率较低,尤其是读取的qps有较大的瓶颈,无法满足企业对于部分服务注册发现系统需要达10-100w级别的读写访问的需求,稳定性差,本技术因此而研发。


技术实现要素:

4.针对现有技术存在的问题,本发明提供一种基于共享内存kvmap实现的高速服务注册系统及其方法。
5.为了实现上述目的,本发明提供一种基于共享内存kvmap实现的高速服务注册系统,包括:注册中心模块、共享内存kvmap模块;
6.所述注册中心模块用于将信息写入共享内存kvmap模块中,且将实际值存储在共享内存kvmap模块中;所述普通节点与注册中心的访问则通过云端负载均衡clb进行;
7.所述注册中心模块包括注册中心、多个普通节点;
8.所述注册中心用于将注册信息下发到各感兴趣的多个普通节点;
9.每一所述普通节点均通过封装的sdk的读取注册信息,并将注册信息自动注册到注册中心;
10.所述共享内存kvmap模块包括共享内存池模块、跳表结构;所述跳表结构用于储存共享内存池模块的地址。
11.优选的,所述注册中心包括注册中心一和注册中心二;所述注册中心一和注册中心二互为备份。
12.优选的,所述共享内存池模块存储有kvmap的key值和value值。
13.优选的,所述跳表结构中的pair-first存储有key值在共享内存池中的地址,pair-second存储有value值在共享内存中的地址。
14.优选的,所述跳表结构中的pair-first的大小比较,并不是通过key-地址比较,而是通过取出共享内存池中的key值之后进行比较的。
15.本发明还提供一种基于共享内存kvmap实现的高速服务注册的方法,其特征在于,包括如下步骤:
16.步骤s1:普通节点应用程序将信息传送到注册中心;
17.步骤s2:注册中心通过写锁将信息写入到跳表结构中,并将实际值存储在共享内存池中;
18.步骤s3:注册中心通过读锁将key和value值信息读取到缓存中,然后下发消息到普通节点;
19.步骤s4:普通节点通过写锁信息写入到跳表结构中,并将实际值存储在共享内存池中;
20.步骤s5:最后普通节点上应用程序通过读锁将信息跳从跳表结构中读取出来,完成信息的获取。
21.优选的,所述步骤s1、步骤s3中普通节点和注册中心均通过tcp/ip协议进行信息传递。
22.优选的,所述步骤s2与步骤s4中的数据存储方法相同,其中步骤s2中数据存储方法为:
23.步骤s201:对待存储数据进行处理,并解析出对应的key和key对应的value值;
24.步骤s202:存储待存储数据的key值于共享内存池,并获取待存储数据的key值的存储地址addr1;
25.步骤s203:存储待存储数据的value值于共享内存池,并获取待存储数据的value值的存储地址addr2;
26.步骤s204:将存储地址addr1和存储地址addr2存储于跳表结构中。
27.优选的,所述步骤s3、步骤s5中的数据读取方法相同,其中步骤s3中数据读取方法为:
28.步骤s301:若收到对待读取数据的读取命令时,读取跳表结构中的待存储数据的key地址addr1;
29.步骤s302:将共享内存池中取出的key值与待读取的key值进行比较,直到获取一样的待读取的key值;
30.步骤s303:根据待存储数据的key的赋值中的存储地址addr2,从共享内存池中取出对应的value值。
31.采用本发明的技术方案,具有以下有益效果:
32.本发明通过将待注册的服务信息传输至注册中心,注册中心将信息同步至各服务节点,由于该信息由于是存储在kvmap结构的共享内存中,各节点访问信息经通过封装的c/c++库进行读取,因此较其它通过tcp或http等接口访问的服务注册与发现系统性能高出一个量级(原因是:对于计算机而言,内存的读取速度远高于通过网络接口读取的速度)。
33.本发明通过自研的共享内存kvmap的服务注册与发现系统能轻松满足了企业对于部分业务需要达10-100w qps量级的访问要求,且其访问的稳定性高,不依赖与网络性能。
附图说明
34.图1为本发明注册中心模块、跳表结构、共享内存kvmap模块的关联图;
35.图2为本发明注册中心与普通节点交互图;
36.图3为本发明共享内存kvmap模块结构示意图;
37.图4为本发明高速服务注册方法流程图;
38.图5为本发明数据存储实现流程图;
39.图6为本发明数据读取实现流程图。
具体实施方式
40.以下结合附图和具体实施例,对本发明进一步说明。
41.参照图1至图6,本发明提供一种基于共享内存kvmap实现的高速服务注册系统,包括:注册中心模块、共享内存kvmap模块;
42.所述注册中心模块用于将信息写入共享内存kvmap模块中,且将实际值存储在共享内存kvmap模块中;
43.所述注册中心模块包括注册中心、多个普通节点;
44.所述注册中心用于将注册信息下发到各感兴趣的多个普通节点;
45.每一所述普通节点均通过封装的sdk的读取注册信息,并将注册信息自动注册到注册中心;所述普通节点与注册中心的访问则通过云端负载均衡clb进行;所述注册中心包括注册中心一和注册中心二;所述注册中心一和注册中心二互为备份;
46.所述共享内存kvmap模块包括共享内存池模块、跳表结构;所述跳表结构用于储存共享内存池模块的地址。
47.本实施例中高速服务注册与发现系统,是基于kvmap的共享内存实现,进程通过封装的库接口直接访问内存,其速度远超http和tcp等封装的接口访问;为了实现不定长的key-value的map结构,并且实现插入、查询、删除达到o(1)的速度,将不定长key在共享内存池中的地址和value在共享内存池中的地址存放在跳表中,跳表的key大小判断是依据不定长key的值本身。并且在实现中,也考虑到了多线程/多进程的读写访问的安全问题;另外,因为跳表内节点数据的有序,可以按范围遍历。所述共享内存池模块存储有kvmap的key值和value值。所述跳表结构中的pair-first存储有key值在共享内存池中的地址,pair-second存储有value值在共享内存中的地址。所述跳表结构中的pair-first的大小比较,并不是通过key-地址比较,而是通过取出共享内存池中的key值之后进行比较的。
48.为了提高访问速度,也适用于读多写少的业务,所述跳表结构中还设计了适用于多进程/多线程访问的基于共享内存的读写锁,其中:
49.赋写锁——先尝试加写锁(读、写锁是互斥的),若成功则完成,否则超过一定时间后强制赋写锁;
50.释放写锁——先尝试释放写锁,若成功则完成,否则超过一定时间后强制释放写锁;
51.赋读锁——先尝试加读锁(若之前是写锁,则加读锁失败,否则成功),若成功则完成,否则超过一定时间后强制赋读锁;
52.释放读锁——先尝试释放读锁,若成功则完成,否则超过一定时间后强制释放读锁;
53.超时强制解锁——先尝试解锁(无论是读锁还是写锁),若成功则完成,否则超过一定时间后强制释放锁。
54.参照图4至图6,本发明还提供一种基于共享内存kvmap实现的高速服务注册的方法,包括如下步骤:
55.步骤s1:普通节点应用程序将信息传送到注册中心;
56.步骤s2:注册中心通过写锁将信息写入到跳表结构中,并将实际值存储在共享内存池中;
57.步骤s3:注册中心通过读锁将信息(key和value)读取到缓存中,然后下发消息到普通节点;
58.步骤s4:普通节点通过写锁信息写入到跳表结构中,并将实际值存储在共享内存池中;
59.步骤s5:最后普通节点上应用程序通过读锁将信息跳从跳表结构中读取出来,完成信息的获取。
60.所述步骤s1、步骤s3中普通节点和注册中心均通过tcp/ip协议进行信息传递。
61.所述步骤s2与步骤s4中的数据存储方法相同,其中步骤s2中数据存储方法为:
62.步骤s201:对待存储数据进行处理,并解析出对应的key和key对应的value值;
63.步骤s202:存储待存储数据的key值于共享内存池,并获取待存储数据的key值的存储地址addr1;
64.步骤s203:存储待存储数据的value值于共享内存池,并获取待存储数据的value值的存储地址addr2;
65.步骤s204:将存储地址addr1和存储地址addr2存储于跳表结构中。
66.所述步骤s3与步骤s5中的数据存储方法相同,其中步骤s3中数据存储方法为:
67.步骤s301:若收到对待读取数据的读取命令时,读取跳表结构中的待存储数据的key地址addr1;
68.步骤s302:将共享内存池中取出的key值与待读取的key值进行比较,直到获取一样的待读取的key值;
69.步骤s303:根据待存储数据的key的赋值中的存储地址addr2,从共享内存池中取出对应的value值。
70.由此可知,本发明通过将待注册的服务信息传输至注册中心,注册中心将信息同步至各服务节点,由于该信息由于是存储在kvmap结构的共享内存中,各节点访问信息经通过封装的c/c++库进行读取,因此较其它通过tcp或http等接口访问的服务注册与发现系统性能高出一个量级(原因是:对于计算机而言,内存的读取速度远高于通过网络接口读取的速度)。本发明通过自研的共享内存kvmap的服务注册与发现系统能轻松满足了企业对于部分业务需要达10-100w qps量级的访问要求,且其访问的稳定性高,不依赖与网络性能。
71.以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

技术特征:
1.一种基于共享内存kvmap实现的高速服务注册系统,其特征在于,包括:注册中心模块、共享内存kvmap模块;所述注册中心模块用于将信息写入共享内存kvmap模块中,且将实际值存储在共享内存kvmap模块中;所述注册中心模块包括注册中心、多个普通节点;所述注册中心用于将注册信息下发到各感兴趣的多个普通节点;每一所述普通节点均通过封装的sdk的读取注册信息,并将注册信息自动注册到注册中心;所述普通节点与注册中心的访问则通过云端负载均衡clb进行;所述共享内存kvmap模块包括共享内存池模块、跳表结构;所述跳表结构用于储存共享内存池模块的地址。2.根据权利要求1所述的基于共享内存kvmap实现的高速服务注册系统,其特征在于,所述注册中心包括注册中心一和注册中心二;所述注册中心一和注册中心二互为备份。3.根据权利要求1所述的基于共享内存kvmap实现的高速服务注册系统,其特征在于,所述共享内存池模块存储有kvmap的key值和value值。4.根据权利要求3所述的基于共享内存kvmap实现的高速服务注册系统,其特征在于,所述跳表结构中的pair-first存储有key值在共享内存池中的地址,pair-second存储有value值在共享内存中的地址。5.一种基于共享内存kvmap实现的高速服务注册的方法,其特征在于,包括如下步骤:步骤s1:普通节点应用程序将信息传送到注册中心;步骤s2:注册中心通过写锁将信息写入到跳表结构中,并将实际值存储在共享内存池中;步骤s3:注册中心通过读锁将key和value值信息读取到缓存中,然后下发消息到普通节点;步骤s4:普通节点通过写锁信息写入到跳表结构中,并将实际值存储在共享内存池中;步骤s5:最后普通节点上应用程序通过读锁将信息跳从跳表结构中读取出来,完成信息的获取。6.根据权利要求5所述的基于共享内存kvmap实现的高速服务注册的方法,其特征在于,所述步骤s1、步骤s3中普通节点和注册中心均通过tcp/ip协议进行信息传递。7.根据权利要求5所述的基于共享内存kvmap实现的高速服务注册的方法,其特征在于,所述步骤s2与步骤s4中的数据存储方法相同,其中步骤s2中数据存储方法为:步骤s201:对待存储数据进行处理,并解析出对应的key和key对应的value值;步骤s202:存储待存储数据的key值于共享内存池,并获取待存储数据的key值的存储地址addr1;步骤s203:存储待存储数据的value值于共享内存池,并获取待存储数据的value值的存储地址addr2;步骤s204:将存储地址addr1和存储地址addr2存储于跳表结构中。8.根据权利要求5所述的基于共享内存kvmap实现的高速服务注册的方法,其特征在于,所述步骤s3、步骤s5中的数据读取方法相同,其中步骤s3中数据读取方法为:步骤s301:若收到对待读取数据的读取命令时,读取跳表结构中的待存储数据的key地
址addr1;步骤s302:将共享内存池中取出的key值与待读取的key值进行比较,直到获取一样的待读取的key值;步骤s303:根据待存储数据的key的赋值中的存储地址addr2,从共享内存池中取出对应的value值。

技术总结
本发明公开一种基于共享内存kvmap实现的高速服务注册系统,包括:注册中心模块、共享内存kvmap模块;所述注册中心模块用于将信息写入共享内存kvmap模块中,且将实际值存储在共享内存kvmap模块中;所述注册中心模块包括注册中心、多个普通节点;所述注册中心用于将注册信息下发到各感兴趣的多个普通节点;每一所述普通节点均通过封装的sdk的读取注册信息,并将注册信息自动注册到注册中心;所述共享内存kvmap模块包括共享内存池模块、跳表结构。本发明通过共享内存kvmap的服务注册与发现系统能轻松满足了企业对于部分业务需要达10-100W QPS量级的访问要求,且其访问的稳定性高,不依赖与网络性能。不依赖与网络性能。不依赖与网络性能。


技术研发人员:叶志斌 陈贤平 陈文浩
受保护的技术使用者:深圳技威时代科技有限公司
技术研发日:2023.07.20
技术公布日:2023/9/13
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐