MonitorLogging改造(消息接入)
改造前架构:
可以看出原来的流程中,大量业务分析,业务接入耦合在web服务层。大量操作,导致线程线性的挂起线程。
改造后:
将业务通讯抽象成为MonitorQueueManager,并将业务主题抽象放到各自的collection中。
形如:
抽象为一个结构topic,content针对业务分为若干个主题。方便以后切换到mq或者其他的队列中。
MonitorSchedule改造(消息集中处理)
原有处理流程
当时业务比较少,只有一个主处理流程,所以强耦合到main方法中,扩展基本等于0。加之之前开发比较仓促,编码注释基本没有。
现在要将monitorLoging里面的所有业务处理,放到MonitorSchedule中。业务增加,如果架构再不进行改变那即将是个灾难(维护或者业务流程新增)。
现在要将monitorLoging里面的所有业务处理,放到MonitorSchedule中。业务增加,如果架构再不进行改变那即将是个灾难(维护或者业务流程新增)。
改造之后的流程:
看起来也清晰不少吧,原来的业务分成了按照业务事件进行分类。
使用监听器来处理事件本身,就有一个问题。多线程的情况下如何管理业务的处理速度。原有的瓶颈放到mongodb中了,但是,如果线程读取太快了,那么,性能的瓶颈有被移到了任务操作中了。
capped collection
这里我们先说下mongodb的capped collection:
- 固定长度
- LRU队列
- 环装结构,老数据自动覆盖
- 录入队列的数据可以与直接读写磁盘媲美
- 基于日志形式(不可修改,不建立索引情况下速度与写磁盘相同)
所以大家可以看到,如果写到了mongoDB的collection队列之后,序列化能力使得,数据多了一个缓存方式。
代码逻辑
event
事件的结构很简单:
主要三个内容:
- queueName 队列的名称
- topic 消息的主题
- source 真正消息的内容
listener
主要使用了spring的applicationMulticast事件广播,使用了模板方法的设计,降低耦合的同时,也大大的降低了业务实现的难度。
业务实现的逻辑,这里使用内部类来对业务进行分类,防止太多的command出现
命令的接口类
reader
这里将接口定义为两类:
- 持久化层
- 缓存层
利用修饰模式设计,共同被模板类依赖
抽象类实现
这样让代码编写量大大减少
我们来看下具体实现类:这样的设计相比之前的要好了不少
测试中遇到的问题
- collection的大小限制
- 线程等停顿位置
大家可以算一个账,如果一次执行等待200毫秒,处理时间为100豪秒/500条。那么就会出现做500条等待200毫秒,一秒钟只能处理1000 /(200+100)* 500=1500条数据,白白浪费了 400毫秒。所以需要改成没有数据再进行等待操作,如果有则不进行等待。
相关推荐
1.分篇章进行学习,内容控制30分钟内 2.1个月疗程,不要放弃治疗哦 3.图文并茂,有问题请发到邮箱
MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小超过设定大小后,老的数据会被自动抹掉用于存储新的...
MongoDB性能优化
基于MongoDB构建高性能网站技术研究.pdf
本系统是本人初学MongoDb时所写,代码不是很完美,基本实现图书管理系统的增删改查等基本功能,目前尚有一处缺陷未解决——在查询后只能在控制台看到结果,没有反馈到界面上,有兴趣的朋友可以加以修改,相信这是一...
mongodb查询性能 在这个案例中,我们首先使用 ...同时,还可以通过其他方式来进一步优化查询性能,例如使用 projection 选项限制返回的字段、使用 sort 选项排序查询结果、使用 skip 和 limit 选项分页查询等。
基于mongodb存储的军事领域知识图谱问答项目,8大类,100余小类,共计5800项的知识库,该项目不使用图数据库进行存储,通过jieba进行问句解析,问句实体项识别,基于查询模板完成多类问题的查询,主要是提供一种工业...
1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息等)正在做课程设计、期末大作业和毕设项目的...基于MongoDB+Spark+ElasticSearch的电
MongoDB中有一种特殊类型的集合,值得我们特别留意,那就是固定集合(capped collection)。 固定集合可以声明collection的容量大小,其行为类似于循环队列。数据插入时,新文档会被插入到队列的末尾,如果队列已经...
MongoDB数据库性能优化,包括内存优化、存储优化、配置优化
MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化MongoDB疑难杂症分析及优化...
万亿级文档数据库MongoDB集群性能优化实践.pdf
难得见到的MongoDB性能调优文档,文章基于MongoDB的Ops Manager展示指标来分析MongoDB性能问题。
基于MongoDB实现商品管理系统视频
基于MongoDB的数据中台技术实现.pptx
基于MongoDB的分布式地质灾害数据存储策略.docx
基于MongoDB分布式集群架构的日志系统及分片方法.docx
Cube 是一个开源的基于 MongoDB 的数据分析工具 Cube 的收集器接收事件并将这些事件保持在 MongoDB 中。你可通过 UDP、HTTP POST 或者 WebSockets 来发送事件。同时 Cube 内置支持接受来自 collectd 的事件。
MongoDB TPCC事务性能基准测试.pdf
[Packt Publishing] 基于 MongoDB 的 PHP 网络应用开发 初学者指南 (英文版) [Packt Publishing] PHP and MongoDB Web Development Beginner's Guide (E-Book) ☆ 出版信息:☆ [作者信息] Rubayeet Islam [出版...