第一章 基础概述
1.1 基于现状的一些思考
在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势。与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴技术和产业需求的推动下,对数据存储和计算要求也日益提高,并且对计算数据的准确性和精度也远高于互联网数据。而在这些现象的背后,当前的数据计算早已经突破MB量级,GB成为常态,TB变得流行,正在向PB迈进的时候,面对如此庞大的数据量,如果管理和使用它们,满足各种计算需求,发现和筛选其中有价值的信息,通常以提高芯片性能,增加内存、磁盘的做法,已经变得越来越难以为继,甚至不可行。在这种背景下,以网络和网络通信技术为基础,将分散在不同地理位置的计算机连接起来,组成空间上分散、逻辑上统一的计算机集群,就成为实施大规模数据处理的必需选择。
计算机集群的优势在于:它强调整体的处理能力,每台计算机做为一个节点参与处理过程,承担其中一部分处理任务,处理能力的强弱由全部节点来共同决定。这种工作模式极大地发挥出集体的力量,使得单台计算机的处理性能变得不再重要。并且因为网络的连接,每台计算机随时可以加入或者撤离计算过程。这种类似U盘“热插拔”的功能,使得计算机集群在运行过程中可以动态地调整自己的计算能力,赋与了集群计算近乎无限增长的可能,这是传统的集中式计算无法比拟的。同时因为不再追求单台计算机的处理性能,在采购硬件设备时,可以根据实际需要酌情考量,为节约成本提供了选择的空间。
但是必须看到,正如硬币的两面一样,集群计算在提供了前所未有的处理能力的同时,也有它与生俱来的许多问题。
首先由于连接的节点众多且分散,集群的组织结构变得十分庞大。个体硬件品质良莠不一,网络线路、通信设备、计算机之间的连接和通信过程存在着大量的不确定性,硬件设备本身、设备与设备、设备与外界环境,彼此互相交叉影响。在这样的条件下,保证每台设备完全稳定运行已无可能,解决计算机集群在不安定状态下的稳定存储和计算成为首要要求。
另外,与单台计算机的数据处理根本区别是,集群的数据处理是一个分散的计算过程。它在前端受理大量的请求任务,然后将这些任务分配到后端众多的计算机上去执行。一个高效并且合理的分布计算算法成为必须。这个算法需要解决的问题包括:任务分配、过程调度、故障容错、数据筛选、数据平衡、数据汇总等诸多环节的工作,最终形成与集中计算一样的数据处理结果。这个过程十分复杂。
数据管理益变得重要。在成批量并行处理的数据队列中,要保证完全正确的处理结果,任何单点上的数据都不能遗漏。这需要感知每个数据的存在,确定数据的物理位置,验证数据的可用性和正确性,即使在故障状态下,仍然需要保证计算过程的正常进行。这是数据处理的基本要求。
但是,随着数据储量的不断增加,另一个现象开始凸显出来,并且已经不容忽视:当前的各种数据已经越来越超越数字内容本身,逐渐演变成一种资产,其中蕴藏和可能产生的价值有时候往往不可估量。如何保护好这些数据只被数据所有人拥有,而不会受到外来的侵犯,成为必须要解决的问题。
更重要的一项来自用户体验。没有人会喜欢一个复杂、繁琐、难以维护的系统。相反,一个人机界面友好、容易操作和管理的产品更容易受到用户青睐。这需要在产品设计阶段做很多工作,综合考量产品的应用范围、处理效率、运营成本,以及用户的使用行为和习惯,做出必要的取舍,辅以技术实现,才能获得良好的用户体验。
当能够提供的硬件基础设施已经固定,各种应用需求还在不断发展和变化中,如何适应这种变革的趋势,贴近用户的使用需求,开发出用户满意的产品,以上种种,都是大数据软件设计者们需要思考的问题。