基于中间件的数据库集群通信方法及数据库集群中间件与流程

未命名 07-26 阅读:176 评论:0


1.本发明涉及数据库集群技术领域,尤其涉及一种基于中间件的数据库集群通信方法及数据库集群中间件。


背景技术:

2.当在数据库集群中使用中间件时,一般会使用读写分离技术。根据数据库通信协议的协议包的不同而发送至集群中不同的数据库节点,以提高数据库集群的整体性能。而数据库中间件的一个最基本的功能就是与前端和后端建立连接,并及时转发获取的消息至目标端。
3.目前的数据库中间件(如pgpool)是采用多进程实现的通信工具。多进程间所有资源皆独立,并不会相互干扰。其通信方法是读取到前后端消息后直接转发,扩展协议场景下也能缓冲2~3个特定的协议包后即做转发。但该方案存在以下缺陷:当处于等待读写状态时,则进程阻塞,从而使进程处于暂停状态;当并发量较大时,内核会不断的做进程切换,从而导致切换过程本身耗费了大量时间。导致在高并发,读写io频繁的情况下,pgpool并不会对性能有明显的提升。


技术实现要素:

4.本发明实施例提供一种基于中间件的数据库集群通信方法及数据库集群中间件,用以解决现有技术中数据库中间件面向io频繁时性能降低的问题。
5.一方面,本发明实施例提出一种基于中间件的数据库集群通信方法,包括:
6.接收前端应用发起的通信连接请求,并基于所述通信连接请求与所述前端应用建立连接、为所述前端应用创建一个对应的协程,所述协程具有一个独立的协程缓冲区;
7.接收所述前端应用第一次发送的第一协议包,通过对所述第一协议包进行协议分析确定所述第一协议包要发往的目标后端,并将所述第一协议包缓冲至所述协程缓冲区;
8.接收所述前端应用当前发送的当前协议包,通过对所述当前协议包进行协议分析确定所述当前协议包要发往的目标后端;
9.判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致,若是,则将所述当前协议包缓冲至所述协程缓冲区,否则,将所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端,并将所述当前协议包缓冲至所述协程缓冲区。
10.又一方面,本发明实施例提出一种数据库集群中间件,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的方法。
11.本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上所述的方法。
12.采用本发明实施例,利用协程实现中间件通信,并为协程创建独立的数据存储空
间,可以在一个进程中建立非常多的通信,且当一个协程阻塞时,可以立刻切换到其它连接,极大的减少了读写阻塞等待时间,而且各协程拥有自己的资源,运行过程中,互不干扰。通过协程缓冲区的设计与数据库中间件通信场景的结合,使得原本的io读写,尽可能的转为对内存的操作,使得数据库中间件的性能进一步的提高。
13.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
14.通过阅读下文实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。在附图中:
15.图1是本发明实施例中基于中间件的数据库集群通信方法流程图;
16.图2是本发明实施例中基于中间件的数据库集群通信方法流程图;
17.图3是本发明实施例中基于中间件的数据库集群通信方法流程图;
18.图4是本发明实施例中基于中间件的数据库集群通信方法流程图;
19.图5是本发明实施例中基于中间件的数据库集群通信方法流程图。
具体实施方式
20.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。另外,在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
21.一方面,如图1所示,本发明实施例提出一种基于中间件的数据库集群通信方法,包括:
22.s1,接收前端应用发起的通信连接请求,并基于所述通信连接请求与所述前端应用建立连接、为所述前端应用创建一个对应的协程,所述协程具有一个独立的协程缓冲区;
23.s2,接收所述前端应用第一次发送的第一协议包,通过对所述第一协议包进行协议分析确定所述第一协议包要发往的目标后端,并将所述第一协议包缓冲至所述协程缓冲区;
24.s3,接收所述前端应用当前发送的当前协议包,通过对所述当前协议包进行协议分析确定所述当前协议包要发往的目标后端;
25.s4,判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致,若是,则将所述当前协议包缓冲至所述协程缓冲区,否则,将所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端,并将所述当前协议包缓冲至所述协程缓冲区。
26.可以理解,协程缓冲区中可以存储一个或多个协议包,协程缓冲区中存储的协议包的目标后端都一致。当前接收的协议包(即当前协议包)要发往的目标后端如果与协程缓
冲区中协议包的目标后端不一致时,就将协程缓冲区中的所有协议包打包一次性发送出去,然后将当前的协议包缓冲至协程缓冲区。
27.在本发明实施例中,首先利用协程实现中间件通信,可以在一个进程中建立非常多的通信,且当一个协程阻塞时,可以立刻切换到其它连接,极大的减少了读写阻塞等待时间,而且创建协程私有的本地的缓存区,用于通信中存放协议包,各协程拥有自己的资源,运行过程中,互不干扰,可以大量减少io读写的次数,从而提高协程的运行效率,更进一步提高数据库中间件的性能。
28.在上述实施例的基础上,进一步提出各变型实施例,在此需要说明的是,为了使描述简要,在各变型实施例中仅描述与上述实施例的不同之处。
29.根据本发明的一些实施例,所述协程本地缓冲区的实现方法还包括:
30.当所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端一致时,先不直接将当前协议包缓冲至协程缓冲区,而是先检查协程缓冲区是否已满;若所述协程缓冲区中协议包的个数没有超过预设阈值,则将所述当前协议包缓冲至所述协程缓冲区,否则,将所述当前协议包连同所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端。
31.这里的预设阈值可以根据实际应用需求进行设置。
32.本发明通过使用协程,并为每个协程分配独立的协程资源作为协程缓冲区,用以将读写的数据尽量多的存放于协程缓冲区中,然后一次性读写,以此来减少io读写次数,达到提升数据库中间件性能的目的。
33.根据本发明的一些实施例,所述协程本地缓冲区的实现方法还包括:
34.根据数据库通信协议,将协议包分为立刻处理类型和非立刻处理类型;
35.接收所述前端应用当前发送的当前协议包之后、判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致之前,通过所述协议分析确定所述当前协议包的类型;
36.若所述当前协议包的类型为非立刻处理类型,则判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致;
37.若所述当前协议包的类型为立刻处理类型,则将所述当前协议包发送至其对应的目标后端。
38.这里需要说明的是,在确定哪些协议包为立刻处理类型,哪些协议包为非立刻处理类型时,可以根据实际需求进行灵活设置、调整。
39.由此,对于需要立刻处理的协议包可以及时处理,也不会耽误。
40.进一步的,若所述当前协议包的类型为立刻处理类型,将所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端。
41.在本发明的一些实施例中,所述基于所述通信连接请求与所述前端应用建立连接、为所述前端应用创建一个对应的协程,所述协程具有一个独立的协程缓冲区,包括:
42.在接收到前端应用发起的通信连接请求后,为该前端应用创建一个对应的协程,并与该前端应用建立通信连接;
43.在所述通信连接建立成功后,为所述协程创建一个对应的独立协程缓冲区。
44.下面参照附图以一个具体的实施例详细描述根据本发明实施例的基于中间件的
数据库集群通信方法。值得理解的是,下述描述仅是示例性描述,而不应理解为对本发明的具体限制。
45.由于协程是一个比线程更小的单位,一个进程可以运行多个协程,但是协程的所有资源都是以进程为单位共享的,因此协程并无其独立的资源。由于在面对postgres集群前后端通信时,会遇到使用扩展协议,且读写io量比较大的场景。此时中间件会耗费大量的时间在io读写或者等待io的场景中。
46.基于此,本技术提出以协程为单位,创建协程私有的本地的协程缓存区,用于通信中存放从客户端或者数据库端的数据,直至获取到特定的协议包或者缓冲区满时,将消息转发出去,那么将大量减少io读写的次数,从而提高协程的运行效率,更进一步提高数据库中间件的性能。其设计思想为:当使用数据库中间件通信时,根据消息类型,可以将接收的协议包数据存放于协程缓冲区中,待接收到特定的数据库通信协议包、前后两个数据库需要发往不同节点或者缓冲区满时,再一次性将所有数据发送至目标端,参见图2。
47.设计协程缓冲区作为减少io读写次数的机制,首先需要明确的问题是:
48.不同的协议数据包可能会发送不同的数据库节点,也可能会发往相同的节点;
49.可能会有连续多个协议包发往同一个节点;
50.部分协议包需要立刻转发而不能放入协程缓冲区,因为需要立刻处理并回复;
51.根据以上细节的考虑,本发明实施例提出一种基于中间件的数据库集群通信方法,包括:
52.步骤一:根据postgres数据库通信协议,将协议包,分为需要立刻处理和非立刻处理类型。
53.步骤二:当通信连接建立时,立刻创建一个协程,用于单独处理该连接的所有数据,并为该协程创建一个独立的协程缓冲区,参见图3。
54.步骤三:当接收到前端的协议包时,进行协议分析,判断出该协议包应该发往的目标后端,当前协议包的处理类型。如果当前协议包为非立刻处理类型,则需要与协程缓冲区中的协议包的目标端进行比较,如果相同则也放入协程缓冲区中,并判断缓冲区是否已满,已满则发送,未满则协程切换等待下一次io,,参见图4。
55.如果是立刻处理类型,则立刻将缓冲区中的协议包与当前处理的均发送自各自的目标端,此时需保证协程缓冲区为空。
56.步骤四:如果当前协议包与缓冲区中的协议包发送目标端口不同,则将缓冲区中的协议包一次性发送,再将当前协议包放入缓存中,参见图5。
57.本发明实施例的方法通过使用协程,并为每个协程分配独立的协程资源作为协程缓冲区,用以将读写的数据尽量多的存放于协程缓冲区中,然后一次性读写,以此来减少io读写次数,达到提升数据库中间件性能的目的。数据库中间件的协程工作模式增加了独立数据存储空间,使得进程中各协程拥有自己的资源,运行过程中,互不干扰。由于协程缓冲区的设计与数据库中间件通信场景的结合,使得原本的io读写,尽可能的转为对内存的操作,使得数据库中间件的性能进一步的提高。相较于pgpool的进程模式,使用协程可以在一个进程中建立非常多的通信,且当一个协程阻塞时,可以立刻切换到其它连接,极大的减少了读写阻塞等待时间。
58.需要说明的是,以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对
于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
59.需要说明的是,本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。
60.又一方面,本发明实施例提出一种数据库集群中间件,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的方法。
61.本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上所述的方法。
62.需要说明的是,本实施例所述计算机可读存储介质包括但不限于为:rom、ram、磁盘或光盘等。处理器可以是手机,计算机,服务器,空调器,或者网络设备等。
63.在此提供的方法不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
64.术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
65.不应将位于括号之内的任何参考符号构造成对权利要求的限制。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。单词第一、第二、以及第三等的使用是用于区别类似的对象,不表示任何顺序。可将这些单词解释为名称。

