.

异数OS 织梦师-水桶(三)– RAM共享存储方案


本文来自异数OS社区


github: https://github.com/yds086/HereticOS

异数OS社区QQ群: 652455784

异数OS-织梦师(消息中间件 RPC技术)群: 476260389



织梦师-水桶 RAM共享存储简介


织梦师-水桶 是使用异数OS IPC技术设计实现的一种共享介质层存储方案,得益于IPC的简单易用,因此水桶的设计过程是非常轻松容易的,也因此也更加方便用户定制扩展,由于异数OS IPC性能的突破,他也因此提供了其他系统无法提供的一些激动特性与能力。


与众不同的特性


  1. 简单的框架,简单的实现,使用IPC技术,不需要重量级的定义功能和通讯协议,整个实现加测试仅500行代码。
  2. 网络共享存储特性 传统的介质存储方案,只能访问者独占使用,不能分布式扩充性能与容量,因此在使用中受到了极大的能力限制,原因有两点,一是存储介质被硬件结构控制一般不能直接支持网络访问,二是介质存储只提供读写访问能力,对于多个读写者而言,不能彼此同步cache,造成多访问者环境出现不可预知的数据故障,因此一般介质存储之上需要复杂的文件系统(分布式)来对介质做独占访问,比如iscsi技术虽然解决了介质的网络访问问题,但却无法解决多访问者系统的cache同步,一致性等问题,因此iscsi并不能独立提供存储方案,还需要宿主操作系统的文件系统做支持,才能为应用提供共享的存储能力,织梦师-水桶则通过IPC技术解决了上述传统介质存储中问题,水桶可以使用TCP网络RPC来实现扩展远程访问的能力,同时,通过RPC技术,水桶提供了介质写入消息实时推送广播,这使得多访问者之间的cache实时同步成为可能,使用这一技术扩展各类分布式cache产品后,则可以使得各个分布式cache实例的数据更新在微秒级别完成实时跟新同步,而不需要cache产品耗费更多同步开销,从而为秒杀类推送类应用提供更好更实时的服务(12306),由于共享存储介质方案的实现,文件系统以及介质存储的边界变的模糊,介质存储因此可以不用依赖文件系统直接为应用以及cache提供存储服务,而文件系统则可以通过共享介质存储来获得更加简化高效的存储方案。
  3. 方便定制 由于是软件介质存储方案,因此并不需要符合一些硬件规范的通讯协议,比如scsi,nvme等,用户可以根据自己需求改变功能设计,增加写入日志,定制访问事件,甚至将介质存储改变为对象存储,也是很容易完成的。
  4. 方便的定制扩充nosql能力,提高nosql的一些实际业务效率,降低需求对newsql技术的依赖,长久以来nosql在提高和扩充系统容量性能,降低系统设计复杂性方面成效卓著,但nosql由于缺乏事务能力,数据结构能力固定,导致一些上层业务逻辑设计无法直接在nosql之上落地,织梦师-水桶由于使用rpc技术实现,在介质层有望提供事务定制,业务服务定制能力,将事务以及业务下沉到介质存储层有利于真正解决一些数据业务的效率问题,比如将sql的select操作下沉到存储层后,将大大降低对nosql的网络io需求,提升系统tps能力,因此从根本上使得nosql技术可以快速定制落地满足复杂项目业务需求,从而降低对newsql的需求依赖(newsql并不能高效的适应加速所有业务场景,本身对网络IO的性能以及延迟依赖较大)。
  5. 更灵活高效的介质访问方案 传统的介质访问技术由于考虑到linux windows等传统操作系统的实际能力限制,所以使用了更大的块存储单位,主流的硬盘 SSD都使用4096字节的块读写单位,以便于在linux windows约束下,更有利的发挥硬件带宽,但这却没有解决实际需求问题,反而带来更多性能障碍,织梦师-水桶则提供小到16字节的块访问单位,在同样带宽和内存开销下,相比4096字节的块,16字节在随机读写性能上,理论上则可达到4096字节的256倍,同时上层cache(redis)在缓存小数据时(16字节)同样的内存开销则可缓存256倍的数据项,或者在缓存同样数据项的网络带宽需求降低64倍,由于可变读写长度的优势,因此在做对象存储时对带宽以及内存的利用则变的毫无冗余。
  6. 10倍以上随机读写性能 在SSD成为主流存储方案后,一些基于linux windows操作系统开发的网络分布式cache方案甚至因此磁盘io性能的不适应而被淘汰,原因是SSD在存储容量以及随机读写性能以及数据安全可用性上都优于网络cache产品,但现在情况不同了,异数OS由于网络IO瓶颈解除,使用异数OS开发的cache在随机读写性能上达到SSD 10倍以上,并且由于共享存储特性,则可以很容易做到分布式容量和性能的扩充。

织梦师-水桶 方案说明


1.WriteNotifyClient 启动后在DiskIPCServer注册关注的块写入事件IPC,DiskIPCServer收到注册请求后启动一个对应的WriteNotifyPushThread,WriteNotifyPushThread等待一个写入事件event.

2.ReadWriteClient通过DiskIPCServer提供的DiskIPC服务读写RAM盘,DiskIPCServer在Write IPC中检查write操作,如果有关注的块写入事件,则触发相关event, 相关联的WriteNotifyPushThread因此活跃并通过IPC推送event到WriteNotifyClient。

demo实现以及测试代码在git目录的test目录下,有兴趣的可以观摩下。


织梦师-水桶测试成绩

