Star

云计算应用实例:OFA/Start-ups/Data Analytics/Cloud Migration Exercise

本文主要是总结一些云计算的应用实例,是否要用云计算这个问题是个很复杂的问题,大多数时候需要根据需求和预算才能得到确切的答案,云计算是趋势,但如何利用是个值得仔细考虑的问题。

云计算应用实例:Obama For America

Obama For America(OFA)是云计算一个经典实例,云计算被运用在筹集竞选资金、分析竞争对手、有效使用竞选资金等都为奥巴马的连任成功提供了极大的保障。

OFA是什么?

OFA利用数据集成和预测分析使奥巴马赢得了选举,主要通过数据挖掘来确定及影响摇摆州的投票目标。OFA的数据来源包含:人口数据,投票历史数据,筹款数据,志愿者数据,社交网络数据以及投票数据,得到相关数据后,通过上门拜访,打电话,邮件,信件,网络广告,社交媒体,付费电视和网站等方式来影响投票人的决定。

OFA的一些数据

根据DevOps的负责人透露,OFA的一些关键数据包括:

  • 4Gbps带宽
  • 每秒10,000条请求
  • 2,000个数据节点
  • 3个数据中心
  • 180TB数据量
  • 共约85亿条请求
  • 从设计到部署到应用共用了583天
  • 最多30分钟的宕机时间
  • 技术团队共40人

核心应用

Obama For America团队一共构建了200个应用,包括:

Narwhal

Narwhal是一个python写的REST API,可调用存放的所有数据。在OFA中,大多数数据存放在MySQL为主的关系型数据库中,但也使用了PostgresDB, MS SQL Server, MongoDB, Vertica, LevelDB, S3, DynamoDB, SimpleDB数据库。除数据存储之外,主要应用了AWS EMR(Elastic MapReduce service)和Vertica来处理大量的数据建模和分析的工作。

CallTool

CallTool可以用来让志愿者给投票人打电话。在选举的最后四天里,这个工具被1000多个志愿者给超过百万的投票人打了电话。工具可以将志愿者和投票人进行配对。团队在其中应用了AWS的auto-scalling功能在需求高峰能够快速增加云资源。

DashBoard

一个用来登记志愿者信息,并允许志愿者查看相应进度和收集到的信息的Rails线上应用工具。

Dreamcatcher

Dreamcatcher可以通过处理社交网络上的政治舆情,精确确定目标投票人,并赢得投票人。

GOTV

GOTV即Get out the vote,这个应用用来动员支持者将支持转化为投票。

AWS如何帮助了OFA?

OFA所有的应用几乎都部署在AWS云端,他们应用了分布消息队列,NoSQL和SQL数据库,虚拟私有云服务,负载均衡,内容传输网络等服务。 除了能够应对大规模数据处理需求之外,还能够在需求高峰通过自动增加云计算资源保证响应速度。另外,团队在数据备份上也充分利用了云计算的优势。


Reference:

  1. How Obama’s tech team helped deliver the 2012 election
  2. Wikipedia:Organizing for America
  3. CMU 15719 slides
  4. 6 Ways Amazon Cloud Helped Obama Win

云计算应用实例:Start-ups

背景

对于Start-up来说,计算要求往往各种各样,需求量不大,变化却很快。在有限的预算下,还存在着硬件采购周期长,部署周期长,负担不起系统管理,数据中心能量供应,利用率低,灾难响应速度低等问题。

所以,云计算成为了Start-up的一种选择。举个栗子:

GoSquared

GoSquared是一家提供线上实时数据网站分析的企业,被TechCrunch报道后,使用量忽然增加,没有足够的资源应对增长,最终把网站搬到了AWS上,可以迅速得到更多资源,快速拓展。

Reference

AWS case study: GoSquared

云计算应用实例:Data Analytics

如今企业决策都讲究数据驱动,层出不穷的多媒体数据往往有不同的数据来源,从text到图片到音频和视频。数据处理还分为批处理和流处理。如今,传统的数据处理流程也慢慢转向了云端。

数据处理流程图

Lambda架构

Lambda架构定义了一套明确的架构原则,同时利用批处理和流处理对大规模的数据进行处理。此框架的提出主要是为了解决这样的一个问题:如何实时地在任意大数据集上进行查询?

Lambda架构包含三层layer:

  • 批处理层:写一次,批量读取多次
    主要有Hadoop实现,负责数据存储和产生试图数据。当新数据到达时,会用MapReduce迭代地讲数据聚集到视图中。根据数据大小和集群的规模,迭代转换计算时间大约需要几小时。
  • 服务层:随机读取,不支持随机写入,批量计算和批量写入
    这层由Cloudera Impala实现,对于上一层输出的一些列包含预计算视图的原始文件,服务层在Hive元数据层中创建一个表,元数据都指向HDFS中的文件,随后用户可以通过Impala查询到视图。这里服务层用Impala就是为了快速而且交互地查询到Hadoop存储和处理的数据。但是由于MapReduce在实时数据处理中的高延迟,我们还需要加速层。 在这一层中,需要合并处理Batch views和Real-time views得到最终user需要的query结果。
  • 加速层:随机读取,随机写入,增量计算
    本层利用Strom框架计算实时视图,使用增量模型,将实时视图作为临时量,只要数据被传送到批处理层中,服务层相应的实时视图就会被丢掉。由于应用了增量模型,往往会比较复杂。

所以,整个流程为,当数据进来时,会并行地进入到批处理层与加速层,当两者查询都完成在服务层整合好后,才算完成一次完整的查询。

但是这样令人激动的模型,还存在着一些争议,比如

  • 代码维护需要在两个复杂的分布式系统中进行,需要对不同的框架进行不同的编程。
  • 在两个分布式系统中运行和维护程序任然很难,比如跨数据库系统中进行ORM(对象关系映射)就会比较难。

关于Lambda框架的具体细节可参考这本书:《Big data: Principles and best practices of scalable realtime data systems》 其中除了介绍Lambda框架外,还重点放在了一些重要的地方:

  • 分布式思想
  • 避免增量架构
  • 创建再计算算法
  • 数据相关性
  • 关注数据不可变

这张图很好诠释了Lambda是如何处理query的:

随着发展,后来,Spark被认为是Lambda框架的合理实现。所以在这一部分,感觉写Lambda框架有点过时呢,但老师提到了就再理解一下。时代发展就是这样的,Lambda框架这种临时解决方案,会被更完美的方案取代。不过,不管怎样,人类的进步是令人欣喜的。关于Spark有空可以再写一篇具体一点的,amazing。

References:

  1. 大数据Lambda架构
  2. Wikipedia Lambda Architecture
  3. Lambda Architecture with Apache Spark

云计算应用实例:云迁移 (究竟是否应该选择Cloud?)

对研究室来说,是应该使用预置的硬件,还是迁移到云端? 回答当然是,“It depends.”。

比如需求是这样:

如果我们选择预置的机器,按照五年来算:

有以下两种云计算的方案: 方案1: 方案2:

所以我们可以针对不同的需求、不同的云计算选择、不同的费用模型、不同的权限要求等来选择是否迁移到云端。

另外,在对比时,我们还需要考虑:

  • 对于本地预置机器:供电、散热、安全性等
  • 对于云端:迁移到/迁出云端的成本等