干货丨一文看懂KingbaseES进程间消息队列的实现

干货丨一文看懂KingbaseES进程间消息队列的实现

进程间通信(Interprocess communication)是指在不同进程之间传播或交换信息。

广义上,不同进程通过磁盘文件分享信息,也属于进程间通信的手段,但是一般都不把这算作“进程间通信”。狭义上,进程间通信(以下简称“IPC”,Interprocess communication)是一组编程接口,让程序员能够协调不同进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。一般情况下,IPC的主要目的是数据传输,数据共享,事件通知,资源共享,进程控制。

进程间通信原理示意
根据实现方式的不同,IPC分为七种类型,分别是管道(pipe),命名管道(FIFO),消息队列(MessageQueue),共享存储(SharedMemory),信号量(Semaphore),信号(Signal),套接字(Socket)等。它们具体使用的场景并不相同,一般在无血缘关系进程间的大批量消息通信中,消息队列、共享内存和套接字使用场景较多。
图片

在KingbaseES中的IPC通信中,采用的是基于共享内存的消息队列机制,通过共享内存实现进程间通信,在异步场景下,还需要通知机制。在基于共享内存的消息队列机制上,KingbaseES采用latch机制实现跨进程的信号通知。具体连接和通信流程见下图。
在这里插入图片描述

服务端在启动时,会创建latch机制,用于后台进程的连接建立和后台进程的消息处理。守护进程会在全局共享内存中为各个服务端进程创建数组,此数组用于后台进程记录共享内存handle信息,其用于连接信道的建立。后台进程在启动时,创建共享内存,并基于共享内存创建消息队列。然后通过前述的全局数组,记录本进程共享内存的handle,并通过信号通知服务端进程。服务端进程在接收到信号后,Latch机制触发处理,其首先遍历全局连接数组,在发现新连接过来时,触发回调完成连接建立,并通过latch机制,通知对端连接建立完成。后续Backend即可通过消息队列发送消息,通过消息队列接受消息,通过信号通知对端。相应的服务端进程通过遍历所有接收消息队列,接受并处理消息,然后通过发送消息队列逐个发送处理结果,同样通过信号通知对应的后台进程。

这样实现的性能如何呢?在CentOS7.6系统,采用客户端同步,服务端异步的模式,进行了实际测试,结果如下:
在这里插入图片描述
在这里插入图片描述

由此可见,KingbaseES的性能在字节量少时,属于优秀的,在字节量大时也并不很差,在中等字节量时表现出色,KingbaseES具备良好的IPC机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值