Disque:Redis之父新开源的分布式内存作业队列
Disque是Redis之父Salvatore Sanfilippo新开源的一个分布式内存消息代理。它适应于"Redis作为作业队列"的场景,但采用了一种专用、独立、可扩展且具有容错功能的设计,兼具Redis的简洁和高性能,并且用C语言实现为一个非阻塞网络服务器。
Redis的作者Salvatore Sanfilippo(网名Antirez)发表的一篇博客文章,介绍了自己几个月以来在晚上和周末开发的新项目——Disque。
开发初衷
Antirez之所以动念开发Disque,是因为看到很多人用Redis来处理队列,但这样做的优势和劣势都很明显:Redis很快、易用而且很多基础设施里已经在用;但是Redis的高可用性/集群特性的设计完全偏向可变数据结构,这与不可变的消息非常不同,并非最佳方案。
消息中介重要的功能是保证至少一次或者最多一次发送消息,而且前者更重要。Antirez开始想通过少量修改Redis来实现,但几天后发现客户端算法太复杂了。Redis已经有很多功能,再增加功能并非什么好主意。何况消息队列的运作方式与Redis很不同。
那么,是不是可以新开发一个消息队列呢?
世界上已经有很多消息队列了,新做一个有价值吗?Antirez想,既然有这么多人用Redis来处理消息队列,已有的方案看上去要么太简单要么太复杂,其中必有机会,于是他动手了。
开发过程
他头一次没有直接写代码,而是花了几个星期思考设计,尝试从用户角度理解什么样的消息队列会让人更爽。主要的使用场景没变:延迟作业。Disque是通用系统,但主要针对的问题,是发送可能要处理的作业的消息。如果有什么违背了这一场景,就会被干掉。
设计有了,Antirez直接从Redis代码入手。幸运的是Redis部分就是编写C分布式系统的一个框架。协议、网络库、客户端处理、结点到结点的消息总线已经有了,无需重头再写。但他又不想影响Redis本身,于是采取了比较实际的办法:开一个Redis分支,然后将Redis专用的东西全部删掉,只剩一个框架,再开始实现设计。
很幸运的是有C#的
客户端来操作Disque: https://github.com/ziyasal/Disque.Net .
相关链接:
Disque:Redis之父新开源的分布式内存作业队列的更多相关文章
- 一个高性能、轻量级的分布式内存队列系统--beanstalk
Beanstalk是一个高性能.轻量级的.分布式的.内存型的消息队列系统.最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟.其实Beanstalkd是典型的类Mem ...
- Redis之父九条编程忠告
最近在学习redis,特地了解了一下redis之父Salvatore Sanfilippo ,而看到了一篇优秀的文章,总解分享之 个人解读总结如下 取巧编程品质key word: 过硬的编码能力 快 ...
- Spark入门实战系列--10.分布式内存文件系统Tachyon介绍及安装部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Tachyon介绍 1.1 Tachyon简介 随着实时计算的需求日益增多,分布式内存计算 ...
- 分布式内存对象缓存系统Memcached-概述
全面掌握Memcached 1. 概述 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,是为了加快网站http://www. ...
- Redis之父表示ARM服务器没戏!
ARM表示Neoverse N1平台和E1 CPU即将发布,Neoverse N1和E1采用7nm制程,并且为服务器和通信设备增加重要提升,拥有高可扩展性.高处理量以及高性能,将分别在2020年和20 ...
- Python并发编程-Memcached (分布式内存对象缓存系统)
一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...
- Spring Boot集成Hazelcast实现集群与分布式内存缓存
Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展.高性能的分布式内存计算.并通过提供诸如Map,Queue,ExecutorService,Lock和JCach ...
- Redis中是如何实现分布式锁的?
分布式锁常见的三种实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. 本地面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的. 要点 Red ...
- Alluxio : 开源分布式内存文件系统
Alluxio : 开源分布式内存文件系统 Alluxio is a memory speed virtual distributed storage system.Alluxio是一个开源的基于内存 ...
随机推荐
- Asp.net Boilerplate之AbpSession扩展
当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...
- 关于 Chrome 浏览器中 onresize 事件的 Bug
我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...
- 启用 Open vSwitch - 每天5分钟玩转 OpenStack(127)
Linux Bridge 和 Open vSwitch 是目前 OpenStack 中使用最广泛的两种虚机交换机技术. 前面各章节我们已经学习了如何用 Linux Bridge 作为 ML2 mech ...
- 谈谈一些有趣的CSS题目(九)-- 巧妙的实现 CSS 斜线
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- 掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
- ,net core mvc 文件上传
工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...
- 【JS基础】对象
delete 可以删除对象属性及变量 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);// ...