网站备案一般要多久,python做的网站哪些,saas小程序开发,四川城乡与建设厅网站目录 概述RocketMQ 领域模型MQ 解决的问题电商平台案例初步设计引入中间件设计 MQ 选型结束 概述
官网地址
RocketMQ 领域模型
官方领域模型概述
下面图#xff0c;是在自己理解的基础上#xff0c;对官方的模型图添加了一些。 Topic#xff1a;主题#xff0c;可以理解… 目录 概述RocketMQ 领域模型MQ 解决的问题电商平台案例初步设计引入中间件设计 MQ 选型结束 概述
官网地址
RocketMQ 领域模型
官方领域模型概述
下面图是在自己理解的基础上对官方的模型图添加了一些。 Topic主题可以理解为类别、分类的概念。MessageQueue消息队列存储数据的一个容器(队列索引数据)默认每个 Topic下有4个队列被分配出来存储消息。Message消息真正携带信息的载体概念。Producer生产者负责发送消息。Consumer消费者负责消费消息。ConsumerGroup众多消费都构成的整体或构成的集群称之为消费者组。Subscription订阅关系消费者得知道自己需要消费哪个 Topic 下的哪个队列的数。
MQ 解决的问题
对于 MQ 解决的问题做总结。
异步侧重的处理流程流程上将以前的一些同步逻辑改造成为异步的逻辑流程。解耦侧重功能设计在做一些业务架构分析的时候可以有力度有重点的区分主干流程、分支流程。削峰限流侧重在数量级的问题相比于未接入 MQ 时能再次抗上几倍甚至几十倍的流量。延迟调用(准实时、一定延时)侧重定制化诉求在 db 与 MQ 之间做一个抉择(用户下单半小时未支付则自动取消订单不是定时任务而是触发精确操作)。
电商平台案例
初步设计
通过电商平台用户注册送积分、送优惠券这个场景来理解异步解耦合。如果不使用消息中间件电商平台送积分的实现也许是下图这个样子
用户在网站前端注册页面填写相关信息然后调用账号中心服务注册账号。账户中心首先执行用户注册逻辑处理例如判断用户是否已注册、是否符合注册条件等然后写入到数据库。注册成功后需要调用积分中心赠送积分接口给用户送积分。送完积分后再调用优惠券相关接口为用户赠送优惠券。成功送完积分、优惠券后向用户返回“注册成功”。
由上图可知这个 设计 有一个比较严重的问题那就是可扩展性低。 如如果调整活动策略在发送积分的同时还需要发送额外的大礼包就不得不修改用户注册流程并重新部署用户注册模块。
从功能来看需求的变更集中在活动相关的内容。用户注册本身的逻辑并未发生变化但由于用户注册逻辑与活动模块存在耦合两个模块必须一起调整和发布。
另外调用积分、优惠两个功能也会增加用户注册流程时间变长在高并发场景下用户注册易变成系统瓶颈。
引入中间件设计 将注册逻辑与积分、优惠业务分离这样注册逻辑就不会因为积分、优惠业务的变化而修改即使添加了新的大礼包优惠、积分的业务后续也不再变化做到了真正对新增开放对修改关闭。
MQ 选型
一般从业务出发选择合适的 MQ 如果是从普适性出发可根据功能、单机吞吐、水平扩展上进行选择还可以根据公司或团队的技术栈来选择 MQ 如果公司语言以 Erlang 那可以选择 RabbitMQ 性能可以通过更多的集群来解决。如果是以 Java 为主建议使用 Kafka或者 RocketMQ。两者都是性能优秀的中间件在这两者之间选择时可以更多关注功能特性。
特别是 RocketMQ 提供了消息重试、消息过滤、消息轨迹、消息检索等功能特性特别是 RocketMQ 的消息检索功能因此很适合核心业务场景。而 Kafka 更加擅长于日志、大数据计算、流式计算等场景。
如下是常见的 MQ 做的相关对比。
维度对比项KafkaRocketMQRabbitMQ功能维度延迟消息不支持支持支持功能维度优先级队列不支持不支持支持功能维度事务消息支持支持支持功能维度消息重试不支持支持不支持功能维度消息堆积能力强强弱(性能会受影响)功能维度消息回溯支持支持不支持功能维度消息过滤不支持支持不支持功能维度消息轨迹不支持支持支持(需要插件)功能维度多语言支持多语言客户端支持多语言客户端支持多语言客户端功能维度ACL支持支持支持性能维度单机吞吐量百万级十万级万级性能维度消息发送时延ms级us级us级性能维度水平伸缩能力支持(伴随大量数据复制)支持(轻量级)支持其它维度技术栈Java/ScalaJavaErlang
结束
RocketMQ 总体概括至引结束如有疑问欢迎评论区留言。