七牛数据处理架构变迁

标签: 数据 架构 | 发表时间:2015-12-03 21:03 | 作者:小牛仔
出处:http://www.iteye.com

据统计,互联网数据量正以每三年翻一番的速度膨胀,其中, 95%以上都是非结构化数据,且这个比例仍在不断提升。如今,互联网已全面覆盖大家生活的方方面面,每个人的消费行为、娱乐行为和社交行为都将产生海量的图片、音视频、网络日志等非结构化数据。非结构化数据的持续在线及数据种类的多样对数据的处理提出了很高的要求。作为国内最专业的数据管理平台,七牛已覆盖国内 50%以上的互联网用户。那么,七牛数据处理架构都经过了哪些演变呢?小编带你一探究竟。

七牛云存储的数据处理主要分为实时处理和异步处理,对于较小的文件(如图片),一般推荐使用实时处理的方式。

对于实时处理,用户可简单通过 URL 对已有的文件进行实时处理。当用户将文件上传到七牛 KODO 对象存储平台,会得到相应的 key ,可通过 URL 访问。例如 http://xxx.com/key ,当需要对该文件进行实时处理时,可以通过 http://xxx.com/key?&lt;fop>/<param1_value>/<param2_name>/<param2_value>/….进行处理。具体操作参数可以参考七牛官方文档。参数过多过长时可以设置样式,若涉及操作复杂多变可以采用管道技术。

异步请求可以通过 Portal 、命令行工具、 SDK 发起请求。一般适合处理较大文件,比如较大的音视频,这种情况下实时响应的效果并不理想,则可以采用异步持久化处理方式,返回的结果是处理后的文件在七牛云存储中的相关元信息( bucket 、 key 等),用户可以通过设置回调服务器地址,将结果 POST 到自己的接收服务器,也可以主动查询数据处理状态和结果信息。

上图描述了简单的实时处理的基本架构,用户可以通过七牛云存储的 I/O 入口发起请求,判断出是合法的数据处理请求后,就会将其传给数据处理调度服务,通过调度分发给计算处理集群。每个 worker 处理的流程为参数检查->下载数据->结合原数据信息对参数进行检查(若数据的相关信息不需要 download 下来就可以获取,那么可以和前面的步骤对调)->自己编写算法实现或者调用工具对数据进行处理,比如转码、图像缩略等操作->结果返回(异步请求一般会持久化保存,通过对象存储服务,将结果上传,得到文件上传后的相关信息,例如 bucket 、 key 等,返回的是文件的相关信息)。这里可以简单的把数据处理调度看做负载均衡器,请求根据接口判断,通过调度指向对应服务,然后将结果原路返回给用户。

上面的结构简单清晰,但同时面临几个问题:

数据处理调度这个服务相对比较重,它不仅仅需要实现负载均衡,还需要对所有处理终端服务进行管理,单台计算型服务器上可能有多个服务 worker (多个图片处理、音视频处理服务 worker ),随着业务发展,管理的 worker 数量是非常多的。
内部实现缓存机制,使得读写缓存的流量全部集中在数据处理调度这个服务。
数据的处理离不开原数据,一般我们可以在 worker 中待前面的步骤顺利通过后,调用七牛的对象存储服务开始下载,那么每个 worker 都必须配置对象存储服务的地址信息,然后才能 download 原数据,这套地址信息对所有 worker 都是共用的。前面提到 1 台物理机器上可能有多个服务 worker ,每个 worker 自身有不同的属性参数(最起码端口号不同),而且可能机器上的服务 worker 有 Image Worker 也有 Video Worker ,共用一套配置显然不能满足,若每个 worker 都将这些普遍共用的信息写入配置,那么维护起来非常不方便。因此,七牛的数据处理架构有了一些演变,就有了如下的架构。

首先,将 Data Cache 独立出来,理由非常简单,在很多环节都需要缓存服务,并且根据缓存数据大小、热度选择是 SSD 或者 HDD 进行缓存,小文件且热度高适合 SSD ,大文件且热度较低适合 HDD 。

