All Projects → Qiwc → Message Queue

Qiwc / Message Queue

第四届阿里中间件性能挑战赛复赛-JAVA-第21名

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Message Queue

Pmq
信也科技MQ消息系统
Stars: ✭ 333 (+1981.25%)
Mutual labels:  message-queue
One Nio
Unconventional I/O library for Java
Stars: ✭ 469 (+2831.25%)
Mutual labels:  nio
Weevent
Event-Driven Architecture Based on Blockchain.基于区块链的事件驱动架构
Stars: ✭ 608 (+3700%)
Mutual labels:  message-queue
Xxl Mq
A lightweight distributed message queue framework.(分布式消息队列XXL-MQ)
Stars: ✭ 358 (+2137.5%)
Mutual labels:  message-queue
Happychat
基于Netty实现的WebSocket聊天室,支持几万人同时在线聊天
Stars: ✭ 445 (+2681.25%)
Mutual labels:  nio
Nsq
A realtime distributed messaging platform (forked from https://github.com/nsqio/nsq)
Stars: ✭ 476 (+2875%)
Mutual labels:  message-queue
Tcpshm
A connection-oriented persistent message queue framework based on TCP or SHM(shared memory)
Stars: ✭ 314 (+1862.5%)
Mutual labels:  message-queue
Mycat2
MySQL Proxy using Java NIO based on Sharding SQL,Calcite ,simple and fast
Stars: ✭ 750 (+4587.5%)
Mutual labels:  nio
Chat
Java NIO+多线程实现聊天室
Stars: ✭ 454 (+2737.5%)
Mutual labels:  nio
Siberite
Siberite is a simple, lightweight, leveldb backed message queue written in Go.
Stars: ✭ 583 (+3543.75%)
Mutual labels:  message-queue
Nsq
A realtime distributed messaging platform
Stars: ✭ 20,663 (+129043.75%)
Mutual labels:  message-queue
Cookbook
🎉🎉🎉JAVA高级架构师技术栈==任何技能通过 “刻意练习” 都可以达到融会贯通的境界,就像烹饪一样,这里有一份JAVA开发技术手册,只需要增加自己练习的次数。🏃🏃🏃
Stars: ✭ 428 (+2575%)
Mutual labels:  nio
Plumber
A swiss army knife CLI tool for interacting with Kafka, RabbitMQ and other messaging systems.
Stars: ✭ 514 (+3112.5%)
Mutual labels:  message-queue
Mobileimsdk
一个原创移动端IM通信层框架,轻量级、高度提炼,历经8年、久经考验。可能是市面上唯一同时支持UDP+TCP+WebSocket三种协议的同类开源框架,支持iOS、Android、Java、H5,服务端基于Netty。
Stars: ✭ 3,864 (+24050%)
Mutual labels:  nio
Jafka
a fast and simple distributed publish-subscribe messaging system (mq)
Stars: ✭ 697 (+4256.25%)
Mutual labels:  message-queue
Message Io
Event-driven message library for building network applications easy and fast.
Stars: ✭ 321 (+1906.25%)
Mutual labels:  message-queue
Nats Operator
NATS Operator
Stars: ✭ 471 (+2843.75%)
Mutual labels:  message-queue
Huststore
High-performance Distributed Storage
Stars: ✭ 806 (+4937.5%)
Mutual labels:  message-queue
Rmq
Message queue system written in Go and backed by Redis
Stars: ✭ 722 (+4412.5%)
Mutual labels:  message-queue
Taskq
Golang asynchronous task/job queue with Redis, SQS, IronMQ, and in-memory backends
Stars: ✭ 555 (+3368.75%)
Mutual labels:  message-queue

第四届阿里中间件性能挑战赛复赛

1 前言

这个复赛我们非常卖力,算是较早一批JAVA跑的很好的选手,曾经都第6过,奈何我们有些机制一直没有理解到位,一些并发上的小技巧也十分欠缺,一直停滞不前最后21名。这个代码大家可以借鉴思想,具体磁盘NIO的一些操作做的并不是很专业。这点后面在做PolarDB比赛的时候,我们经过进一步的学习,我们做的很好啦,大家可以再看一下我们PolarDB初赛JAVA的代码。

这道题目有几个非常重要的点:

  • 4G内存
  • 100w个队列
  • 每个队列2000条消息左右
  • 每条消息50字节左右
  • 总数据量100G左右

要求重写两个函数

put(String queueName, byte[] message)
Collection<byte[]> get(String queueName, long offset, long num)

test/文件中,是本地测试文件,可直接运行测试

题目链接


2 结构

  1. 由于内存远远无法容下所有消息(20亿个)的索引,故采取了稀疏索引,内存维护两个关键的Hash表:

    ​ key-队列名,value-每20条消息在文件中的位置

    ​ key-队列名,value-20条消息的缓存

  2. 首先,每来一个消息我都先放到第二个hashmap中,每次我都检查放完之后,这个队列当前内存是否缓存够了20条。如果到了20条,我们就会刷盘,并且把这20条消息的起始位置放入第一个hashmap中。刷盘的时候,每条消息都要用一个字节来存这条消息的长度。

  3. 一共100个G的数据,为了减小索引大小,让它在int这么大,所以我们开很多2G的文件用来存储消息。当然是根据队列名字%文件数量来判断这个队列的消息在哪个文件中。

  4. 读的时候很简单,首先判断在哪个文件中,然后去第一个队列中取出这条消息所在的20个消息的索引,然后就去文件里找啦。


3 总结

这个代码主要是想法比较直接,具体的IO操作做的真的不怎么样。想看操作的话,看看PolarDB大赛的代码

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].