云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

阿里云_cdn业务研发_企业级

小七 141 0

在Nomad上介绍Heron

杰瑞目前是Streamlio的软件工程师,这是一家处于连接、处理和存储快速移动数据的前沿的初创公司。杰里在伊利诺伊大学香槟分校读研究生以来,一直在分布式系统和流处理领域工作。他曾在Citadel和雅虎工作过。Jerry还是Apache风暴提交者和PMC成员。Linkedin:https://www.linkedin.com/in/boyang-jerry-pengapacheheron是一个流处理引擎(SPE),2016年由Twitter开源,目前在Apache软件基金会的支持下处于孵化期。在Twitter上,Heron是为了提供多租户、高效的资源使用、支持多种编程语言和api、大规模操作的简单性以及开发人员构建实时和批处理服务的高生产率而构建的。如今,Heron服务于Twitter巨大的实时处理需求的大部分份额,被许多大型企业使用,并且拥有一个蓬勃发展的开源社区。作为Heron的核心贡献者,我很高兴地宣布,Nomad将被添加为Heron的一个完全受支持的调度器。在这篇博文中,我将首先对Heron进行基本介绍,然后讨论我们为什么以及如何向Heron添加Nomad支持。»Apache Heron基础知识Heron是一个SPE,它使您能够轻松地运行和管理流处理应用程序(称为拓扑)。处理拓扑可以在逻辑上表示为有向无环图(DAG),其中每条边表示一个数据流或事件流,每个顶点表示一个运算符,该运算符使用应用程序定义的逻辑(即您编写的代码)来处理来自相邻边的数据或事件。在处理图时,顶点(操作符)可以分为两种类型:源和汇。源使用外部数据/事件并将其注入处理图中,而接收器通常收集图形生成的结果。在Heron中,源操作符被称为spouts(想象一个向图形中注入数据的水龙头),而非源操作符sink操作符或常规操作符被称为bolts。喷口和螺栓是Heron拓扑的组成部分。您可以在图1中看到DAG、Heron拓扑以及每个组件如何排列的图。图1。有向无环图与Heron拓扑在Heron拓扑中,喷口将数据输入到处理图中,然后螺栓处理这些数据。下面的图2显示了一个拓扑示例。图2。一种通用的Heron拓扑在这种拓扑中,有两个喷口,喷口1和喷口2。喷口1产生两个数据流,一个由螺栓1消耗,另一个由螺栓2消耗。类似地,喷口2产生由螺栓3消耗的数据流。螺栓1、2和3分别处理其传入数据流并生成输出流。Bolt 4消耗Bolt 1生成的流,而Bolt 5接收Bolt 2和Bolt 3生成的两个流。»逻辑计划和物理计划Heron拓扑的处理逻辑可以使用多种语言(包括Java和Python)和API(包括更为过程化的Storm API和功能更强大的Streamlet API)编写。当您使用这些语言/api之一创建拓扑时,Heron会自动将为拓扑创建的处理逻辑转换为处理图的逻辑计划(如图2所示),然后转换为各种拓扑进程如何实际运行不同拓扑组件(喷口和螺栓)的物理计划。实际计划是调度员的职责所在。Heron不充当拓扑进程的调度程序。相反,Heron管理拓扑实例,激活它们、杀死它们、更新它们等等——与外部调度器一起管理,而不是直接执行这些工作。Heron最初支持apacheaurora调度器(Twitter将其用于内部需求),但Heron的可扩展性使社区能够添加对多种调度器的支持,包括Mesos、YARN和Kubernetes。»字数拓扑为了给出一个比图2中假设的拓扑更具体的例子,假设一个拓扑计算tweet流中不同的单词集。这种拓扑结构,如图3所示,由一个喷嘴和两个螺栓组成。图3。用于计算tweet流上不同单词的拓扑结构tweet喷嘴接入tweet源,例如Twitter API,并将tweet流注入拓扑中。tweet流随后被parse tweet bolt消耗,它将tweet分解为一组不同的单词。这些单词被作为一个词流发出,并被计数单词的单词count bolt消耗。单词计数bolt周期性地输出代表特定单词和它们的出现计数的对。»平行性运行上述单词计数拓扑的一种方法是将每个组件(即每个喷嘴和螺栓)作为单个进程运行。但是对于许多用例,您将需要运行每个组件的多个实例,例如tweet-spout的5个实例,parse-tweet-bolt的3个实例,等等。开发人员可以在创建拓扑时指定每个组件的并行性,Heron将完成其余的工作,在组件实例之间路由数据流,并使用调度器(例如Nomad)来运行组件。图4描述了图2中所示的并行拓扑结构。例如,螺栓1的平行度为2,螺栓2的平行度为3,依此类推。图4。为每个节点指定并行度的拓扑并行是用户根据需要扩展组件计算的一种方法。通常,组件的并行性是根据传入数据速率、传出数据速率和组件的计算强度来指定的,但是您可以使用自己的标准来做出这些决定。»Heron用例为了突出介绍Heron的一些实际用例,让我们首先在Twitter上讨论Heron的一些值得注意的用例。滥用检测-Heron用于分析Twitter上的连续实时数据,以找到虚假或滥用的帐户,因此可以采取主动行动,从这些帐户中删除这些帐户和推文。实时趋势-Twitter使用Heron通过检查所有Tweet数据来持续计算趋势。不断计算突发新闻和标签趋势,并将结果发送给最终用户在线机器学习-随着新数据的到来,模型会不断更新。实时分类-上传到twitter的各种媒体,如照片、视频等,根据从中提取的特征实时分类。运营——Twitter运行的数据中心遍布五大洲,由数十万台机器组成。Heron实时分析统计数据和日志,以监视群集的运行状况并预测即将发生的故障。让我们深入研究Heron的几个用例。低延迟数据流处理的一个经典用例是在广告服务领域。在Twitter,有关广告参与、印象和请求的实时数据首先由一个名为Event Bus的消息传递系统收集。然后,这些数据被注入到Heron拓扑中进行处理,结果要么被发送到键值存储区(Manhattan),要么可能被传递到事件总线中。结果可用于跟踪某些广告活动的绩效,并实时监控最终用户的广告支出,使其在预算范围内。图5描述了这个用例的架构。图5。实时广告另一个有趣的用例出现在Twitter之外。当我们进入物联网时代,我们生活的方方面面都变得相互联系,我们的汽车也一样。汽车行业有一项倡议,利用实时分析使我们的汽车更智能。信息系统收集有关汽车性能、驾驶习惯等的实时统计数据。从那里,这些来自所有连接车辆的实时统计数据被注入Heron进行分析,以实时预测特定路线的燃油效率和交通模式,预测您的汽车故障,等等。这样的分析对于确定现收现付汽车保险的条款非常有价值。图6描述了这个用例的架构。图6。联网汽车»游牧民的苍鹭我对HashiCorp Nomad已经兴奋了好几年了。调度程序是许多大型软件系统中的关键组件,而Nomad功能强大,它提供了一个简单的API和简单的抽象(例如作业),并且它作为预编译的二进制文件分发使得部署变得轻而易举。它也有很好的文档和非常好的用户界面。建立对Heron的Nomad支持非常简单,而且,我相信,这是该项目的一大胜利。现在,apacheheron不仅可以在大规模生产环境中使用现有的Nomad集群运行,而且由于Nomad的操作简单性,我们还选择Nomad作为apacheheron所谓的独立集群模式的调度器(更多信息见下文)。独立集群模式允许用户快速轻松地建立一个轻量级的分布式集群,在自己的机器上运行apacheheron处理拓扑,从而可以轻松地构建一个现成的开发和测试环境。更好的是,当使用Nomad和原始fork/exec驱动程序时,用户甚至不需要admin/root权限来运行集群。将Heron与Nomad集成可能会降低许多用户的进入门槛。图7显示了Heron如何使用Nomad管理拓扑:图7。Heron调度程序体系结构当您使用Heron CLI向Heron提交新拓扑时,它将与Heron API服务器交互,后者为拓扑创建一个逻辑和物理计划,并将任何拓扑构件上载到存储系统(Heron的这一方面也是高度可配置/可扩展的)。然后,API服务器为Nomad提供一个逻辑的