其次,为每台服务器添加了 agent 服务。一台服务器可能有多个 worker 且可能是不同种的 worker ,数据处理调度服务只需要知道该请求的对应 worker 存在于哪些机器即可,剩下的判断则交由 agent 处理。因为整个计算集群的服务器存在性能差异,采用权重轮询调度,这时某个 worker 对应所在的机器一目了然,也不需要对 worker 整体标记序号,只需要知道某台服务器有哪些 worker 。 agent 可以承担 download 原数据的责任,相当于提取各个 worker 的一些公共操作都可以都交给 Agent ,同时, agent 分担了向 Data Cache 写入数据的任务。

值得一提的是,对于返回失败的数据也可以缓存。假如请求量巨大,每天 100 亿条请求,确认是客户端请求信息不当的错误约占 5%,那么就有 5 亿错误请求,即使服务迭代升级,也会保持原有接口功能不变。那么,若是同一个文件的同一个错误请求,基本上必然重现,这样的请求实际上就可以被缓存,一来用户那边获得快速响应,二来减少计算压力而且减少拖取数据的流量。后来发现这个方案存在一个瑕疵,就是给 Data Cache 造成的压力略微变大,且有部分错误请求响应并没有加快,至少为了获得缓存数据而读盘会有时间消耗。先前 worker 的设计是检查参数是否合法->download 数据->结合原数据信息检查参数是否合法。这里我们对错误请求做了细化,单独屏蔽了 download 数据之前所产生的错误请求,因为这部分响应非常快,本身也没有多少计算,无需写入缓存。

最后,通过 Discover 服务来监控服务情况的变化,所有的 agent 和 worker 都需要向 Discover 上报心跳状态, Load Balancer 会从 Discover 读取各个服务状态、服务相关信息(地址、权重等),同时允许人工通过 Discover 修改各个服务的状态。

异步请求的架构,则是在整个实时处理架构前面加上异步队列服务、异步请求状态服务等,每个 worker 的处理结果需要持久化,返回的是结果文件持久化保存后的相关信息。

现在的整个数据处理架构,看上去中规中矩,同时也存在一些弊端,即使做到了可以对单条请求大致消耗资源的预估,经过多次数据回滚压力测试以及峰值比对确定一台服务器应该部署多少个 worker ,实现较为合理的调度,但机器上的 worker 数量基本上是固定的,无法跨机器实现弹性的实时调度,服务器的资源仍然不能充分利用。例如,当实时处理服务的机器在非峰值阶段,可以将异步请求的服务 worker 迁移到该机器上,分担一部分任务,使得每台机器的负载较为均衡;当实时请求到达峰值的时候,可以迁移部分 worker 到处理公有队列异步请求的机器(付费的私有队列用户不受影响),分担部分压力。

因此,七牛后续将会对整个数据处理的架构做一些关于 Container 的尝试,希望打破原有的一些束缚,带来比较好的效果,可以把 agent 和 worker 放在一个 Container 内部,成为 1:1 的关系。 Container 自身具有隔离性,可以依据系统的资源情况选择这台机器有多少 Container 运行。当某一台服务器资源已经接近饱和时,就会在下一台服务器上启动一个新的 Container 继续接收请求。一旦某台服务器空闲下来,那么这台服务器就属于 Container 待运行的机器,整个计算服务器集群就是个资源池, worker 无需被机器束缚,哪里空闲就启动在哪里,再也不用担心机器资源浪费了。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [数据 架构] 推荐:

HBASE数据架构

- - 数据库 - ITeye博客
关系数据库一般用B+树,HBASE用的是LSM树. MYSQL所用类B+树一般深度不超过3层,数据单独存放,在B+树的叶节点存储指向实际数据的指针,叶节点之间也相互关联,类似双向链表. 这种结构的特点是数据更新或写入导致数据页表分散,不利于顺序访问. LSM存储中,各个文件的结构类似于B+树,但是分多个存在内存或磁盘中,更新和写入变成了磁盘的顺序写,只在合并时去掉重复或过时的数据.

再谈数据架构

