Moja
moja是什么能做什么
moja是一个支持跨平台,支持高并发,负载均衡,可集群部署的日志队列框架。主要是负责接收日志并将其存储到消费端,比如mongod,hdfs等。支持protobuf和json格式。当前版本是0.9.0
moja的功能实现
1.使用Netty来处理消息生产者的socket请求 2.使用Netty的PB模块处理protobuf协议 3.日志消息队列使用多线程消费,当到达警告数量,持久化部分日志到本地,定时扫描本地日志目录,将日志载入到消息队列中 3.存储端可自定义可配置,使用MongoDb可应对实时性的高并发写入需求 4.使用Zookeeper搭建ServerSocket端集群,实现高可用。 5.消息类型可以根据业务类型的不同设置不同的优先级,进行分开的批量化处理。 6.消息队列监控页面通过http请求和html页面实现,监控界面可优雅的关闭日志系统 7.针对PB协议使用自带方法实现高效的消息持久化,针对JSON使用FastJson实现消息持久化
moja如何定制化
首先moja支持2种日志数据传输格式,Google的protobuf或者JSON。使用protobuf的时候,使用它自带的方法进行日志持久化,如果使用JSON格式传输,使用FastJson进行持久化。 修改log.transfer.type的属性,指定你想要使用的日志格式。 如果使用protobuf,只需要将自己定制好的.proto文件放到proto文件夹下面,然后修改配置文件中的protobuf.class这个属性,修改为自己在protobuf文件中定义java类即可。 系统在启动的时候会自动根据proto文件生成对应的protobuf类。
moja技术演进
moja这个系统首先需要处理socket端的连接,这个的解决方法是从传统的BIO,到NIO再到Netty一步步演进过来的。 而对于消息队列的处理使用的BlockingQueue,然后加上可配置的线程来消费消息。 而消息队列的持久化,在消息消费失败,或者消息队列快慢的时候需要将消息持久化到本地,等待队列不那么拥挤的时候,将消息载入到队列中。
因为需求不清楚,需要针对绝不可丢消息,可以丢部分消息等都进行支持。所以需要采用不同的方案,而不同的需求采取不同的方案对于整个系统的性能影响也是十分的明显。 moja中没有保证消息的完全不可丢失。
moja待改进
1.消息队列的监控可能会改用JMX技术实现。 2.想通过一种松耦合的方式实现保证消息的完全不丢失机制