光泽网站建设wzjseo,上海seo培训中心,提供网站建设排行榜,15 企业网站优化方案有哪些内容文章目录 分析系统现状不足中间件消息队列什么是消息队列#xff1f;应用场景消息队列的模型为什么不直接传输#xff0c;而要用消息队列#xff1f;为什么要用消息队列#xff1f;消息队列的缺点#xff1f; 分布式消息队列分布式消息队列的优势#xff1f;消息队列应用… 文章目录 分析系统现状不足中间件消息队列什么是消息队列应用场景消息队列的模型为什么不直接传输而要用消息队列为什么要用消息队列消息队列的缺点 分布式消息队列分布式消息队列的优势消息队列应用场景主流分布式消息队列选型 分析系统现状不足
现状目前的异步是通过本地的线程池实现的 1 无法集中限制分布式只能单机限制 解决方案在一个集中的地方去管理下发任务 2 任务由于是放在内存中执行的可能会丢失 解决方案把任务放在一个可以持久化存储的硬盘 3优化如果你的系统功能越来越多长耗时任务越来越多系统会越来越复杂 服务拆分应用解耦可以把长耗时消耗很多的任务把它单独抽成一个程序不要影响主业务 解决方案可以有一个中间人让中间人帮我们去连接两个系统比如核心系统和智能生成业务
中间件
连接多个系统帮助多个系统紧密协作的技术或者组件 比如Redis,消息队列分布式存储Etcd
消息队列
什么是消息队列
存储消息的队列。 存储存数据 消息某种数据结构。比如字符串对象二进制数据JSON等等 队列先进先出的数据结构
应用场景
在多个不同的系统应用之间实现消息的传输也可以存储不需要考虑传输应用的编程语言系统框架等等
消息队列的模型
生产者消费者消息消息队列
为什么不直接传输而要用消息队列
生产者不用关心你的消费者要不要消费什么时候才消费我只需要把东西给消费队列我的工作就算完成了生产者和消费者实现了解耦互不影响
为什么要用消息队列
1异步处理 生产者发送完消息之后可以继续去忙别的消费者想什么时候消费都可以不会产生阻塞 2削峰填谷 先把用户的请求放到消息队列中消费者可以按照自己的需求慢慢去取 原本12 点时来了 10 万个请求原本情况下10万个请求都在系统内部立刻处理很快系统压力过大就宕机了。 现在把这 10万个请求放到消息队列中处理系统以自己的恒定速率比如每秒 1 个慢慢执行从而保护系统、稳定处理
消息队列的缺点
增加成本开发维护部署消息丢失顺序性重复消费数据一致性分布式系统需要考虑
分布式消息队列
分布式消息队列的优势
1数据持久化可以把消息集中存储到硬盘里服务器重启就不会丢失 2可扩展性可以根据需求随时增加或减少节点继续保持稳定的服务 3应用解耦可以连接各个不同的语言框架开发的系统让这些系统能够灵活传输读取数据 应用解耦的优点 以前把所有功能放到同一个项目中调用多个子功能时一个环节出错系统就整体出错 使用消息队列进行解耦
一个系统挂了不影响另一个系统系统挂了并恢复后仍然可以取出消息继续执行业务只要发送消息到队列就可以立即返回不用同步调用所有系统性能更高
4发布订阅 如果一个非常大的系统要给其他子系统发送通知最简单直接的方式是大系统直接依次调用子系统 问题
每次发通知都要调用很多系统很麻烦有可能失败新出现的项目无法得到通知 解决方案大的核心系统始终往一个地方消息队列去发消息其他的系统都去订阅这个消息队列读取消息队列中的消息 打个比喻老板发布者要通知一件事情给员工消费者方式1 给员工依次发通知方式2 建个群消息队列发通知。方式一不仅非常麻烦耗时有时候网不好服务器压力大时还发不出去。方式2呢就是老板只需要把消息发送到群里消息队列员工打开查看即可。
消息队列应用场景
耗时的场景异步高并发场景异步削峰填谷分布式系统协作跨团队跨业务协作应用解耦强稳定性的业务比如金融业务持久化可靠性削峰填谷
主流分布式消息队列选型
主流技术
activemqrabbitmqkafkarocketmqzeromqpulsar(云原生)Apache InLong(Tube)
技术对比 技术选型指标
吞吐量IO高并发时效性类似延迟消息的发送到达时间可用性系统可用的比率可靠性消息不丢失功能正常完成
技术名称吞吐量时效性可用性可靠性优势应用场景activemq万级高高高简单易学中小型企业、项目rabbitmq万级极高微秒高高生态好基本什么语言都支持、时效性高、易学适合绝大多数分布式的应用这也是先学他的原因kafka十万级高毫秒以内极高极高吞吐量大、可靠性、可用性强大的数据流处理能力适用于 大规模处理数据的场景比如构建日志收集系统、实时数据流传输、事件流收集传输rocketmq十万级高ms极高极高吞吐量大、可靠性、可用性可扩展性适用于 金融 、电商等对可靠性要求较高的场景适合 大规模 的消息处理。pulsar十万级高ms极高极高可靠性、可用性很高基于发布订阅模型新兴技术架构先进适合大规模、高并发的分布式系统云原生。适合实时分析、事件流处理、IoT 数据处理等。
由此看来RabbitMQ不仅应用广泛而且易于学习下期分享RabbitMQ入门实战