- - 人月神话的BLOG
本篇为杂谈,主要是想谈下企业架构中数据架构部分的一些关键点. 首先在TOGAF的ADM方法论中将数据架构部分的内容放在了信息系统架构-数据架构部分,这个方式是不合适的. 前面一直强调了企业架构的两条重要线索,一个是流程,一个是数据,这两者都是既涉及到业务架构部分,也涉及到应用架构部分. 在最终架构的分析和分解,业务建模到IT实现的转换过程中,自然就会过渡到应用架构部分的内容.

大数据Lambda架构

- - CSDN博客云计算推荐文章
1 Lambda架构介绍.          Lambda架构划分为三层,分别是批处理层,服务层,和加速层. 最终实现的效果,可以使用下面的表达式来说明. 1.1 批处理层(Batch Layer, Apache Hadoop).          批处理层主用由Hadoop来实现,负责数据的存储和产生任意的视图数据.

大数据架构hadoop

- - CSDN博客云计算推荐文章
摘要:Admaster数据挖掘总监 随着互联网、移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求. 随着互联网、移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求.

浅析信息系统架构的应用架构与数据架构

- - 企业架构 - ITeye博客
    信息系统架构包括了对于 应用架构和数据架构. 这里不再介绍具体的方法论,而是考虑如何在设计信息系统架构时有效地避免复杂性. 在应用系统层面将通过分层和配置的方式来简化应用系统,从而可以获得简单的架构. 在数据架构层面将通过分层主数据的思想来考虑我们如何来管理主数据. 企业从生产/采购计划开始,到生产/采购管理,以及现场制造的执行.

对数据库架构的再思考

- - 人月神话的BLOG
前面在谈PaaS的时候曾经谈到过共享数据库,私有数据库的问题,在这里再谈谈在多业务系统建设过程中的数据架构模式问题. 首先来看下传统的数据交换解决方案如下图:. 业务场景为单独构建的四个业务系统,在四个业务系统中SID数据为需要跨四个应用交互和共享的数据. 传统的做法则是对四个应用存在的SID库数据进行数据集成和交换,则后续的每一个业务系统中都有全部的共享基础数据,任何一个应用的SID库数据需要通过数据交换和集成同步四份.

谈大数据-架构维度

- - 人月神话的BLOG
本篇作为在构思大数据平台架构时候维度方面的简单点滴思考记录. 前面关于大数据平台架构的核心功能的时候谈到过,基本应该包括数据采集和集成,数据存储,数据处理,数据分析这些核心层面. 我在前面谈大数据平台的时候也谈到过平台不仅仅是云和分布式相关技术的引入,其架构一方面和传统的BI相似,但是更加重要的则是对外部应用涉及到大数据的应用场景的支撑和大数据平台本身的大数据服务能力的开放问题.

典型的大数据架构

- - 数据库 - ITeye博客
“任何数据架构由主要的四个逻辑组件组成:”. “我不认为这是一个大数据架构的蓝图. 但这样一个图能给你一个关于可能包含的组件的大致的想法. 然后对工程师让事情变得简单,你开始在每个等级上添加需求,约束,和服务等级协议(SLAS Service-level agreement). 一旦你有了关于事情该怎么看的某种想法,你开始建立它并发现你将用到的一些组件不能很好的在一起工作,或者根本没有办法达到这些服务等级协议.

七牛数据处理架构变迁

- - 互联网 - ITeye博客
据统计,互联网数据量正以每三年翻一番的速度膨胀,其中, 95%以上都是非结构化数据,且这个比例仍在不断提升. 如今,互联网已全面覆盖大家生活的方方面面,每个人的消费行为、娱乐行为和社交行为都将产生海量的图片、音视频、网络日志等非结构化数据. 非结构化数据的持续在线及数据种类的多样对数据的处理提出了很高的要求.

数据仓库的架构与设计

- - CSDN博客推荐文章
公司之前的数据都是直接传到Hdfs上进行操作,没有一个数据仓库,趁着最近空出几台服务器,搭了个简陋的数据仓库,这里记录一下数据仓库的一些知识. 数据仓库多维数据模型的设计. 数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持. 这个定义的确官方,但是却指出了数据仓库的四个特点.