后浪笔记一零二四

1消息中间件NATS基础知识

一个传统的应用:

+------+        +------+      +----+
|mobile|---1--->|api   |--2-->|DB  |
|phone |<--4----|server|<-3---|    |
+------+        +------+      +----+

客户端发请求,然后服务端处理,处理完后,它会和数据库进行交互,比如存取数据。

返回之后呢,服务器端再直接返回给这个客户端。整个过程其实是一个同步的过程。

客户端发出请求后,它是一直在等待着,直到服务端完成处理最后返回结果。

使用消息中间件开发的应用

                          +----------------------------+
+------+      +------+    |message oriented middleware |<---[order svc]--->[DB]
|mobile|----->|api   |--->|  [ ][x][x][x]              |
|phone |<-----|server|<---|  [ ][x][x][x]              |
+------+      +------+    |                            |<---[email svc]--->[SMTP Server]
                          +----------------------------+

有很多业务,可能后台处理逻辑是非常复杂的,客户端,不可能一直等着服务器端处理,有的时候会造成超时啊什么的。

用户的体验会变得非常的差。对这种服务端需要多重处理,或者处理时间比较长的一些服务,其实我们推荐使用这个消息中间件。

整个过程是这样的:

客户端发起请求之后,服务端收到请求处理简单的业务,然后会把一些复杂的业务通过消息中间件推到后端的服务去处理。

这个过程,其实在我把消息扔到消息中间件之后,我就认为我的业务处理是已经成功的,那我就会把结果返回给客户端。

那后端的服务呢,会从消息队列中去取相应的消息,做相应的处理。比如订单的服务,发送邮件的服务。

这样处理呢,其实还有很多的好处。比如说我发送邮件的服务,在这个邮件服务器发生异常的时候,那我这个服务的消息处理相当于失败了。其实这个消息还会放回队列里,等到下次重试,再重新去处理这个消息。

消息的基础知识

发布-订阅:
                                         +----------+
                                +-msg1-->|subscriber|
                    +-------+   |        +----------+
+---------+         |       |   |        +----------+
|publisher|--msg1-->|Subject|---+-msg1-->|subscriber|
+---------+         |       |   |        +----------+
                    +-------+   |        +----------+
                                +-msg1-->|subscriber|
                                         +----------+


消息队列:
                                           +----------+
                                  +-msg2-->|subscriber|
                        +-----+   |        +----------+
+---------+             |     |   |        +----------+
|publisher|--msg1,2,3-->|Queue|---+-msg1-->|subscriber|
+---------+             |     |   |        +----------+
                        +-----+   |        +----------+
                                  +-msg3-->|subscriber|
                                           +----------+


Req-Resp:
    其实,也是发布和订阅的模式,通过客户端封装出来的。
    发送方,发送消息到消息中间件之后,订阅者收到消息可以回复这个发送者。
                                         +----------+
                                +-msg1-->|subscriber|
                    +-------+   |        +----------+
+---------+         |       |   |        +----------+
|publisher|--msg1-->|Subject|---+-msg1-->|subscriber|
+----+----+         |       |   |        +----------+
     ^              +-------+   |        +----------+
     |              +------+    +-msg1-->|subscriber|
     |              |      |             +-----+----+
     +--------------|Reply |                   |
                    |      |<------------------+
                    +------+

主题 (Subject/Topic)

主题就是一个字符串表示的名称,能确保发布者和订阅者可以使用该名称来查找对方。

发布者 (Publisher)

消息的发送方

订阅者 (Subscriber)

消息的接收方(消费方)

NATS集群高可用架构+LeafNode(边缘节点)架构图

+------++----------------------------------------------------------+
|      ||                        React-client                      |
|auth  |+----------------------------------------------------------+
|server|+----------------------------------------------------------+
|      ||Beijing: main-cluster                                     |
|      ||  [other service] [restful api service]  [cluster-mgr]    |
|      ||          ^|                ^|                  ^|        |
|      ||          |v                |v                  |v        |
|      ||          ++----------------++------------------++        |
|      ||                            |^                            |
|      ||                            v|                            |
|      ||                     {NATS cluster}                       |
+------++---------------------------+-+----------------------------+
                                    ^ |
                                    | v
+-----------------------------------+-+----------------------------+
|                              NATS GATEWAY                        |
+--------------------------+-+-----------------------------+-+-----+
                           ^ |                             ^ |
                           | v                             | v         +---------+
+--------------------------+-+----++-----------------------+-+-----+   |NATS Leaf|
|Guangzhou:cluster1 {NATS cluster}||Beijing:cluster2 {NATA cluster}<-->|  NODE   |
|                           ^     ||                        ^      |   +----+----+
|                           |msg  ||                        |msg   |        |
|                           v     ||                        v      |        |
|                     cluster-mgr ||                   cluster-mgr |        v
+---------------------------------++-------------------------------+   [IoT Device]

专题:

本文发表于 2022-01-01,最后修改于 2022-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « innodb 下一篇 » 2安装及命令行基础功能使用

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image