利用数据中心操作系统三天内搭建分布式应用:芝加哥犯罪地图

【编者的话】技术在不断进步,优秀的组件和开源技术也越来越多,这让搭建一个分布式应用变得日益复杂。比如下文中所说的搭建一个crime-map应用,如果从0开始进行安装配置,并最终开发完成,可能需要几周甚至更长的时间。但如果使用数据中心操作系统(DCOS),则能大大简化应用后台的搭建工作,让整个应用开发周期减少到3天。一键部署分布式应用,让用户像使用单机电脑一样管理集群和云端应用,正是数人云所要做的。

利用数据中心操作系统(即Datacenter Operating System,简称DCOS)的帮助,在几天之内开发并部署一款出色且能够用于生产事务的分布式应用程序已经成为可能。我们在最近的一次公司异地会议上,已经切实证明了这一点——在短短三天之内,一款以DCOS、Marathon、Kubernetes、Kafka、Spark以及InfluxDB等组件作为后端的crime-map应用已然正式上线。

如果没有DCOS的帮助,同样的时间周期恐怕只能够让开发人员完成各独立组件的安装与配置工作——而我们,已经构建起了完整的项目成果。

任务目标

Mesosphere公司最近刚刚在墨西哥召开了一次异地会议。作为Hackathon的一部分,我的团队决定利用真实世界中的犯罪数据构建一套DCOS应用演示。犯罪数据——我们所使用的是由芝加哥市政方面提供的公开数据——能够帮助我们了解多方面细节信息,包括房地产规划到警力调遣等等。很明显,以在线(目前正值犯罪活动的高发期)乃至离线方式访问这些数据能够产生可观的实际价值(从历史角度讲,芝加哥一直是犯罪活动的高发地带)。

参与此次演示方案开发的团队成员依次为Michael Gummelt、Tobi Knaup、Stefan Schimanski、James DeFelice和我自己。我们有三天时间来完成该项目构建,从架构设计到实现再到说明文档编写全部囊括于其中。而且在着手工作之初,我们没有任何现成的代码库可供使用——换言之,我们需要白手起家从零开始。

不过凭借着DCOS在快速迭代与架构模块化方面的出色特性,我们得以及时完成这套演示方案的构建,甚至还能够抽出点时间享受墨西哥那温暖而明媚的日光。

下面来看我们开发出的具体架构:

分布式应用-芝加哥犯罪地图架构图

基本目标是尽可能多地演示并运用一些比较好实践,具体包括:

  • 使用mhausenblas/tsdemo-s3-fetcher等定制化Docker镜像,从而演示如何在DCOS当中轻松实现有效的持续集成/技术交付能力。
  • 通过使用Kubernetes,我们展示了如何在单一pod之内实现Web应用程序交付与S3数据提取机制,外加这种方式在数据存储位置方面带来的优势。
  • 通过使用Kubernetes当中的各种隐私保护能力,我们演示了如何在Secret模式下回避AWS的凭证验证机制。
  • 通过使用Kafka实现在线与离线功能部分,我们展示了如何轻松通过单一可靠数据源对接多种不同工作负载。

总结出的经验

Spark数据流处理技术在我们的实践当中虽然出现了小小的问题,但总体来讲进展顺利,其具体任务包括通过HTTP API将提取到的数据导入InfluxDB以及处理JSON序列化等问题。我们的实现方案——其在线处理部分要求将输出结果导入InfluxDB,而离线处理部分则要求将结果写入至预定义的S3存储桶,且这两部分共同作为单一Spark数据流应用的构成要素——在实践角度看效果并不太好。但之所以出现这样的状况,是因为本次黑客马拉松预设的时间周期太过紧张,如果拥有更为宽裕的可支配时间,相信结果会更加令人满意。

在我们的演示当中,AWS S3扮演着Spark数据流处理与离线报告Web应用之间的对接桥梁。这项服务易于上手且能够被轻松用于为消费型下游Web应用交付数据供应。

我们在使用Kubernetes的过程当中遇到了几项bug(我们利用Kbernetes实现应用项目的离线处理部分),而且具体来讲它们都属于“核心”bug。是的,这些bug完全由Kubernetes自身所产生,与我们在DCOS当中所采取的Kubernetes具体设置方式没有任何关系:

实践经验总结

在这三天当中,我们完成了整套代码库的构建,并以端到端方式对分布式应用程序成果进行了测试与部署。在DCOS的帮助下,我们得以轻松实现该应用程序当中的无状态部分以及核心数据通道。尽管我们发现了一些仍能进一步改善的地方,例如利用Cassandra+KairosDB取代InfluxDB,但总体而言我们对于自己的工作成果仍然感到相当满意。

原文链接:https://mesosphere.com/blog/2015/11/18/dcos-time-series-demo/