DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

简介: [概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定。这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效。

[概述]

自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定。这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效。今天特意写篇blog来记录我的心得与大家分享。

 

[功能实现说明]

沿用上次的草图

目前DEMO图上的功能都已经实现。下面谈谈各部分的实现。

 

  • 通信服务, 由DIOCP实现,担当与客户端的通信工作,负责接收数据包,处理粘包和数据回传的工作
  • 数据分发队列, 由uWorkDispatcher单元实现, 其中利用 OTL中的无锁队列担当数据的缓存,在使用uJobPusher推送队列中的任务。
  • 数据推送,由ZeroMQ完成,使用Push/Pull模式,由于第一次接触ZeroMQ,可能没有挖掘到ZeroMQ的潜力,导致现在进程之间传递都是线程操作,开始一直担心这个问题,迟迟没有下手,最后还是坚持用了,效果还不错。
  • 逻辑处理进程,由主控台程序完成,里面主要收到数据分发队列中分发过来的任务后,进行逻辑处理,然后再将需要返回的数据,推送回通信服务进程(由uJobReceiver单元处理),并投递到DIOCP传输队列,该进程中使用到QWorkers。等一下我专门介绍这个方便的队列任务处理类。
  • 客户端,由TCPClient实现数据的通信。

 

[QWorkers说明]

之前一直想设计一个这样的东西,几次下来都不如意,自从接触到QWorkers后,发现原来应该这样去设计。下面是我研究QWorkers画的一流程图。一个中午的吃饭的时间,基本上就可以理解80%,作者设计思路明确,使用简单,而且队列使用原子锁,也比使用临界高效不少。作者是QDAC开源项目的发起人。

image

主要作用,任务(可以单次任务,定时任务(比如每天12:00执行), 延时任务, 手动触发任务)的投递和执行。适合做逻辑运算任务。具体使用可以参考DEMO[DIOCP\Demos\MultiProcessor\processorWithQWorker]

 

[ZeroMQ]

ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。

推荐大家看两遍blog, 我就不多写了。

ZeroMQ研究与应用分析ttp://www.cnblogs.com/rainbowzc/p/3357594.html

Delphi实战: http://my.oschina.net/zeroflamy/blog/109457

 

[关于DEMO]

程序使用XE5编译,

服务端(SERVER):DIOCP是支持D7-XE6的,所以Server可以用D7-XE6原理上是可以编译的,只是工程文件是XE5编译的,需要自己稍作处理

客户端(TCPClient): D7-XE6都应该没有问题。使用的标志控件(TcpClient),标准写法.

逻辑处理进程(processor):超级简单的处理进程。D7-XE6

逻辑处理进程(processorWithQWorker):由于使用了QWorkers,只能支持D2007以上的版本.

 

[关于解决方案的应用]

该框架主要用于ERP的三层框架。逻辑处理进程可以实现热拔插。可以启动多个。自动接收任务。底层稳定,持续几个月的服务端再也不是什么难事了….

后续会结合MyBean框架做一些例子的整合。

 

欢迎大家继续关注。

目录
相关文章
|
存储 消息中间件 缓存
相比游戏客户端,游戏服务端开发无关紧要吗
感觉游戏服务端,除了更新,保存数据啊、生成随机物品啊、都没什么了,好像游戏开发场景中,服务端已经无关紧要了。看着客户端忙成狗,正在摸鱼的你是否也有过这样的疑问?
478 0
相比游戏客户端,游戏服务端开发无关紧要吗
|
监控 安全 API
《数据治理简易速速上手小册》第6章 数据访问与共享(2024 最新版)
《数据治理简易速速上手小册》第6章 数据访问与共享(2024 最新版)
21 0
|
1月前
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
34 0
|
7月前
|
消息中间件 缓存 数据库
好家伙!阿里最新版高并发系统设计涵盖了“三高”所有骚操作
为啥都爱面高并发? 首先为啥面试官喜欢问高并发、性能调优相关的问题,我想有两点原因: 第一,本身互联网区别于传统软件行业的特点之一就是海量请求。传统软件公司每秒用户几个、几十个的请求很常见,但是互联网公司哪怕一个二线的 App,后端接口请求一天几个亿也很正常。业务特点导致对候选人在海量请求相关的技术上考察的会比较多。 第二、高并发性能调优等方面的问题相当于高考试卷里的难题部分。CRUD 谁都会,xx 培训机构培训上三个月,出来都能写。但是对于高性能、高并发这没几把刷子真会玩不起来的。通过这个来区分候选人水平的高低(招人肯定选水平高的)。
63 1
|
7月前
|
消息中间件 机器学习/深度学习 大数据
阿里技术官发布的Netty速成笔记,堪称“性能猛兽”,真的很强悍
现如今互联网大厂,一面最喜欢考察的就是基础知识,比如本课程要讲解的计算机基础,因为写代码不可避免要跟机器、网络、CPU、磁盘、内存,成天打交道。
87 0
|
11月前
|
机器学习/深度学习 缓存 SpringCloudAlibaba
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
五一假期过的可真快,今天开始,又要搬砖了。在五一假期当中,冰河做了一项调研,感觉结果还是挺合乎情理的。
308 0
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
|
XML JSON 编解码
IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)
本文将基于随手记团队的Protobuf应用实践,分享了Protobuf的技术原理、上手实战等(本篇要分享的是技术原理),希望对你有用。
162 0
IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)
|
消息中间件 JSON SpringCloudAlibaba
贼好用,冰河再次升级了这款开源的精准定时任务和延时队列框架!!
在实际工作中,很多小伙伴在开发定时任务时,会采取定时扫描数据表的方式实现。然而,这种方式存在着重大的缺陷:如果数据量大的话,频繁的扫描数据表会对数据库造成巨大的压力;难以支撑大规模的分布式定时任务;难以支持精准的定时任务;大量浪费CPU的资源;扫描的数据大部分是不需要执行的任务。那么,既然定时扫描数据表存在这么多的弊端,那么,有没有一种方式来解决这些问题呢?今天,冰河就带着他的开源项目mykit-delay来了!!开源地址:https://github.com/sunshinelyz/mykit-delay 和 https://gitee.com/binghe001/mykit-delay
198 0
贼好用,冰河再次升级了这款开源的精准定时任务和延时队列框架!!
|
缓存 运维 Ubuntu
保姆级教程TDengine客户端服务器安装教程
还在一边挠头一边看官方教程?那还不点进来看看,我一步步教你完成安装。绝对的保姆级教程,让安装变得更简单~
2688 1
保姆级教程TDengine客户端服务器安装教程

热门文章

最新文章