分布式系统的发展历程

1. 单点集中式Web应用

分布式系统的发展历程_第1张图片 图1.1 分布式系统发展历程——单点集中式Web应用

单点集中式Web应用系统架构总体上比较简单。

特点:

  • 数据库(比如MySQL)及应用的 War 包都是共同部署在同一台服务器上,文件的上传存储也是上传到本台机器上。
  • 适用于小型项目,发布便捷(只需要打包成War包,并进行解压即可),对于运维的工作量也比较小。

缺点:

  • 如果该台服务器宕机了,整个应用将无法访问。

2. 应用与文件服务及数据库单独拆分

背景:

随着时间的推移,数据库及文件的数据量越来越多,由于服务器的容量是有限的,原有系统架构已经不足以支撑,此时需要将Web应用、数据库、文件存储服务拆分出来作为独立的服务,以此来避免存储瓶颈。

分布式系统的发展历程_第2张图片 图1.2 分布式系统发展历程——应用与文件及数据库服务单独拆分

特点:

  • 三个服务独立部署,不同服务器宕机了,其他的仍然可以使用。

3. 引入缓存与集群,改善系统整体性性能

背景:

当请求并发量上去了,而单台 Web 服务器(比如Tomcat)不足以支撑应用的时候,此时我们会考虑引入缓存及集群,以改善系统的整体性能,此种系统架构如图1.3所示。

 

分布式系统的发展历程_第3张图片 图1.3 分布式系统发展历程——引入缓存与集群,改善系统整体性能

 

  • 引入缓存:把大量用户的读请求引导至缓存(如Redis)中,而写操作仍然直接写到数据库DB中。这点性能上的优化,可以将数据库的一部分数据或者系统经常需要访问的数据(如热点数据)放入缓存中,减少数据库的访问压力,提高用户并发请求性能
  • 引入集群:目的在于减少单台服务器的压力。可以通过部署多台 Tomcat 来减少单机带来的压力,常见手段是 Nginx+Lvs,最终是多台应用服务器构成了负载均衡,减少了单机的负载压力(需要注意的是,对于用户的 Session 需要调整为使用 Redis 或者 Spring-Session 进行管理)。
  • 注:ILVS,是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

4. 数据库读写分离,并提供反向代理及 CDN 加速访问服务

背景:

调查发现,在大多数互联网应用系统中,用户的读请求数量往往大于写请求,它们会相互竞争,在这个时候往往写操作会受到影响,导致数据库出现存储瓶颈(可以参考春节抢票高峰期12306的访问情况)。因此会对数据库采取读写分离,从而提高数据库的存储性能。

除此之外,为了加速网站的访问速度,尤其是加速静态资源的访问,会将系统的大部分静态资源存放到CDN 中,并加入反向代理的配置,从而减少访问网站时直接去服务器读取静态数据。

 

分布式系统的发展历程_第4张图片 图1.4 分布式系统发展历程——数据库读写分离并提供反向代理及CDN加速访问服务

 

特点:

  • DB 的读写分离将有效地提高数据库的存储性能,而加入 CDN 与反向代理将加速系统的访问速度。

注:CDN 的全称是Content Delivery Network,即内容分发网络。CDN 依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度。简单来讲,CDN 是用来进行加速的,它可以让用户更快获得所需的数据。

例如:某个网站的服务器在北京,如果深圳的用户想要获取服务器上的数据,就需要跨越很远的距离,由于传输速度和路由转发等因素,就会导致访问速度非常缓慢。但如果我们在深圳建立一个CDN服务器,上面缓存了一些服务器数据,那么深圳用户只需要访问这个CND的服务器就能获取相关的内容,这样速度就提升了很多。

 

5. 分布式文件系统与分布式数据库

当系统对于某些表有大量的请求时,此时为了减少DB的压力,我们会进行分库分表,即根据业务来拆分数据库,此种系统架构如图1.5所示。

分布式系统的发展历程_第5张图片 图1.5 分布式系统发展历程——分布式文件系统与分布式数据库

 

分布式系统的特性

  • 内聚性和透明性:分布式系统是建立在网络之上的软件系统,所以具有高度的内聚性和透明性。
  • 可扩展性:分布式系统可以随着业务的增长动态扩展自己的系统组件,从而提高系统整体的处理能力。通常有两种方式:其一,优化系统的性能或者升级硬件,即垂直扩展;其二,增加计算单元(如服务器等)以扩展系统的规模,即水平扩展
  • 可用与可靠性:说直白点,可靠性量化的指标是给定周期内系统无故障运行的平均时间,而可用性量化的指标是给定周期内系统无故障运行的总时间;一个是“平均”时间,一个是“总”时间。
  • 高性能:不管是单机系统还是分布式系统,性能始终是关键指标。不同的系统对性能的衡量指标是不同的,最常见的有“高并发”(即单位时间内处理的任务越多越好和“低延迟”(即每个任务的平均处理时间越少越好)。分布式系统的设计初衷便是利用更多的机器,实现更强大的计算和存储能力,即实现高性能。
  • 一致性:分布式系统为了提高可用性和可靠性,一般会引入冗余(副本)。为了保证这些节点上的状态一致,分布式系统必须解决一致性问题,其实就是在多个节点集群部署下,如何保证多个节点在给定的时间内,操作或者存储的数据只有一份。

分布式系统常见的问题

1、网络并没有那么可靠

  • 分布式系统中,节点间本质上是通过网络通信,而网络有些时候并没有那么可靠。
  • 常见的网络问题有网络延时、丢包和消息丢失等。

2、节点故障无法避免

  • 当分布式的节点数目达到一定规模后,整个系统出现故障的概率将变高。而分布式系统需要保证故障发生时,系统仍然是可用的,即在某个或者某些节点发生故障的情况下,需要将该节点所负责的计算和存储任务转移到其他节点。

总之,分布式系统在给我们带来诸多好处的同时,也带来了许多挑战和不确定性,可谓是一把“双刃剑”。

你可能感兴趣的:(分布式,分布式,分布式系统)