第四章 数据计算

  Laxcus所有数据计算工作都是通过网络实施。相较于集中计算,在网络间进行的数据计算更适合处理那些数据量大、复杂的、耗时长的计算任务。能够实施网络计算的前提是数据可以被分割,就是把一组大的数据分成若干组小的数据。分割数据的办法有很多种,目前最常用的是按照数值范围和散列规则进行分割。需要强调的是,在被分割后的数据里,不应该存在内容重叠的现象。

  在这一章里,我们通过介绍一个分布计算算法,来说明Laxcus集群的分布计算是如何实现的。

4.1 Diffuse/Converge算法

  Diffuse/Converge是我们设计的一套分布计算模型,与Laxcus大数据管理系统紧密结合,负责组织实施大规模数据计算工作。Diffuse/Converge算法依据我们对数据处理的理解产生,在我们的数据处理概念中,传统的集中计算模型,数据处理可以分解为两个阶段:产生、计算,如果把它扩大到网络环境,可以进一步解释为:分散、聚合。它们的区别在于:前者是直接产生数据,然后对数据进行计算,输出计算结果;后者是通过网络收集数据,经过组织整理后,再分配给多台计算机去执行计算,最后输出计算结果。实际上,分布计算与集中计算相比,只是多出数据组织整理环节,其它部分基本是一样的,但是在数据处理能力上,Diffuse/Converge算法可以驱动和计算的数据量远远超越集中计算所能提供的规模,足以满足当前各种大数据计算业务需要。

  在Laxcus里,Diffuse/Converge算法只提供计算规则和API,实际数据计算业务仍然需要用户编码实现。

  以下结合图4.1,阐述Diffuse/Converge算法的处理流程。

  如图所示,Call节点是Diffuse/Converge算法的起点,实际也是计算结果的输出点,它负责进行协调和分配数据资源,而不会产生数据和计算数据。每个分布任务都从Diffuse开始,它被指向Data节点。在这个阶段,Call节点会同时发出多个Diffuse请求,分别作用到多个Data节点上。每个Data站点根据Diffuse请求中的参数,执行产生数据的工作,数据来源可以是磁盘,也可以按照某种规则生成。这些数据产生后,被抽象处理成元数据,返回给Call站点,成为后续计算的依据。

  Converge是分布计算第二阶段,它的作用点是Work节点。同Diffuse阶段一样,Call节点也会向多个Work节点发出多个Converge请求,每个Work节点根据Converge请求中的参数,执行数据计算工作。与Diffuse不同的是,Converge是一个迭代的过程,在一次数据计算中,允许有任意多次的Converge发生,直到最后一次Converge计算生成计算结果。在此之前,Converge产生的都是元数据。

  通过以上说明可以看到,Diffuse只执行一次,Converge会执行多次。这正是本处要特别说明的:Diffuse/Converge算法的本质是阶段间串行、阶段内并行的工作方式,每个阶段完成后才能进入下一个阶段,当前阶段的数据输出是下一阶段的数据输入。阶段内的并行处理由线程执行,线程之间是无联系的独立计算。

图4.1 Diffuse/Converge 处理流程

4.2 数据计算过程中的数据平均分配问题

  在Diffuse/Converge分布计算过程中,每个Data/Work节点产生和计算的数据量常常是不一致的。这个现象如果放在这样的环境下就很容易看出来:1.集群的硬件配置完全一致;2.集群里只有一个计算任务。当这样的条件成立且数据量分配不均时,将导致Work节点在计算数据时,发生计算时间长短不一的现象,大批先期完成的子计算任务被迫等待最后一个计算结果,徒然增加了总计算时间,出现木桶短板效应。这样的数据处理显然不符合我们追求的最大计算量、同时最小计算时间的要求,如果能够使每个节点的数据量趋于相同,大家在相同或者接近的时间内返回计算结果,那么短板效应就会消失,就可以获得最大的计算效费比。显然这样的分布计算才是最合理和有效率的。

  平均分配数据量的工作由Call站点来负责。如上所述,在数据计算过程中,Data/Work站点会向Call节点返回元数据,我们在设计这些元数据时,已经考虑到平均分配数据量问题,并因此设置了一些参数。显式的如被分割的数据尺寸,隐式的参数由用户来定义和解释。通过这些参数,Call站点在计算时,可以给每个Work站点分配相同或者基本一致的数据量。这样,在理想的环境下,每个Work节点能够在相同或者接近的时间内返回计算结果,保证数据计算获得一个最佳的计算时间。

