分布式、中间件和消息队列到底是怎么的一种工作模式?


分别解释一下什么是分布式、中间件和消息队列;如果有说的不对的地方 。请留言指正:
分布式
一个业务被拆成多个子业务 。部署在多台服务器上 。这个就叫做分布式 。
我有一个系统A 。提供一个很简单的接口 。根据员工编号查询员工姓名和他的考勤记录 。
我拆开两个系统:人员管理系统B和考勤系统C 。分别部署在两台服务器上 。
这个需求 。需要调用一下系统B 。再调用一下系统C 。最后得到需要的结果 。
这个就是分布式 。
【分布式、中间件和消息队列到底是怎么的一种工作模式?】

分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
中间件
将具体业务和底层逻辑解耦的软件 。
举个例子:
我要开一家炸鸡店(业务端) 。需要鸡肉 。有很多养鸡场(底层) 。我需要一个一个比较价钱 。然后找一家性价比高的养鸡场合作(适配不同底层逻辑) 。可能一段时间后 。我需要重新选一家养鸡场合作 。进货方式、交易方式等要重新制定(重新适配) 。
这一套事情太复杂了 。于是我找到了一个专门整合养鸡场的第三方代理(中间件) 。跟他谈好价格和质量后(统一接口) 。以后我就只需要给代理钱 。然后拿肉就行 。具体这个第三方代理怎么操作 。我不用管 。
分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
消息队列
消息队列可以看做内存中的队列 。有人往里放消息 。有人从里取消息 。
Producer:消息生产者 。
Broker:消息处理中心 。负责消息存储、确认、重试等 。
Consumer:消息消费者 。
消息队列的特点是:异步、解耦、可靠性(消息队列一般会把接收到的消息持久化到本地硬盘上)
用较多的消息队列有ActiveMQ 。RabbitMQ 。Kafka 。RocketMQ 。它们又可以被称作是消息中间件 。消息中间件解决的就是分布式系统之间消息传递的问题 。
举个例子:
比如我是做网上商城的 。有一个短信系统 。当客户下了一个订单之后 。通知客户你下单成功 。
当订单量比较小的时候 。只需要调用发送短信的接口就可以了 。
但是如果订单量大了之后呢 。并且短信发送晚个一两分钟也没有什么问题 。那么就可以使用消息中间件:把待发送的短信发送到消息队列里面 。短信系统从消息队列中取出短信进行发送就可以了 。
而且还有一个好处:如果短信系统挂掉了 。短信消息保存在消息中间件里面不会丢失 。等短信系统恢复了之后 。继续短信发送即可 。
分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
我将持续分享Java开发、架构设计、科技前沿、程序员职业发展等方面的见解 。希望能得到你的关注 。
分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
其他观点:
接触分布式和消息中间件几年的时间了 。有幸回答你的问题!
分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
分布式架构有什么好处呢?
1 。单个服务宕机不影响别的服务正常运行!
2 。单个节点所有的负载分布均衡到了多台服务器上!
3 。各服务之间相互透明 。实现解耦!
现在的用户流量越来越大 。所以分布式基本是以后架构发展必须的一个趋势!
分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
消息中间件应运而生!
分布式、中间件和消息队列到底是怎么的一种工作模式?

文章插图
1 。生产者和消费者之间通过某种方式(点对点或者订阅)实现\"绑定\"!
2 。生产者生产数据 。并发送到消息中间件 。消息中间件进行落库处理!
3 。订阅了消息的消费者通过监听器监听消息中间件 。如果有属于自己的消息 。进行消费!
当然整个过程中间会有数据一致性问题 。怎么解决呢?
只要保证生产消息到消息中间件的时候进行返回值确认保证这一步的数据一致 。然后在消息到消费者的时候保证返回正确结果即可 。如果中间出现异常可进行重试 。或者发邮件等!
到此 。分布式系统的数据传递通过消息中间件解决了!
但是分布式还有比如session 。日志处理 。单点登录等各服务器需要相同的数据的问题 。可通过接到同一个redis缓存进行处理!
分布式服务的配置文件可以通过统一的文件配置中心统一处理!

推荐阅读