异数OS 织梦师-水母(一)--消息队列篇
异数OS 织梦师-水母(一)–消息队列篇
本文来自异数OS社区
github: https://github.com/yds086/HereticOS
异数OS社区QQ群: 652455784
异数OS-织梦师(消息中间件)群: 476260389
织梦师-水母 消息队列简介
这是一个使用异数OS技术实做的轻量级的消息中间件,和他的名字一样,重在表演,他不是一个功能复杂齐全的消息队列,使用者需要根据自己需求按照水母的原理去制作自己的超级武器,整个框架,协议,测试等代码算下来仅仅1000行,但已经是一个比较完整可用的消息队列了(topic没做,由nameserver去做吧),持久化方便测试使用虚完成,下一阶段会接入织梦师-水桶 RAM网盘存储方案,由于性能足够,单Broker相当于10-100台传统的消息队列,所以也不需要特意去制作集群方案,简单即优美,简单即可用,织梦师-水母作为异数OS的example放在git test目录下
与众不同的特性
1.生产者惰性QOS控制,在开启该特性后,生产者线程在队列满载后会被阻塞挂起,在队列可用时恢复并尝试重新入队,此特性在队列压力较大时可大大降低错误重试的网络IO需求,大大增加队列高负载时的可用性
2.低延迟低队列深度可用,织梦师-水母的延迟极低,内网生产者入队仅需10us延迟(82599),队列无压力时到消费者延迟20us,因此只要消费者满足需要,一般队列深度128即可稳定工作(异数OS系产品本身并不需要消息队列做削峰填谷,这是给老旧落后的产品做的)
3.海量生产者特性,每Broker最大可接入1000W链接生产者(阻塞IO线程),因此有望直接在公网接受用户生产者检验,而不需要系统前端加LVS或者Nginx分流出多生产者。
4.高性能的消息队列,dpdk 82599双口 单CPU核环境,128生产者下,非批量消息,最大入队峰值4M每秒,到消费者最大2M峰值,批量则再根据批量规模和带宽来计算放大倍率,1200W链接最大160W消息入队,到消费者最大80W,后面会支持RSS 单Broker多队列聚合,成倍扩充单broker性能。
架构说明
织梦师-水母使用阻塞线程模型,因此相比异步IO的架构,结构非常简单轻量稳定可靠,代码和框架是对生产者,消费者模型的高度对应,你看到的框架图就是代码。
测试说明
CPU1 作为日志监控核,CPU3作为经纪人Broker,CPU5创建生产者消费者,成绩为10字节10个消息批量模式,批量仅供参考。
日志中参数可自己查阅git中代码做分析参考。
测试成绩
异数OS虚拟交换机下,128生产者,128消费者
异数OS虚拟交换机下,600W生产者,128消费者
异数OS DPDK双口交换,128生产者,128消费者
异数OS DPDK双口交换,600W生产者,128消费者
相关产品性能对比
以下成绩都是1 Borker下得到的性能,其他产品数据来自网络的大概参考数据。
非批量消息模式
| 测试特性 | 异数OS虚拟交换机128生产者 | 异数OS虚拟交换机600W生产者 | 异数OS-DPDK 128生产者 | 异数OS-DPDK 600W生产者 | kafka | RocketMQ |
|---|---|---|---|---|---|---|
| 仅入队性能 | 4M | 2M | 3.3M | 160W | 12w | 12w |
| 入队出队性能 | 2M | 1M | 1.6M | 80W | 6w | 6w |
| 仅入队延迟 | <1us | <1us | 10us | 10us | 10ms | 10ms |
| 入队到出队延迟 | <1us | <1us | 20us | 20us | 10ms | 10ms |
批量消息模式
10字节消息批量入队出队,织梦师-水母测试用批量规模为10个消息批量
| 测试特性 | 异数OS虚拟交换机128生产者 | 异数OS虚拟交换机600W生产者 | 异数OS-DPDK 128生产者 | 异数OS-DPDK 600W生产者 | kafka | RocketMQ |
|---|---|---|---|---|---|---|
| 仅入队性能 | 40M | 20M | 33M | 1600W | 200w | 12w(不支持批量) |
| 入队出队性能 | 20M | 10M | 16M | 800W | 100w | 6w |
| 仅入队延迟 | <1us | <1us | 10us | 10us | 10ms | 10ms |
| 入队到出队延迟 | <1us | <1us | 20us | 20us | 10ms | 10ms |
研发吐槽
RSS方案已经可以正常使用,双核ECHO 8M IO的样子,DPDK在异数OS负优化下,在海量链接环境中,终于不丢包,但代价是惨烈的,相对netmap方案,性能损失30%,实践推测这是由于DPDK polling在需要访存延迟较高的情况下,网卡无法利用mbuf进行数据传输,因此你开再多的mbuf都不济于事,而netmap由于使用驱动的硬件中断,因此即便不polling,网卡中断也能完成和netmap ring的数据传输,所以netmap的polling实际上反而更高效,有削峰填谷作用,为了拯救DPDK polling导致的网卡饥饿,异数OS做了更加细粒度的任务调度,并为DPDK网卡驱动做了ns精度级别的任务调度,动态控制DPDK tx发包规模,从而实现了600W(1200W)链接的0丢包。
异数OS 织梦师-水母(一)--消息队列篇的更多相关文章
- 异数OS 织梦师-云(五)-- 容器服务化,绿色拯救未来。
. 异数OS 织梦师-云(五)– 容器服务化,绿色拯救未来. 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652 ...
- 异数OS 织梦师-Xnign(四)-- 挑战100倍速Nginx,脚踩F5硬件负载均衡
. 异数OS 织梦师-Xnign(四)– 挑战100倍速Nginx,脚踩F5硬件负载均衡 本文来自异数OS社区 github: https://github.com/yds086/HereticOS ...
- 异数OS 织梦师-纤手(二)-- LPC RPC篇
异数OS 织梦师-纤手(二)– LPC RPC篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 ...
- 异数OS 织梦师-水桶(三)-- RAM共享存储方案
. 异数OS 织梦师-水桶(三)– RAM共享存储方案 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455 ...
- 异数OS TCP协议栈测试(一)--数据传输篇
异数OS TCP协议栈测试(一)--数据传输篇 本文来自异数OS社区 github: 异数OS-织梦师(消息中间件)群: 476260389 测试目标 数据传输IO性能测试,主要是建立连接后测试收 ...
- 异数OS国产CPU平台移植项目需求分析
异数OS国产CPU平台移植项目需求分析 目录 异数OS国产CPU平台移植项目需求分析 项目立项背景 项目需求分析 异数OS性能指标简介 1.TCP协议栈性能测试 2.异数OS-织梦师-水母 消息队列性 ...
- 异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门
. 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...
- 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地
. 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地 本文来自异数OS社区 github: https://github.com/yds086/Here ...
- 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册
. 异数OS 星星之火(一)– 异数OS-织梦师云 用户使用手册 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...
随机推荐
- 高并发WEB服务的演变
一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加 Web系统的机器和升级硬件配置.虽然 ...
- I/O 寄存器和常规内存
不管硬件寄存器和内存之间的强相似性, 存取 I/O 寄存器的程序员必须小心避免被 CPU(或者编译器)优化所戏弄, 它可能修改希望的 I/O 行为. I/O 寄存器和 RAM 的主要不同是 I/O 操 ...
- 相似文本文档分析之SimHash算法
Simhash算法: Simhash算法由Google的Charikar提出,是将一篇文档转化为n位的签名,通过比较签名的相似度来计算原文档的相似度.签名越相近,则文档越相近.因此,整个过程就不会涉及 ...
- ZOJ Problem Set - 1090——The Circumference of the Circle
ZOJ Problem Set - 1090 The Circumference of the Circle Time Limit: 2 Seconds Memory Limit: 65 ...
- 【Linux】grep笔记
Linux grep命令用于查找文件里符合条件的字符串. 参数: -a 或 --text : 不要忽略二进制的数据. -A<显示行数> 或 --after-context=<显示行数 ...
- Oracle 11g R2 for Win10(64位)的安装注意点
一般我们在win10系统安装oracle11g或者10g及更低版本的oracle客户端时,都是无法安装,一般安装的时候会闪退.这是什么原因呢?其实很简单,win10出的时间比较晚,在oracle11g ...
- Scala的正则表达式
想使用scala的正则表达式,需要首先导入 import scala.util.matching.Regex 然后就可以使用了,实例如下: val pattern = new Regex(" ...
- Perl中的bless的理解
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. [xywang@mnsdev13: ...
- .Net快速上手Nlog日志组件
目录 一.NLog 简介 二.NLog 安装 三. NLog 配置 四.程序代码中写日志 五.参考 一.NLog 简介 NLog是适用于各种.NET平台的灵活,免费的日志记录平台.NLog使写入多个目 ...
- 深度兴趣网络DIN-SIEN-DSIN
看看阿里如何在淘宝做推荐,实现"一人千物千面"的用户多样化兴趣推荐,首先总结下DIN.DIEN.DSIN: 传统深度学习在推荐就是稀疏到embedding编码,变成稠密向量,喂给N ...