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毫秒。所以需要改成没有数据再进行等待操作,如果有则不进行等待。
相关推荐
MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小超过设定大小后,老的数据会被自动抹掉用于存储新的...
MongoDB中有一种特殊类型的集合,值得我们特别留意,那就是固定集合(capped collection)。 固定集合可以声明collection的容量大小,其行为类似于循环队列。数据插入时,新文档会被插入到队列的末尾,如果队列已经...
针对 MongoDB 的优化是提高数据库性能的关键,这通常涉及到多个方面,包括内存配置、查询优化、索引管理和集群架构调整等。 首先,我们可以修改 MongoDB 的默认内存配置以适应更大的数据处理需求。在 MongoDB ...
MongoDB 有一个数据库优化工具 Database Profiler,这个工具能检测数据库操作的性能。使用这个工具可以发现 query 或者 write 操作中执行效率低的,从而针对这些操作进行优化。 优化 count() 查询操作 在 count() ...
### MongoDB性能优化详解 #### 一、查询操作的优化 在MongoDB中,查询操作的优化对于提升系统整体性能至关重要。以下是一些关键的技术点: ##### 1. 创建索引 - **定义**:索引是在数据库表的一个或多个列上创建...
- **实时数据推送**:利用capped collection特性实现tailable cursor,实时向应用服务器推送成交消息,更新股价、财报等各类实时数据。 #### 结论 综上所述,MongoDB作为一种高性能、高可用且易于扩展的NoSQL...
MongoDB的复制集(Replica ...总之,MongoDB的复制集提供了高可用性和数据冗余,通过合理配置和优化,可以有效提高系统的稳定性和性能。理解并掌握oplog、复制集的配置以及监控方法是确保MongoDB集群正常运行的关键。
总之,MongoDB的优化涉及多个层面,包括正确配置存储引擎、避免不必要的水平切分、利用Capped Collection、采用副本集以及善用`explain`命令。这些经验分享对于任何正在或计划使用MongoDB的人来说都是非常有价值的...
《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...
**MongoDB**是一种基于分布式文件存储的开源数据库系统,具有高性能、高可用性以及易扩展性等特点,适用于处理大规模数据集的应用场景。 ##### 1.1 下载与安装 - **官方网址**: [MongoDB官方网站]...
MongoDB 是一种流行的开源文档...在日常操作中,MongoDB 的管理命令是管理员进行数据管理、备份、恢复、性能优化以及问题排查的关键工具。熟练掌握这些命令,能够有效地管理和维护 MongoDB 集群,确保系统的稳定运行。
MongoDB 还提供了一种特殊的集合类型——“固定大小集合”(Capped Collections),用于实现高性能的队列功能。Capped Collections 有固定的存储容量,一旦达到上限,新插入的数据会替换最旧的数据,保持集合的大小...
《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...