42 张图带你揭秘后端技术都要学啥?( 三 )


42 张图带你揭秘后端技术都要学啥?

文章插图
消息队列
消息队列模型中通常有三个角色,分别为生产者,消息队列和消费者 。生产者产生数据封装为消息发送给消息队列,专门的消费程序从消息队列中取出数据,消费数据 。
在我看来,消息队列主要是缓冲消息,等待消费者消费 。其中消费的方式分为两种:
  • 点对点
对生产者多消费者的情况 。一个消息被一个消费者消费

42 张图带你揭秘后端技术都要学啥?

文章插图
多生产消费
上述的发邮件例子就是典型的点对点模式 。互不干扰,其中某个服务出现问题不会印象到全局 。
  • 订阅模式
开发人员在消息队列中设置主题,生产者往相应的主题发送数据,消费者从对应的主题中消费数据,每个消费者按照自己业务逻辑分别进行计算

42 张图带你揭秘后端技术都要学啥?

文章插图
订阅模式
这个比较好理解,比如在用户注册的时候,我们将注册信息放入主题用户中,消费者订阅了这个主题,可能有构造短信消息的消费者,也有推广产品的消费者,都可以根据自己业务逻辑进行数据处理 。
42 张图带你揭秘后端技术都要学啥?

文章插图
用户注册案例
使用异步模型的优点
  • 快速响应
不在需要等待 。生产者将数据发送消息队列后,可继续往下执行,不虚等待耗时的消费处理
  • 削峰填谷(需要修改)
互联网产品会在不同的场景其并发请求量不同 。互联网应用的访问压力随时都在变化,系统的访问高峰和低谷的并发压力可能也有非常大的差距 。
如果按照压力最大的情况部署服务器集群,那么服务器在绝大部分时间内都处于闲置状态 。
但利用消息队列,我们可以将需要处理的消息放入消息队列,而消费者可以控制消费速度,因此能够降低系统访问高峰时压力,而在访问低谷的时候还可以继续消费消息队列中未处理的消息,保持系统的资源利用率 。
  • 降低耦合
如果调用是同步,如果调用是同步的,那么意味着调用者和被调用者必然存在依赖,一方面是代码上的依赖,应用程序需要依赖发送邮件相关的代码,如果需要修改发送邮件的代码,就必须修改应用程序,而且如果要增加新的功能
那么目前主要的消息队列有哪些,其有缺点是什么?(好好记下这个高频题目啦)
42 张图带你揭秘后端技术都要学啥?

文章插图
 
负载均衡
一台机器扛不住了,需要多台机器帮忙,既然使用多台机器,就希望不要把压力都给一台机器,所以需要一种或者多种策略分散高并发的计算压力,从而引入负载均衡,那么到底是如何分发到不同的服务器的呢?
 
砸钱
最初实现负载均衡采取的方案很直接,直接上硬件,当然也就比较贵,互联网的普及,和各位科学家的无私奉献,各个企业开始部署自己的方案,从而出现负载均衡服务器 。
HTTP重定向负载均衡
也属于比较直接,当HTTP请求叨叨负载均衡服务器后,使用一套负载均衡算法计算到后端服务器的地址,然后将新的地址给用户浏览器,浏览器收到重定向响应后发送请求到新的应用服务器从而实现负载均衡,如下图所示:
42 张图带你揭秘后端技术都要学啥?

文章插图
HTTP重定向负载均衡
优点:
  • 简单,如果是JAVA开发工程师,只需要servlet中几句代码即可
缺点:
  • 加大请求的工作量 。第一次请求给负载均衡服务器,第二次请求给应用服务器
  • 因为要先计算到应用服务器的 IP 地址,所以 IP 地址可能暴露在公网,既然暴露在了公网还有什么安全可言
DNS负载均衡
了解计算机网络的你应该很清楚如何获取 IP 地址,其中比较常见的就是 DNS 解析获取 IP 地址 。
用户通过浏览器发起HTTP请求的时候,DNS 通过对域名进行即系得到 IP 地址,用户委托协议栈的 IP 地址简历 HTTP 连接访问真正的服务器 。这样不同的用户进行域名解析将会获取不同的IP地址从而实现负载均衡 。


推荐阅读