在Netflix的平台上运行着许多的业务流程,这些流程的任务是经过异步编排进行驱动,如今咱们要实现一个分布式延迟队列,这个延迟队列具备以下特色:java
Dynomite是一种通用的实现,能够与许多不一样的key-value存储引擎一块儿使用。目前它提供了对Redis序列化协议(RESP)和Memcached写协议的支持。咱们选择Dynomite,是由于其具备性能,多数据中心复制和高可用性的特色。此外,Dynomite提供分片和可插拔的数据存储引擎,容许咱们在数据需求增长垂直和水平扩展。面试
咱们选择Redis做为构建队列的存储引擎:redis
一个队列被存储为Redis的有序集合(ZADD和ZRANGE等操做),Redis使用分数对有序集合中的成员进行排序,当往队列中存储数据时,根据优先级和超时时间计算分数。服务器
对于每一个队列,维护三组Redis数据结构:数据结构
PUSH架构
POP并发
ACK框架
咱们的队列是在Dynomite的JAVA客户端Dyno之上创建的,Dyno为持久链接提供链接池,而且能够配置为拓扑感知,此外,Dyno为应用程序提供特定的本地机架(在AWS中,机架是一个区域,例如 us-east-1a、us-east-1b等),us-east-1a的客户端将链接到相同区域的Dynomite/Redis节点,除非该节点不可用,在这种状况下该客户端将进行故障转移。这个属性被用于经过区域划分队列。异步
分片
队列根据可用区域进行分片,将数据推送到队列时,经过轮训机制肯定分片,这种机制能够确保全部分片的数据是平衡的,每一个分片都表明Redis中的有序集合,有序集中的key是queueName和AVAILABILITY _ZONE的组合。分布式
避免全局锁
处理Un-ACK的消息
后台进程监视UNACK集合中的消息,这些消息在给定时间内未被客户端确认(每一个队列可配置)。这些消息将移回到队列中。
感兴趣能够加Java架构师群获取Java工程化、高性能及分布式、高性能、深刻浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走不少的弯路的 群..号是:855801563 对了 小白勿进 最好是有开发经验
注:加群要求
一、具备工做经验的,面对目前流行的技术不知从何下手,须要突破技术瓶颈的能够加。
二、在公司待久了,过得很安逸,但跳槽时面试碰壁。须要在短期内进修、跳槽拿高薪的能够加。
三、若是没有工做经验,但基础很是扎实,对java工做机制,经常使用设计思想,经常使用java开发框架掌握熟练的,能够加。
四、以为本身很牛B,通常需求都能搞定。可是所学的知识点没有系统化,很难在技术领域继续突破的能够加。
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工做经验的梳理和总结,带着你们全面、科学地创建本身的技术体系和技术认知!