测试项目中组件通讯分为LPC RPC两种,读测试主要是64线程64字节序列读和随机读,写测试以及WriteNotify的成绩暂时不提供,原因是WriteNotify回和持久化策略以及上层文件系统事件响应能力有关系,LPC是单核环境下,本地服务线程间通讯,RPC是异数OS TCP协议栈实现的跨网络通讯,环境是dpdk 82599 10G网卡环境,所有测试成绩均是指每核性能。

LPC本地64字节序列读

LPC本地64字节随机读

RPC TCP远程64字节序列读

RPC TCP远程64字节随机读

相关存储产品性能对比


数据来自网络,环境目标不同,选取目标产品最大性能值,成绩仅供参考。

引用的其他产品测试成绩

Intel 900P

https://www.chiphell.com/thread-1788441-1-1.html

https://baijiahao.baidu.com/s?id=1588310894168427063&wfr=spider&for=pc

redis

https://blog.csdn.net/zlfprogram/article/details/74338685

测试特性 LPC 64字节1线程序列读 LPC 64字节1线程随机读 RPC 64字节64线程序列读 RPC 64字节64线程随机读 Intel 900P SSD 4K DQ1随机读 Redis 非批量读 Redis 批量读 阿里 PolarDB RDMA
IOPS 13M 6.4M 4.1M 3.5M 55W(实际被操作系统约束在10W) 8W 50W 20W
平均延迟 调用性能/链接数量 调用性能/链接数量 调用性能/链接数量 调用性能/链接数量 10ms+调用性能/链接数量 10ms+调用性能/链接数量 10ms+调用性能/链接数量 10ms+调用性能/链接数量
最小延迟 <1us <1us 10us 10us 1-10ms 1-10ms 1-10ms 1-10ms

异数OS 织梦师-水桶(三)-- RAM共享存储方案的更多相关文章

  1. 异数OS 织梦师-云(五)-- 容器服务化,绿色拯救未来。

    . 异数OS 织梦师-云(五)– 容器服务化,绿色拯救未来. 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652 ...

  2. 异数OS 织梦师-水母(一)--消息队列篇

    异数OS 织梦师-水母(一)–消息队列篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 异数O ...

  3. 异数OS 织梦师-Xnign(四)-- 挑战100倍速Nginx,脚踩F5硬件负载均衡

    . 异数OS 织梦师-Xnign(四)– 挑战100倍速Nginx,脚踩F5硬件负载均衡 本文来自异数OS社区 github: https://github.com/yds086/HereticOS ...

  4. 异数OS 织梦师-纤手(二)-- LPC RPC篇

    异数OS 织梦师-纤手(二)– LPC RPC篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 ...

  5. 异数OS TCP协议栈测试(三)--长连接篇

    异数OS TCP协议栈测试(三)--长连接篇 本文来自异数OS社区 github:   异数OS-织梦师(消息中间件)群: 476260389 异数OS TCP长连接技术简介 说起长连接,则首先要谈对 ...

  6. 异数OS国产CPU平台移植项目需求分析

    异数OS国产CPU平台移植项目需求分析 目录 异数OS国产CPU平台移植项目需求分析 项目立项背景 项目需求分析 异数OS性能指标简介 1.TCP协议栈性能测试 2.异数OS-织梦师-水母 消息队列性 ...

  7. 异数OS TCP协议栈测试(四)--网卡适配篇

    异数OS TCP协议栈测试(四)–网卡适配篇 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455784 异 ...

  8. 异数OS谈发展国产操作系统的问题

    异数OS谈发展国产操作系统的问题 为什么写本文 最近中兴被美制裁的问题以及红芯使用开源技术宣称国产自主技术引发了舆论不少对国产CPU以及国产操作系统自主技术的讨论,为什么我们国家有BAT,有原子弹,能 ...

  9. 异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门

    . 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...

随机推荐

  1. H3C 配置静态及动态域名解析

  2. H3C 端口接入控制方式

  3. linux一个例子驱动

    我们介绍的驱动称为 short (Simple Hardware Operations and Raw Tests). 所有它做 的是读和写几个 8-位 端口, 从你在加载时选择的开始. 缺省地, 它 ...

  4. Linux 内核 kobject 初始化

    本书已经展示了许多数据类型, 带有简单的在编译或者运行时初始化机制. 一个 kobject 的初始化有些复杂, 特别当使用它的所有函数时. 不管一个 kobject 如何使用, 但是, 必须进行几个步 ...

  5. php二维数组转成一维数组

    $arr是需要转换的数组集合 array_reduce($arr, 'array_merge', array());

  6. CP策略含有中文字符提交失败故障解决

    硬件平台:CP5600 系统版本:R80.10 补丁版本:TAKE103 故障现象:提交新增策略失败,日志显示 if the problem persists contact Checkpoint S ...

  7. JAVA8学习——深入浅出Lambda表达式(学习过程)

    JAVA8学习--深入浅出Lambda表达式(学习过程) lambda表达式: 我们为什么要用lambda表达式 在JAVA中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法. 在 ...

  8. 互联网 Java 工程师进阶知识完全扫盲

    互联网 Java 工程师进阶知识完全扫盲:https://github.com/doocs/advanced-java

  9. 转载:通过监控Nginx日志来实时屏蔽高频恶意访问的IP

    通过监控Nginx日志来实时屏蔽高频恶意访问的IP   目前在我的VPS上主要通过两种方式来限制ip的访问次数. 通过Nginx的limit_req配置来限制同一ip在一分钟内的访问次数 通过Ngin ...

  10. 20191031-4 beta week 1/2 Scrum立会报告+燃尽图 02

    此作业要求参见 https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 git地址:https://e.coding.net/Eustia ...