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

宋晓培


分布式:

用于实现任务的分担,比如之前有一个办业务的窗口,随着客流量多,多开几个办理业务窗口,这样多个窗口,同时工作,分担任务。

这时会出现问题了,那么多个窗口,客户来了该去那个窗口,这个时候会让客户去取号机,取号,其实取号机就是中间件的角色,只是类似消息队列的中间件。

分布式要解决的问题很多,其中两个最重要的是:分布式锁和分布式事务。可以参考我发的文章。

中间件:

简单来说就是一座桥,是连接各方的中枢。

上面的例子中,如果多个窗口内部中间需要协作,一般是找个中间人,俗话说就是跑腿的,在各个窗口之间来回折腾,这样每个窗口的业务员不用动,只需要告诉中间人就行了,然后继续办理其他客户的业务。

有时候消息队列也是实现中间件的一直方式。

消息队列

其实就是一个排队的机制,然后实现通知机制。

消息队列一般用于:

1.日志记录

2.流量削峰

3.通讯

4.系统解耦(中间件)

5.实现分布式事务的最终一致性

6.等等


全民学编程


分别解释一下什么是分布式、中间件和消息队列;如果有说的不对的地方,请留言指正:

分布式

一个业务被拆成多个子业务,部署在多台服务器上,这个就叫做分布式

我有一个系统A,提供一个很简单的接口,根据员工编号查询员工姓名和他的考勤记录。

我拆开两个系统:人员管理系统B和考勤系统C,分别部署在两台服务器上。

这个需求,需要调用一下系统B,再调用一下系统C,最后得到需要的结果。

这个就是分布式。

中间件

将具体业务和底层逻辑解耦的软件。

举个例子:

我要开一家炸鸡店(业务端),需要鸡肉,有很多养鸡场(底层),我需要一个一个比较价钱,然后找一家性价比高的养鸡场合作(适配不同底层逻辑)。可能一段时间后,我需要重新选一家养鸡场合作,进货方式、交易方式等要重新制定(重新适配)。

这一套事情太复杂了,于是我找到了一个专门整合养鸡场的第三方代理(中间件),跟他谈好价格和质量后(统一接口),以后我就只需要给代理钱,然后拿肉就行。具体这个第三方代理怎么操作,我不用管。

消息队列

消息队列可以看做内存中的队列,有人往里放消息,有人从里取消息。

  • Producer:消息生产者。
  • Broker:消息处理中心,负责消息存储、确认、重试等。
  • Consumer:消息消费者。

消息队列的特点是:异步、解耦、可靠性(消息队列一般会把接收到的消息持久化到本地硬盘上)

用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ,它们又可以被称作是消息中间件,消息中间件解决的就是分布式系统之间消息传递的问题。


举个例子:

比如我是做网上商城的,有一个短信系统,当客户下了一个订单之后,通知客户你下单成功。

当订单量比较小的时候,只需要调用发送短信的接口就可以了。

但是如果订单量大了之后呢,并且短信发送晚个一两分钟也没有什么问题,那么就可以使用消息中间件:把待发送的短信发送到消息队列里面,短信系统从消息队列中取出短信进行发送就可以了。

而且还有一个好处:如果短信系统挂掉了,短信消息保存在消息中间件里面不会丢失,等短信系统恢复了之后,继续短信发送即可。

我将持续分享Java开发、架构设计、科技前沿、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


接触分布式和消息中间件几年的时间了,有幸回答你的问题!

什么是分布式?相对于以前单一系统,所有的功能,服务都部署在一台服务器上,一挂全挂!分布式采用了把系统提供的服务分布在不同的服务器上的策略,这样的架构就叫做分布式架构!



分布式架构有什么好处呢?

1,单个服务宕机不影响别的服务正常运行!

2,单个节点所有的负载分布均衡到了多台服务器上!

3,各服务之间相互透明,实现解耦!

现在的用户流量越来越大,所以分布式基本是以后架构发展必须的一个趋势!

分布之后问题来了,以前的单一系统,所有服务都在同一个同一个机器,在同一个内存里面,直接调用即可,但是现在分布在不同的jvm中,怎么调用呢?或者说数据怎么传输?



消息中间件应运而生!

目前我用过的消息中间件有activemq,ons,kafka,其实所有的消息中间件本质都一样,


1,生产者和消费者之间通过某种方式(点对点或者订阅)实现"绑定"!

2,生产者生产数据,并发送到消息中间件,消息中间件进行落库处理!

3,订阅了消息的消费者通过监听器监听消息中间件,如果有属于自己的消息,进行消费!

当然整个过程中间会有数据一致性问题,怎么解决呢?

只要保证生产消息到消息中间件的时候进行返回值确认保证这一步的数据一致,然后在消息到消费者的时候保证返回正确结果即可,如果中间出现异常可进行重试,或者发邮件等!

到此,分布式系统的数据传递通过消息中间件解决了!

但是分布式还有比如session,日志处理,单点登录等各服务器需要相同的数据的问题,可通过接到同一个redis缓存进行处理!

分布式服务的配置文件可以通过统一的文件配置中心统一处理!

添加服务注册和发现,还有服务宕机的监控处理!

分布式在现如今数据量暴增,服务全面化的年代有着越来越重要的作用,也是一个不可避免的趋势!

学好分布式,工资暴增日!

关于分布式还有更多的细节诸如数据安全,数据一致性,重复调用,幂等性等等的问题,来来来,我们一块研究!


分享到:


相關文章: