1. 单体
是把系统部署到一台服务器上,所有的请求业务都由这台服务器处理。
优点:适合小型系统,节省资源
缺点:安全性低,一旦有突发压力,整个系统都会面临崩溃
2. 分布式
把系统的各个功能拆分成不同的小系统,主要是分散能力。
优点:资源利用率高,可以承担部分压力,降低耦合度,易于扩展
缺点:安全性低,如果其中一台服务器出现问题整个系统就会崩塌
比如下图与单体结构相比,就是一个拆分功能的分布式架构:
分布式有个著名的原则:CAP 原则(CAP定理)。指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。
3.集群
将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器,主要是分散压力。
优点:高可用、可扩展、负载均衡、错误恢复
缺点:占用资源比较高
比如下图所示的支付服务就是一个集群:
4.冗余
先来看一下百度百科的解释:
分为两层含义:
第一层表示多余的不需要的部分,举个例子:一个数据库可以存储100万条数据,但是我们可以设置最多存储80万条,剩余的20万就是冗余,这样就提高一定的读写性能。那如果达到80万之后还要增加数据怎么办?可以通过更换硬件、增加数据库数量、分库分表等方式来解决!
第二层是说增加重复部分,上面所说的集群可以说是一种冗余
所以,集群是一种冗余,但是冗余可不一定是集群!
总结
一个好的系统设计应该是分布式和集群的结合,先分布式再集群,设置适当的冗余,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样某个子业务如果出了问题,整个系统完全不会受影响。
上面说的是整体部署一个系统,至于细节就要考虑硬件配置、MQ、缓存等因素了。