技术特征:
1.一种基于中间件的数据库集群通信方法,其特征在于,包括:接收前端应用发起的通信连接请求,并基于所述通信连接请求与所述前端应用建立连接、为所述前端应用创建一个对应的协程,所述协程具有一个独立的协程缓冲区;接收所述前端应用第一次发送的第一协议包,通过对所述第一协议包进行协议分析确定所述第一协议包要发往的目标后端,并将所述第一协议包缓冲至所述协程缓冲区;接收所述前端应用当前发送的当前协议包,通过对所述当前协议包进行协议分析确定所述当前协议包要发往的目标后端;判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致,若是,则将所述当前协议包缓冲至所述协程缓冲区,否则,将所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端,并将所述当前协议包缓冲至所述协程缓冲区。2.如权利要求1所述的方法,其特征在于,所述协程本地缓冲区的实现方法还包括:当所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端一致时,统计所述协程缓冲区中协议包的个数;若所述协程缓冲区中协议包的个数没有超过预设阈值,则将所述当前协议包缓冲至所述协程缓冲区,否则,将所述当前协议包连同所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端。3.如权利要求1所述的方法,其特征在于,所述协程本地缓冲区的实现方法还包括:根据数据库通信协议,将协议包分为立刻处理类型和非立刻处理类型;接收所述前端应用当前发送的当前协议包之后、判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致之前,通过所述协议分析确定所述当前协议包的类型;若所述当前协议包的类型为非立刻处理类型,则判断所述当前协议包要发往的目标后端与所述协程缓冲区中存储的协议包对应的目标后端是否一致;若所述当前协议包的类型为立刻处理类型,则将所述当前协议包发送至其对应的目标后端。4.如权利要求3所述的方法,其特征在于,若所述当前协议包的类型为立刻处理类型,将所述协程缓冲区中存储的所有协议包一次性发送至对应的目标后端。5.如权利要求1所述的方法,其特征在于,所述基于所述通信连接请求与所述前端应用建立连接、为所述前端应用创建一个对应的协程,所述协程具有一个独立的协程缓冲区,包括:在接收到前端应用发起的通信连接请求后,为该前端应用创建一个对应的协程,并与该前端应用建立通信连接;在所述通信连接建立成功后,为所述协程创建一个对应的独立协程缓冲区。6.一种数据库集群中间件,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的方法。7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如权利要求1至5中任一项所述的方法。

技术总结
本发明公开了一种基于中间件的数据库集群通信方法及数据库集群中间件,用以解决目前数据库中间件采用进程通信模式在面向IO频繁时性能降低的问题。基于中间件的数据库集群通信方法包括:基于前端应用的通信连接请求与前端应用建立连接并为其创建一个具有独立协程缓冲区的协程;接收前端应用第一次发送的第一协议包并确定其要发往的目标后端,将第一协议包缓冲至协程缓冲区;接收前端应用当前发送的当前协议包并确定其要发往的目标后端;判断当前协议包与协程缓冲区中的协议包要发往的目标后端是否一致,若是,将当前协议包缓冲至协程缓冲区,否则,将协程缓冲区中存储的所有协议包一次性发送至对应的目标后端,并将当前协议包缓冲至协程缓冲区。议包缓冲至协程缓冲区。议包缓冲至协程缓冲区。


技术研发人员:谭洋 苗健 吕新杰
受保护的技术使用者:瀚高基础软件股份有限公司
技术研发日:2023.04.27
技术公布日:2023/7/25
版权声明

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

飞行汽车 https://www.autovtol.com/

分享:

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

相关推荐