单体架构、集群和分布式

55 阅读3分钟

单体

一个应用程序所有的模块都被紧密的集中在一起,打包部署为一个单一的单元。在一个典型的单体web项目中,所有的功能都集中在一个项目中。

比如:

  • 表示层,
  • 业务逻辑层,
  • 数据访问层

这种典型的MVC模式,所有的这些层都集中在这一个war或jar包中,部署到一个单一的web服务器上面;

对于单体架构,在项目的初期是由很多的优势,开发简单,部署简单,测试简单,初期的性能不错;

为什么向集群架构演变?

  • 单体架构的复杂性高,难以维护:代码量巨大,模块的边界模糊,维护起来相当的麻烦,很多时候可能是牵一发而动全身;
  • 技术栈僵化,需要统一的技术栈,很难甚至无法去做新技术的引入,比如使用其他语言去做更适合的模块,使用C++实现直播的功能等;
  • 可靠性差,扩展性差:如果某个模块的性能达到了界限,无法只修改这个模块实现扩展;另一个方面,某个微小服务一旦崩溃可能直接整个系统崩溃;

集群

集群就是在不同的计算机的上面实现相同的业务,集群解决了最大的问题是服务的可靠性,即使某个服务器崩溃了,其他服务器也可以继续支持服务;

  1. 集群的可扩展性;
  2. 集群服务的高可用性;
  3. 负载均衡,分摊下服务压力;
  4. 实现错误恢复;

集群主要分为三大类:

  • 高可用性集群(HA,High Avaibility Cluster),目的是减少服务中断时间的集群实现,比如Redis集群;
  • LBC(负载均衡集群):分摊工作的负载,数据库集群,应用服务器集群
  • HPC:高性能计算集群:将计算任务分发到不同的计算节点上

但是集群还是没有解决,技术僵化、扩展性差,代码耦合十分严重的问题;

分布式

分布式实在不同的服务器上面实现不同的服务,分布式的每一个服务节点都是可以实现集群,但是集群不一定是分布式;

分布式服务中的,每个服务在代码层面上都是独立的,松耦合,可以进行独立的开发、部署、耦合和重启;

服务之间通过轻量级的网络API进行通信,比如(HTTP,RPC),进行通信;

在分布式的设计中,集群的设计并没有消失,一个由整个庞大服务的集群变成了很多的小服务组成的集群;

从整体上去看,单体架构到集群模式的演变是部署架构的演变,集群到分布式的演变更像是代码的解耦合,架构上面继续借鉴了集群部署的思想;