伴随移动设备和流式数据的爆发式增长,开发者构建多种并发数据流水线来应对海量和异构以及实时数据的挑战,其中最流行的是 Google 的 MapReduce,MapReduce 一直是服务器集群上做并行分布式计算的一个非常受欢迎的基础架构和编程模型。然而 MapReduce 在流水线构建和维护方面成本都比较高,日渐成为困扰全世界开发者的问题。在今年的年度开发者大会上,Google 发布了其云计算方面的一系列全新尝试, Cloud Dataflow 就是其主推的一种技术。Cloud Dataflow 是一种构建、管理和优化复杂数据流水线的方法,用于构建移动应用,调试、追踪和监控产品级云应用。它采用了 Google 内部的技术 Flume 和 MillWhell,其中 Flume 用于数据的高效并行化处理,而 MillWhell 则用于互联网级别的带有很好容错机制的流处理。
Google 云平台的产品营销总监 Brian Goldfarb 说:“Cloud Dataflow 可以用于处理批量数据和流数据两种。在一个世界性事件(比如演讲当中的世界杯事件)中,实时分析上百万 twitter 数据。在流水线的一个部阶段责读取 tweet,下一个阶段负责抽取标签。另一个阶段对 tweet 分类(基于情感,正面负面或者其他方面)。下一个阶段过滤关键词等等。相比之下,Map/Reduce 这个用来处理大数据的较早模型,处理这种实时数据已经力不从心,而且也很难应用到这种很长很复杂的数据流水线上。”
Google 的新平台 Cloud Dataflow 针对批量数据和流数据提供了统一的 API,对于简单和复杂的流水线,也是一样的。有了 Cloud Dataflow,开发者能够更加聚焦于数据逻辑本身,而将之前复杂的流水线优化留给 Google 云,也无需关注部署、维护和扩展其应用架构。Cloud Dataflow 可用于 ETL、批量数据处理、流数据分析等等,它可以自动地优化部署开发者代码所需要的资源。相比起独立关注数据流水线的每个阶段,Cloud Dataflow 考虑了这些阶段之间的交互。为了处理好阶段之间传输的数据流,Cloud Dataflow 利用 key、滑动窗口、Map/Reduce 部分技术以及其他技术来聚合数据。
在 Cloud Dataflow 的帮助下,Google 云平台对任何应用都能给出业界最好的优化方式,开发者在大多数情况下都可以直接使用这些优化,在极端情况还可以使用自己定制的代码进行替换。Cloud Dataflow 简单易用,对于开发者来说,大部分情况下,他们都是在跟 API 的简单部分打交道。下面是一段来自大会主题演讲的代码示例:
Pipeline pipeline = Pipeline.create(); PCollection tweets = pipeline.begin() .apply(new InputFromPubSub()) .apply(new TweetTransformer()); tweets.apply(new CalculateSentiment()); tweets.apply(new CorrelateKeywords()); pipeline.run();
(当前的 API 还只有 Java 版本)
开发者定义流水线,确保每个部分(TweetTransformer,CalculateSentiment 等等)的代码的效率和正确性。Google 云就会开始执行工作流。Google 云还会注意底层的虚拟机细节。诸如部署、扩展、加减速等都会在后台完成。
为了配合 Cloud Dataflow,Google 还为开发者提供了一些新工具,来帮助他们更容易和高效的工作。工具包括云保存、云调试、云追踪以及云监控。
-
云保存是一个简单的 API,用来保存、获取和同步云中的用户信息。信息可能包括应用数据、偏好以及其他。数据存储在 Google 的云存储 Cloud Datastore 中,可以通过现有的数据存储 API,在 Google 的 App Engine 或者 Compute Engine 中访问。 ```
GoogleAppClient client = . . .
List infoToSave = . . .
SaveResult saveResult = CloudSaveManager.save(client, infoToSave);
- 云调试,正如名字所表示的意思,它是一个调试接口(以网页的形式呈现),用于调试基于云的应用,为开发者提供了一个全新的现代化的调试方式。 ![](https://static001.infoq.cn/resource/image/58/7e/58ba350856b03380bc064818cc7f217e.jpg) - 通常来讲,快速定位效率瓶颈是很难的,云追踪,提供了一个非常有用的可视化工具,将调用数据库的夫妇所消耗的时间很好的呈现,使得开发者将其应用的时间消耗分布更好的展现和理解。进一步来讲,开发者还可以比较其应用不同版本的性能。 ![](https://static001.infoq.cn/resource/image/75/88/75976a22a0bd7fe613371f2902868a88.jpg) - 云监控的设计,旨在帮助开发者找到和修复应用中的异常情况。收购了 Stackdriver 以后,云监控可以提供各类统计数据、监控界面以及应用报警,可以自定义报警,在用户收到影响之前提醒开发者,还有一系列流行的开源软件如 Apache、Nginx、MongoDB、MySQL、Tomcat、IIS 等等。比如可以用云监控来发现和调试用户在连接到 App Engine 时错误频发的情况,或者通过简单的配置来降低 Cassandra 的检索时间。 ![](https://static001.infoq.cn/resource/image/cb/f7/cbbd0b4d6754f73241f8b70ed11321f7.jpg) 本图是 Google 最近购买的 Stackdriver 的云监控画面 Cloud Dataflow 以及附属工具现在还是 Beta 版本。公开发行时间尚未确认。可以相信的是,有了这样的强大工具,开发者能够快速自动扩展、缓存其应用。例如 Snapchat 或者 Rising Star 这样的应用已经在 Google 云平台上运行。 - - - - - - 感谢 [郭蕾](http://www.infoq.com/cn/author/%E9%83%AD%E8%95%BE) 对本文的审校。 给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 [editors@cn.infoq.com](mailto:editors@cn.infoq.com)。也欢迎大家通过新浪微博([@InfoQ](http://www.weibo.com/infoqchina))或者腾讯微博([@InfoQ](http://t.qq.com/infoqchina))关注我们,并与我们的编辑和其他读者朋友交流。
评论