在高并发的系统中,消息组件是最为常见的一款应用
对比
RacketMQ要比RabbitMQ性能高,但是不合适进行日志数据的采集(大数据采集最好别用)
利用消息组件可以有效地实现数据缓冲的处理操作,例如:现在有一个抢购系系统,是需要考虑高并发状态下的用户请求正常处理问题
服务器一旦接收远超过访问量的并发访问时,服务器可能会宕机,此时最佳的做法就是使用消息组件。
用户发出的消息由消息系统立即回应,但消息并非立即处理,而是进入到了消息系统中等待其他相关子系统处理。
这样一来就可以极大程度减少服务器处理时间,也可以提高项目的吞吐量,起到一个业务操作缓冲功能,而这就是消息组件的重要作用。
在整个的消息组件的处理流程之中需要提供有消息的生产者以及消息的消费者,两个不同的端点,这两端之中基于消息队列进行管理(Java基础学习的队列结构、或者是J.U.C之中学习过延迟队列)。
消息组件是一种基于队列处理模式的服务端应用,在消息组件中分为消息生产者与消息消费者两个处理终端。不管生产者生产了多少个消息,这些消息都会保存在消息组件之中,可以很好的实现削峰填谷的处理效果,避免大规模用户请求所带来的服务瘫痪等相关问题的出现。所有保存在消息组件中的消息数据可以依据自身的业务逻辑需要由消费端按顺序进行处理,这样就可以保证整个业务处理逻辑的可靠性以及服务运行的稳定性,同时基于消息处理机制的方式还可以使得各种第三方平台的接入更加的方便。
落盘主要是为了保证数据持久化,这样即使服务器出现了宕机也不会导致数据丢失,但是由于IO的限制,导致处理性能较差。
刷盘会将数据先写入到内存缓冲区之中,而后由操作系统决定何时写入到磁盘之中进行持久化存储,但是一旦出现服务宕机时,那些保存在内存中未写入的数据就有可能丢失,由于此种形式主要对内存进行读写,处理性能较高。
·同步刷盘(SYNC_FLUSH):当数据写入到缓存后立刻刷盘,在保证刷盘成功的前提下进行客户端响应,此种操作拥有较高的数据可靠性;
·异步刷盘(ASYNC_FLUSH):写入处理速度快,吞吐量大,缓存数据积累到一定时快速写入,但是不能够保证数据的可靠性;