分布式系统与海量数据处理

科技发展带来的挑战

在科技的快速发展推动下,在 IT 领域,企业会面临两个方面的问题。

一是如何实现网站的高可用、易伸缩、可扩展、高安全等目标。为了解决这样一系列问题,迫使网站的架构在不断发展。从单一架构迈向高可用架构,这过程中不得不提的就是分布式。

二是用户规模越来越大,由此产生的数据也在以指数倍增长,俗称数据大爆炸。海量数据处理的场景也越来越多。技术上该如何面对?

分布式系统


概述

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅。 仅通过消息传递进行通信和协调的系统。简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。

分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就越多,能够处理的并发访问量也就越大。

初代的 web 服务网站架构往往比较简单,应用程序、数据库、文件等所有的资源都在一台服务器上。
图:互联网初始阶段的网站架构

分布式系统与海量数据处理
图:现在互联网网站常用的架构
分布式系统与海量数据处理
图:现在互联网网站常用的架构

从分布式系统的概念中我们知道,各个主机之间通信和协调主要通过网络进行,所以,分布式系统中的计算机在空间上几乎没有任何限制,这些计算机可能被放在不同的机柜上,也可能被部署在不同的机房中,还可能在不同的城市中,对于大型的网站甚至可能分布在不同的国家和地区。

特征


分布性:分布式系统中的多台计算机之间在空间位置上可以随意分布,系统中的多台计算机之间没有主、从之分,即没有控制整个系统的主机,也没有受控的从机。

透明性:系统资源被所有计算机共享。每台计算机不仅可以使用本机的资源,还可以使用分布式系统中其他计算机的资源(包括 CPU、文件、打印机等)。

同一性:系统中的若干台计算机可以互相协作来完成一个共同的任务,或者说一个程序可以分布在几台计算机上并行地运行。

通信性:系统中任意两台计算机都可以通过通信来交换信息。

常用 分布式方案


分布式应用和服务:将应用和服务进行分层和分割,然后将应用和服务模块进行分布式部署。这样做不仅可以提高并发访问能力、减少数据库连接和资源消耗,还能使不同应用复用共同的服务,使业务易于扩展。比如:分布式服务框架 Dubbo。

分布式静态资源:对网站的静态资源如 JS、CSS、图片等资源进行分布式部署可以减轻应用服务器的负载压力,提高访问速度。比如:CDN。

分布式数据和存储:大型网站常常需要处理海量数据,单台计算机往往无法提供足够的内存空间,可以对这些数据进行分布式存储。比如 Apache Hadoop HDFS。

分布式计算:随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高
计算效率。比如 Apache Hadoop MapReduce。

分布式 、 集群


分布式(distributed)是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。

集群(cluster)是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。

海量数据处理


公开数据显示,互联网搜索巨头百度 2013 年拥有数据量接近 EB 级别。阿里、腾讯都声明自己存储的数据总量都达到了百 PB 以上。此外,电信、医疗、金融、公共安全、交通、气象等各个方面保存的数据量也都达到数十或者上百 PB级别。全球数据量以每两年翻倍的速度增长,在 2010 年已经正式进入 ZB 时代,到 2020 年全球数据总量将达到 44ZB。

分布式系统与海量数据处理
图:数据

数据分析的前提是有数据,数据存储的目的是支撑数据分析。究竟怎么去存储庞大的数据量,是开展数据分析的企业在当下面临的一个问题。传统的数据存储模式存储容量是有大小限制或者空间局限限制的,怎么去设计出一个可以支撑大量数据的存储方案是开展数据分析的首要前提。

当解决了海量数据的存储问题,接下来面临的海量数据的计算问题也是比较让人头疼,因为企业不仅追求可以计算,还会追求计算的速度、效率。以目前互联网行业产生的数据量级别,要处理这些数据,就需要一个更好、更便捷的分析计算方式了。传统的显然力不从心了,而且效率也会非常低下。这正是传统数据分析领域面临的另一个挑战,如何让去分析、计算。