一种基于Cgo的高性能证券行情接入系统和方法与流程

文档序号:11524333阅读:619来源:国知局
一种基于Cgo的高性能证券行情接入系统和方法与流程

本发明涉及特别适用于特定功能的数据处理设备或数据处理方法,尤指一种基于cgo的高性能证券行情接入系统和方法。



背景技术:

接入系统作为用户(包括内部用户和外部用户)与应用服务器的隔离层,直接接收用户的请求,并转发给应用服务器。参见图1,目前在接入系统中广泛采用反向代理器(如:nginx)对应用服务器进行反向代理,并支持多个应用服务器的负载均衡。现有技术的这种接入系统存在以下几个缺点:

1)运行状态下不支持服务发现功能,新增应用服务时需要重启进程或重加载配置;

2)对业务请求的负载均衡不能依据业务实时状态进行路由,只能依据配置中的策略进行路由;

3)不支持更轻量级的协程调度,进程切换开销大;

4)不支持到应用服务器的长连接,对应用服务器的消耗很大。



技术实现要素:

针对现有技术的缺点,本发明的目的在于提供一种基于cgo的高性能证券行情接入系统和方法。旨在针对证券行情服务提出一种基于c语言和go语言结合的证券行情高性能接入系统,建立在高并发和高访问情况下使用cgo实现证券行情接入系统和方法的操作流程和机制。

本发明解决其技术问题所采用的技术方案之一是:提供一种基于cgo的高性能证券行情接入系统,包括收敛器模块、连接管理器模块、转发逻辑模块、推送逻辑模块和接入组件模块,其中:

收敛器模块:负责用户连接的建立,将建立好的连接发送到多个接入进程,采集接入进程的用户状态数据;

连接管理器模块:通过cgo机制和go语言通信,管理用户连接的数据包收发,与go程序进行数据交换,对整个进程和单个连接进行流量控制;

转发逻辑模块:接收请求数据,将业务请求转发给应用服务器,接收应用服务器的响应包并传递给连接管理器;

推送逻辑模块:将接入进程的用户上下线状态和接入进程状态通知推送集群前置模块,同时接收推送系统代理模块发来的推送数据并传递给连接管理器模块;

接入组件模块:分为接入组件客户端和服务端;接入组件客户端集成tcp连接池管理、负载均衡、路由容灾、服务发现、连接保活功能于一身的客户端编程框架,与接入组件服务端进行对接;接入组件服务端是基于高性能tcp套接字读写组件实现的服务端编程框架,能与接入组件客户端进行无缝对接。

进一步地:

本发明一种基于cgo的高性能证券行情接入系统的接入方法,包括如下步骤:

一、用户连接收敛器模块,收敛器将该连接发送到连接管理器模块;

二、连接管理器模块接收用户连接,进行鉴权处理,将在线状态通知推送逻辑模块;鉴权通过后,连接管理器模块收取用户发送过来的业务请求,将业务请求传递到转发逻辑模块,同时发送出去;

三、转发逻辑模块从接收环形队列中提取业务请求,分发到对应的转发通道,处理转发通道的数据,并传递给接入组件模块;

四、推送逻辑模块在收到用户的上下线状态通知时,将上下线状态通知发送到推送集群系统,同时推送逻辑监听推送代理模块发送过来证券行情数据,并将行情数据传递给连接管理器模块;

五、接入组件模块预先从服务发现系统拉取配置信息,依据配置信息创建与应用服务器的连接池,实时监控配置信息变化,接入组件客户端收到业务请求后,选取合适的连接将业务请求发送出去,并将业务请求身份标识加入到定时器模块中进行超时计时,负载均衡模块统计请求发送信息,同时,当接入组件客户端模块收到回包后,解析出回包里的请求身份标识,从定时器模块找出请求信息,上报回包信息到负载均衡模块,并将响应数据直接传递到发送环形队列,供连接管理器模块使用;

六、负载均衡模块依据接入组件客户端模块上报的请求发送信息和回包信息,对应用服务器的负载情况进行动态计分,当接入组件客户端模块需要选取连接发送业务请求时,将依据应用服务器的分数情况进行动态分配业务请求;

七、接入组件客户端发送请求到应用服务器,请求先到接入组件服务端组件中,接入组件服务端将对请求进行协议验证和解包,并将业务数据传递给应用服务器逻辑处理,处理完之后,将处理结果发送给接入组件(客户端)模块。

本发明的有益效果是:

1)接入系统运行状态下支持动态服务发现功能,新增应用服务时可以自动更新到接入系统。

2)能够依据业务实时负载状态进行负载均衡,能够更好的分配请求,同时应用服务器的扩容、缩容对于上层用户来说都是无感知的。

3)轻量级的go协程调度,使得请求转发高更效。

4)通过连接池与应用服务器的长连接,使得与应用服务器的通信更高效率。

5)高效的无锁内存队列的应用,使得c语言与go语言的通过效率更高。

附图说明

下面结合附图对本发明作进一步的描述。

图1是现有技术的证券行情接入系统和方法结构示意图。

图2是本发明的结构示意图。

图3是本发明的连接管理器结构示意图。

