目录
- 消息队列的基本知识概述
- 什么是消息队列?
- 为何要使用消息队列的原因?
- 理解消息队列服务器和 Web 服务器的关系
- 题外:关于服务端和客户端的企业级理解
- 了解 Web 服务器
- 了解 Web 框架和 Web 服务的区别
- 对于框架和服务器B/S架构消息队列的个人理解:
- 浏览器 B/S 架构的业务逻辑个人理解:
测试环境:
操作系统: Window 10
工具:Pycharm
Python: 3.7
消息队列的基本知识概述
什么是消息队列?
消息(
Message
)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue —— MQ
)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到MQ
中而不用管谁来取,消息使用者只管从MQ
中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
我认为这里的应用,应该是如 App、PC端软件之类的客户端应用软件,向服务端(服务器)发送消息
(客户端
) 生产者 —(消息队列
)—> 消费者 (服务端
)
为何要使用消息队列的原因?
从上述中可以看出消息队列是一种应用间的异步协作机制,那什么时候需要使用
MQ
呢?以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用
MQ
,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到MQ
让主流程快速完结,而由另外的单独线程拉取MQ
的消息(或者由MQ
推送消息),当发现MQ
中有发红包或发短信之类的消息时,执行相应的业务逻辑。
以上是用于业务解耦的情况,其它常见场景包括最终一致性、广播、错峰流控等等。
理解消息队列服务器和 Web 服务器的关系
对于这里的理解是,以业务为优先考虑,所以才采用消息队列,比较参考下淘宝 双11,每秒订单破50万,这对于系统的性能需求来说,简直是个无底洞,所以利用到了消息队列,来满足业务的性能需求,是非常有必要的。再深入一点来说,可以认为订单是所谓的高并发操作,而红包,发短信等是延时操作,属于低并发操作,那么服务器要怎么处理高并发操作呢?那就是利用Web
服务器的负载均衡服务,而处理低并发操作,就需要消息队列服务器来处理,比如 Rabbit MQ
(兔子消息队列服务器)
题外:关于服务端和客户端的企业级理解
了解 Web 服务器
比较常用的 Web 服务器:Apache
、Nginx
、Tomcat、Lighttpd、Zeus、IIS
Web服务器的开发语言链接:https://www.oschina.net/
可以通过此链接查找 Web 服务器的开发语言
eg:
了解 Web 框架和 Web 服务的区别
Web
服务器(Web server
)的主要作用是,接收客户端请求,而Web
框架(Web framework
)则是处理web服务器收到的请求,并生成HTML
内容,将生成的 HTML
内容传递给Web
服务器,再由Web
服务器返回给客户端 (浏览器)。
这里就不得不提到 Python 的 Web
框架 —— Django
、Flask
、web.py
,这三个python Web
框架(框架排名链接),一般新手学习前三个就好了,其他的框架看自己兴趣能力了。
① 使用
Web
框架的作用:是为了方便程序员高效搭建自动化创建HTML
内容 —— 生成用户友好内容;②
Web
服务器(Web server)的主要作用:接收客户端请求;
对于框架和服务器B/S架构消息队列的个人理解:
使用
Web
服务器是对Web
框架生成HTML
内容和Web
服务器接收消息及发送HTML
内容进行一个功能独立。
生产的就交给生产商弄,快递的就交给物流公司弄,这样说比较容易理解,但还是差了点意思,深入一点就是,每次服务器的进程切换,会在生产HTML
内容的Web
框架 和 接收消息与发送HTML
内容的Web
服务器的两个进程间切换,那么在这切换的过程,有一段时间服务器是完全属于Web
框架 和Web
服务器的这其中之一的进程的,具体来说,就是专门为它两者之一服务的,那么你就应该意识到,在那时服务器为它们两个中的一个进程服务,资源(多核芯片计算、内存,磁盘存储等等)都尽量为其中的一个进程服务,如果是很厉害的服务器(两个字昂贵)的话,就更能体现出其中的性能差距,所以对于B/S架构的高并发操作,是一定一定需要一个高性能的Web
服务器来执行的。
这里的高性能就需要了解该Web
服务器是用什么编程语言写的,既然这里适用性能需求,那么使用 C/C++ 语言开发的 Web
服务器,就再好不过了,这个可以通过对比编程语言的性能速度,可以得出哪些 Web
服务器性能好,当然有时还得看情况使用哪种 Web
服务器。
列出性能前三的的编程语言:
C
↑C++
↑Java
↑
后面我就不写了,可以到网上搜索一下,编程语言间的性能,当然不用考虑,想也知道,除了这几个编程语言写的 Web 服务器,大致就可以猜到其性能。
浏览器 B/S 架构的业务逻辑个人理解:
客户端 Brower
(浏览器) —— 服务端 Server
RabbitMQ 是基于 Erlang 语言开发的消息队列系统