分布式系统

分布式系统由多台地理位置分散的计算机(节点)组成,通过通信网络互联形成统一整体。这些节点具备独立处理能力,但通过中间件和分布式操作系统实现任务动态分配与资源透明调度。例如万维网(WWW)即典型代表,用户访问网页时无需感知数据存储的具体位置。

常见概念

应用(Application)/系统(System)

为了完成一整套服务的一个程序或者一组相互配合的程序群。

模块(Module)/系统(Component)

一个应用,里面有很多个功能,每个独立的功能,就可以称为是一个模块/组件

分布式(Distributed)

引入多个主机/服务器,协同配合完成一系列工作。(物理上的多个主机)

集群(Cluster)

引入多个主机/服务器,协同配合完成一系列工作。(逻辑上的多个主机)

主(Master)/从(Slave)

分布式系统中一个比较典型的结构,多个服务器,其中一个是主,其他的都是从。从节点的数据要同步到主节点同步过来。

中间件(Middleware)

和业务无关的服务(功能更通用的服务):数据块,缓存,消息队列

单级架构

单机架构,只有一台服务器,这个服务器负责所有的工作。

alt text

绝大部分公司的产品都是单机架构。

分布式系统架构

一台主机的硬件资源是有限的,包括但不限于一下几种:CPU、内存、硬盘、网络。同一时刻,请求多了,此时就可能会导致某个硬件资源不够用了!

一台主机已经到达极限了,但是还不够!就只能引入多台主机了!此时我们的系统就可以称为分布式系统了!(引入分布式是万不得已,复杂程度会大大提高,出现bug的概率也会随之提高)

应用数据分离架构

alt text

将应用服务器和数据库服务器分别放到不同的主机

应用服务器:里面可能会包含很多业务逻辑,可以会吃CPU和内存
数据库服务器:需要更大的硬盘空间,更快的访问数据。

应用服务器可以会比较吃CPU和内存。如果把CPU或者内存吃没了,此时服务器就顶不住了。引入更多的应用服务器,就可以知道有效解决上述问题。

应用服务集群架构

alt text

用户的请求先访问负载均衡分配器,负载均衡分配器把请求比较均匀的分发该集群中的每个应用服务器。这样就可以让每个应用服务器都有均衡的负载。(负载均衡分配器就好像是公司项目的组长,把任务平均的分配给每个组员。)

有很多负载均衡的相关算法。

读写分离 / 主从分离架构

alt text

主服务器一般是一个,从服务器可以有多个。同时从数据库通过负载均衡的方式,让应用服务器进行访问。主节点负责写数据,从节点负责读数据。主节点需要把修改过的数据同步给从节点。

引入缓存 —— 冷热分离架构

数据库天然有个问题,响应速度是更慢的!把数据区分为冷热,热点数据放到缓存中,访问缓存的速度往往比数据块要快很多!

alt text

缓存服务器只存放一小部分热点数数据(频繁访问到的数据:20%的数据可以支持80%的访问量)。Redis就是作为缓存服务器缓存数据。

垂直分库

alt text

本来就一个数据块服务器,这个数据库服务器上有多个数据库。现在就可以引入多个数据库服务器,每个数据块服务器存储一个或者一部分数据库。

如果某个表特别大,大到一台主机存不下,也可以针对表进行划分。具体分库分表如何实践,还是要结合实际的业务场景来展开。

微服务架构

alt text

微服务的特点
为了方便于代码维护,就可以把这样的一个复杂的服务器拆分成更多的,功能单一,但是更小的服务器(服务器方种类和数量就增加了)

微服务的缺点

  1. 会导致系统性能下降(要想保证性能下降更多,只能引入更多的机器,更多的硬件资源):多个功能直接需要依赖网络进行通信,网络通信的速度比硬盘还要慢的!
  2. 系统复杂程度提高,可靠性有可能会收到影响。

微服务的优势

  1. 解决了人的问题
  2. 使用微服务,可以更方便的进行功能重用。
  3. 可以给不同的服务进行不同的部署

评价指标

可用性

$$ 可用性 = \frac{系统整体可用的时间}{总的时间} $$

响应时长

指用户完成输入到系统给用户做出反应的时长

吞吐/并发

衡量系统的处理请求的能力,衡量性能的一种方式。