集群聊天服务器:集群与分布式理论

前言

在聊天服务器项目中实现了集群,在这里根据该项目来讲解一下单机、集群与分布式理论。

单机服务器

图示:

在这里插入图片描述

单机服务器的性能瓶颈:

  1. 所能承受的用户并发量受限于硬件资源,32位Linux最多支持两万并发量。
  2. 运维困难,任意模块的修改都需要整个项目的重新编译、部署。
  3. 系统中,有些模块属于CPU密集型,有些模块属于I/O密集型的。造成各模块对硬件资源的需求是不同的。

集群服务器

集群:每一台服务器独立运行一个工程的所有模块。

在这里插入图片描述

优点:
性能提升了,用户的并发量提升了;部署方式简单(扩充多台服务器)。

缺点:

  1. 项目代码还是需要重新编译,而且需要多次部署。
  2. 后台管理模块用户本来就不多,所以根本不需要高并发,但却部署在了多台服务器上。

分布式系统

分布式:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群部署。
在这里插入图片描述

分布式系统解决了单机服务器的缺点:

  1. 解决了并发能力,而且如果想要在提升并发量的话,可针对性的改良,比如对如图所示的分布式结点1进行扩充多台服务器。
  2. 运维方便,某个业务出现bug,只需要对相对应的结点进行重新编译、部署。
  3. 有些业务属于CPU密集型,有些属于I/O密集型,可以将CPU密集型的业务部署在CPU性能强的机器上,其他资源可以相对弱一些;I/O密集型的业务部署在内存和磁盘性能强的机器上。这样的设计,系统和成本都得到了优化。

问题:
4. 大系统的软件模块该怎么划分?因为各模块可能会出现大量重复代码。
5. 各模块之间怎么访问?机器1上的模块怎么调用机器2上的模块的一个业务方法?机器1上的一个模块进程1怎么调用机器1上的模块进程2里面的一个业务方法呢?

如图:针对于这两个server之间的桥梁,就是需要实现的分布式网络通信框架。在后面的项目学习中会解决这些问题。
在这里插入图片描述