图4是本发明的接入协议通信流程示意图。

具体实施方式

参见附图,本发明一种基于cgo的高性能证券行情接入系统具体实施例,包括收敛器模块1、连接管理器模块2、转发逻辑模块3、推送逻辑模块4和接入组件模块5,其中:

收敛器模块1:负责用户连接的建立,并将建立好的连接通过本地套接字(unixdomainsocket)平均发送到多个接入进程,并采集接入进程的用户状态数据;

连接管理器模块2:采用c语言实现,通过cgo机制和go语言通信,对用户连接进行管理,通过io多路复用模型(epoll模型)管理用户连接的数据包收发,通过无锁环形队列与go程序进行数据交换,对整个进程和单个连接进行流量控制;

转发逻辑模块3:从接收环形队列轮询接收请求数据,采用多通道的方式转发具体业务请求,使不同业务的请求相互独立的转发给应用服务器,同时接收应用服务器的响应包并通过发送环形队列传递给连接管理器;

推送逻辑模块4:负责将接入进程的用户上下线状态和接入进程状态通知给到推送集群前置模块(推送系统的主入口模块),同时接收推送系统代理模块发过来的推送数据并通过发送环形队列传递给连接管理器模块。

接入组件模块(客户端)5:分为接入组件客户端和服务端;接入组件客户端集成tcp连接池管理、负载均衡、路由容灾、服务发现、连接保活功能于一身的客户端编程框架,与接入组件服务端进行对接;接入组件服务端是基于高性能tcp套接字读写组件实现的服务端编程框架,能与接入组件客户端进行无缝对接。

在本发明的实施例中,所述一种基于cgo的高性能证券行情接入系统和方法的实现方法细分为如下步骤:

一、当用户通过tcp连接到收敛器模块进程监听的socket套接字时,收敛器进程接受用户连接,记为conn,并通过本地套接字把conn发送到接入进程的连接管理器模块;

二、连接管理器模块接收用户连接conn,并将conn加入epoll进行事件监听,读取conn发过来握手请求,针对握手请求进行鉴权处理,并将在线状态通知到推送逻辑模块。握手鉴权通过后,连接管理器模块开始收取用户连接conn发送过来的业务请求,然后将业务请求通过接收环形队列传递到转发逻辑模块,并同时从接收环形队列中提取响应回包直接通过用户连接conn发送出去。具体的接入协议的握手流程如图4所示;

三、转发逻辑模块从接收环形队列中提取到业务请求,依据业务请求的的命令字分发到对应的转发通道中去,通过go语言协程池处理转发通道的数据,并传递给接入组件客户端模块;

四、推送逻辑模块在收到用户的上下线状态通知时,会将上下线状态通知直接发送到推送集群系统去;同时推送逻辑还会负责监听推送代理模块发送过来的udp证券行情数据,并将行情数据通过发送环形队列传递给连接管理器模块;

五、接入组件客户端模块预先从服务发现系统拉取配置信息,依据配置信息创建好与应用服务器的连接池,并实时监控配置信息变化,当配置信息有改变时,连接池同步变化;接入组件客户端在收到业务请求时,依据用户命令字从负载均衡模块拉取合适的连接将业务请求发送出去,并将业务请求身份标识加入到定时器模块进行超时计时,负载均衡模块统计请求发送信息;同时,当接入组件客户端模块收到回包时,解析出回包里的请求身份标识,依据请求身份标识从定时器模块里找出请求信息,上报回包信息到负载均衡模块,并将响应数据直接传递到发送环形队列,供连接管理器模块使用;

六、负载均衡模块依据接入组件客户端模块上报的请求发送信息和回包信息,对应用服务器的负载情况进行动态计分,当接入组件客户端模块需要选取连接发送业务请求时,将依据应用服务器的分数情况进行动态分配,以达到负载好的应用服务器承担更多的请求压力,负载差的应用服务器承担相对较少的请求压力;

七、接入组件客户端发送请求到应用服务器时,请求先到接入组件服务端组件中,接入组件服务端将对请求进行协议验证和解包,并将业务数据传递给应用服务器逻辑处理,处理完之后,再通过接入组件服务端将处理结果发送给接入组件客户端模块。

在证券行情业务情景下,用户连接到行情接入系统和方法时,会发送多个业务请求,同时需要应用服务器能持续快速推送证券行情信息。本发明在于证券行情接入系统和方法采用go语言的轻量级协程开发,与应用服务器建立长连接,持续快速地推送证券行情信息,能够支持动态发现应用服务器的状态,能够依据应用服务器的实时能力进行动态负载均衡,从而更好的适应证券行情业务高并发、高访问、高可用的要求。

缩略语和关键术语定义

nginx:一个高性能的http和反向代理服务器,也是一个imap/pop3/smtp服务器,经常应用于接入系统。

go语言:又称golang是google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言。

cgo:一种实现go程序与c的类库交互操作的技术。

本地套接字:unixdomainsocket是在socket架构上发展起来的用于同一台主机的进程间通讯(ipc),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。

epoll:一种高性能的多路io复用机制,事件驱动机制。

套接字读写组件:自研的一套基于go语言的tcp通信框架。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1