一、分布式系统是什么?
1、定义
distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages(分布式系统是指位于网络计算机的组件仅通过传递消息来通信和协调其行为的系统。)
所以,从这可以总结出这几个重点:
1、组件是分布在网络计算机上
2、组件之间仅仅通过消息传递来通信并且协调工作
2、特性
2.1、副本
(Replica)是分布式系统最常见的概念之一,指分布式系统对数据和服务提供的一种冗余方式。在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理。
1)数据副本指在不同节点上持久同一份数据,当某一个节点上存储的数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题的有效手段。
2)服务副本指多个节点提供同样的服务,每个节点都有能力接受来自外部的请求并进行相应的处理。
2.2、并发性
在程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统中的多个节点,可能会并发地操作一些共享的资源,如何准确并高效的协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一。
2.3、全局时钟
分布式系统是有一系列在空间上随意分布的多个进程组成的,在这些进程之间通过交换消息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竟谁先谁后,原因就是分布式系统缺乏一个全局的时钟序列控制。
2.4、故障总会发生
任何在设计阶段考虑到的异常情况,一定会在系统实际运行中发生,并且,在系统实际运行过程中还会遇到很多在设计时未能考虑到的异常故障。所以,除非需求指标允许,在系统设计时不能放过任何异常情况。
3、分布式环境的各种问题
3.1、通信异常
网络本身的不可靠性,各节点之间的网络通信能够正常进行,其延时也会远大于单机操作。单机内存访问的延时在纳秒数量级(通常是10ns左右),而正常的一次网络通信的延迟在0.1~1ms左右,巨大的延时差别,会影响消息的收发的过程,因此消息丢失和消息延迟变得非常普遍。
3.2、网络分区
当网络由于发生异常情况,导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式系统的左右节点中,只有部分节点能够进行正常通信,而另一些节点则不能,这个现象成为网络分区,俗称“闹裂”。当网络分区出现时,分布式系统就出现局部小集群,在极端情况下,这些小集群会独立完成原本需要整个分布式系统才能完成的功能,包括对数据的事务处理,这对分布式一致性提出了非常大的挑战。
3.3、三态
在分布式环境下,网络可能出现各式各样的问题,因此分布式系统的每一次请求与响应,存在特有的三态概念,即成功、失败与超时。超时现象通常有一下两种情况:
1)由于网络原因,该请求(消息)并没有被成功发送到接收方,而是在发送过程就发生了消息丢失现象。
2)该请求(消息)成功的被接收方接受后,并进行了处理,但是在将响应反馈给发送方的过程中,发生了消息丢失现象。
当出现这样的超时现象时,网络通信的发起方是无法确定当前请求是否被成功处理的。
3.4、节点故障
分布式系统下比较常见的问题,指组成分布式系统的服务器节点出现宕机或僵死现象。
二、怎么去定义大型网站
满足一个大型网站的基本因素:
-
访问量
-
业务复杂度
-
数据量
三、大型网站常用到的技术框架
初始阶段的网站架构
一般来讲,大型网站都是从小型网站发展而来,一开始的架构都比较简单,随着业务复杂和用户量的激增,才开始做很多架构上的改进。当它还是小型网站的时候,没有太多访客,一般来讲只需要一台服务器就够了,这时应用程序、数据库、文件等所有资源都在一台服务器上,网站架构如下图所示:
应用服务和数据服务分离
随着网站业务的发展和用户量的增加,一台服务器就无法再满足需求了。大量用户访问导致访问速度越来越慢,而逐渐增加的数据也会导致存储空间不足。这时就需要将应用和数据分离,应用和数据分离后整个网站使用 3 台服务器:应用服务器、文件服务器和数据库服务器。这 3 台服务器对硬件资源的要求各不相同:
-
应用服务器业务逻辑,需要强大的CPU
-
数据库服务器对磁盘读写操作很多,需要更快的磁盘和更大的内存
-
文件服务器存储用户上传的文件,因此需要更大的磁盘空间
此时,网站系统的架构如下图所示: