Linux(服务器编程):34---聊聊各种中间件的使用场景

中间件是什么

  • 中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的
  • 例如MySQL、Redis、MongoDB、ZeroMQ、dfs(分布式文件系统)等都是中间件
  • 例如,下图是一个软件系统的大致框架,客户端连接服务器,服务器通过Nginx进行负载均衡将任务分发到不同的服务器,有很多中间件对业务进行处理

Linux(服务器编程):34---聊聊各种中间件的使用场景

  • 下面我们以微信这个软件为例,分析一下有哪些中间件工作在微信的后端业务处理中

一、用户注册登录(MySQL+Redis)

  • 微信用户注册时,服务器会将用户注册的数据一份存到MySQL中进行持久化,一份存到Redis中进行缓存

Linux(服务器编程):34---聊聊各种中间件的使用场景

  • 有两种方案实现:
    • 方案①:服务器在接收到用户注册的数据后,调用两个方法,一个方法将数据写入到MySQL中,另一个方法将数据写入Redis中
    • 方案②:服务器先将数据写入到MySQL中进行持久化,然后再从MySQL中将数据读入Redis作用缓存
  • 一般不存在这种情况:先将数据存入Redis中,然后再从Redis中把数据持久化到MySQL中。因为数据可能在不确定的因素下,导致Redis中的数据丢失,从而写入MySQL失败

二、聊天(ZeroMQ)

  • 假设客户端A和客户端B连接到不同的服务器,客户端A与客户端B之间进行消息的发送与接收如何实现?
  • 可以使用消息队列,例如ZeroMQ:
    • 客户端A将数据抛给服务器A,服务器A将数据抛给消息队列,然后消息队列对数据进行分析将数据抛给服务器B
    • 服务器B进行处理将数据发送给客户端B

Linux(服务器编程):34---聊聊各种中间件的使用场景

三、聊天记录/朋友圈动态(MongoDB)

  • MongoDB存储数据的原则是:时间越新的数据放到内存中,越久远的数据放到磁盘中
  • 聊天记录和朋友圈动态会随着时间的增加而访问次数变少,因此MongoDB使用的比较多

四、图片/语音/大文件传输(dfs分布式文件系统)

  • 客户端A与客户端B进行聊天,客户端A给客户端B传输一个文件,那么客户端A不会直接将文件资源发送给客户端B,而是将资源上传到dfs中,然后将该文件在dfs中的url发送给客户端B,让客户端B自己通过url去dfs中下载该文件

Linux(服务器编程):34---聊聊各种中间件的使用场景