Laxcus大数据管理系统2.0(6)- 第四章 数据计算的更多相关文章

  1. Laxcus大数据管理系统2.0 (1) - 摘要和目录

    Laxcus大数据管理系统 (version 2.0) Laxcus大数据实验室 摘要 Laxcus是Laxcus大数据实验室全体系全功能设计研发的多用户多集群大数据管理系统,支持一到百万台级节点,提 ...

  2. Laxcus大数据管理系统2.0(5)- 第二章 数据组织

    第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...

  3. Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

    第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依 ...

  4. Laxcus大数据管理系统2.0(10)- 第八章 安全

    第八章 安全 由于安全问题对大数据系统乃至当前社会的重要性,我们在Laxcus 2.0版本实现了全体系的安全管理策略.同时我们也考虑到系统的不同环节对安全管理的需求是不一样的,所以有选择地做了不同的安 ...

  5. Laxcus大数据管理系统2.0(8)- 第六章 网络通信

    第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的 ...

  6. Laxcus大数据管理系统2.0(3)- 第一章 基础概述 1.2 产品特点

    1.2 产品特点 Laxcus大数据管理系统运行在计算机集群上,特别强调软件对分布资源可随机增减的适应性.这种运行过程中数据动态波动和需要瞬时感知的特点,完全不同与传统的集中处理模式.这个特性衍生出一 ...

  7. Laxcus大数据管理系统2.0(5)- 第三章 数据存取

    第三章 数据存取 当前的很多大数据处理工作,一次计算产生几十个GB.或者几十个TB的数据已是正常现象,驱动数百.数千.甚至上万个计算机节点并行运行也已经不足为奇.但是在数据处理的后面,对于这种在网络间 ...

  8. Laxcus大数据管理系统2.0(14)- 后记

    后记 Laxcus最早源于一个失败的搜索引擎项目,项目最后虽然终止了,但是项目中的部分技术,包括FIXP协议.Diffuse/Converge算法.以及很多新的数据处理理念却得以保留下来,这些成为后来 ...

  9. Laxcus大数据管理系统2.0(12)- 第十章 运行

    第十章 运行 本章将介绍一些Laxcus集群基本运行.使用情况,结合图片和表格表示.地点是我们的大数据实验室,使用我们的实验集群.数据来自于我们的合作伙伴,软件平台混合了Windows和Fedora  ...

随机推荐

  1. Extjs header column 自定义排序规则

    Extjs 的表格自带排序功能,这个功能在大部分情况下能够满足我们的需求,但是在某种情况下,例如IP排序,默认情况下,按照字符串进行排序, 此时我们需要自定义排序规则,这个时候就需要我们重写方法了, ...

  2. 课时10.第一个HTML网页(掌握)

    网页的固定格式 编写网页和写信一样都有一套规范和要求,这套规范和要求中规定了写信的固定格式 写信基本结构 亲爱的xx: 你好! 我.................. ...... 此致 敬礼! xx ...

  3. 浅谈async函数await用法

    今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...

  4. 纯 js 让浏览器不缓存 ajax 请求

    开发「bufpay.com 个人即时到账收款平台」支付页面需要用到 ajax 轮询订单的支付状态. 现在浏览器对 ajax 的缓存策略遵循 http response header 里面的缓存设置,为 ...

  5. Centos7验证Kickstart文件是否完整方法

    1.1    功能简介 CentOS 7 包含 ksvalidator 命令行程序,可使用该程序进行确认Kickstart文件.这个工具是 pykickstart 软件包的一部分.要安装pykicks ...

  6. 大数据学习--day07(冒泡排序、Arrays工具类、方法可变参数)

    冒泡排序.Arrays工具类.方法可变参数 冒泡排序之前写过,略 Arrays工具类 二分法查询 public static int binarySearch(int[] a,int key) 头信息 ...

  7. python3 练习题100例 (四)

    题目四:输入某年某月某日,判断这一天是这一年的第几天? #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目四:输入 ...

  8. python教程(三)·函数与模块

    函数,这和数学中的函数有点关联,但又不是完全等价 概念 不说的这么官方,我就已自己的理解来表达 ^_^ 在数学中,把一个或多个值(输入x)进行一定的计算或者映射,得到一个值(输出y),这个计算或者映射 ...

  9. 检测微信小程序是否被反编译获取源码

    众所周知,微信小程序的代码安全性很弱,很容易被别人反编译获取源码.我自己的小程序也被别人反编译拿到源码还上线了,非常无语. 既然客户端不好防范,服务端还是可以做点手脚的. 小程序的Referer是不可 ...

  10. C# 调用腾讯云接口获取视频基本信息

    做项目需要上传视频,获取时长,上传教程很多,获取信息很少,官方只有一条请求地址. 找了好久,都没有说这个请求地址怎么用.最后发现需要调用腾讯云SDK 官方地址:https://github.com/Q ...