阅读更多

0顶
0踩

互联网
【编者按】本文由Autodesk Cloud软件架构师Olivier Paugam撰写,解释了如何集合Mesos、Kafka、RabbitMQ、Akka、Splunk、Librato、EC2等基础设施解决实际问题。此外,以如此小规模的团队解决问题确实令人赞叹。



以下为分享原文:

数月前分到了一项新的任务:做一个集中事件系统(central eventing system),允许各个后端彼此通讯——包括动态流式(activity streaming)后端、渲染、数据转换、BIM、日志报告、分析等等。最终确定,这应该是一个可以匹配多种负载、使用场景与可扩展配置文件的通用系统。此外,这个系统还需要具备简单易用的接口。最后,这个系统的每部分都应当能够自动扩展。

然而,笔者根本没有那么多的时间去深入开发,再选用稳定通用、性能良好的Kafka作为存储核心(当然这里Kafka并不是唯一选择)。同时需要注意的是,这里还需要通过一些API将之以前端的方式提供。而在一些思考后,使用后端管理offset同样被否决,因为这样做在处理实例错误时需要建立大量约束。

基于这些需求,这里设置了两个独立的层:一个API层,处理接收的信息;还有一个后端层,托管常驻、有状态的Kafka做通信的流处理服务(比如执行生产者和消费者)。这两个独立的层分别具备良好的扩展性,只需要一致的路径以确保客户端与同一个后端流处理服务通讯不会中断。

这两个独立的层完全用Scala实现,并使用了Play!框架。同时,这两个层都非常依赖Akka的actor系统(每个节点通常运行着几百个actor)。后端层执行了定制的Kafka producer与consumer,并使用了独立的actor设置来管理预读与写入缓存。在整套系统中,“ Everything is implemented as nested finite-state machines ”被一直执行。使用Librato收集度量数据,随后转到Splunk处理。



如上所述,这里实现了两个独立的层,那么它们之间的路由机制该如何完成?非常简单,这里使用的是用RabbitMQ——可靠且兼具弹性!对于实现这个“phone-switch”,AMQP队列是良医妙药。同时,使用逻辑分片对其扩展也十分简单(比如对每个事务中出现的cookie使用哈希),它将会把一组固定的后端节点与一个RabbitMQ broker连接起来。

那么,这里为什么不聚合RabbitMQ broker?其主要原因在于这么做并不会带来显著地提升,同时也非常耗时。实际上,各独立broker之间的分区流量更高效易控。跟收益比起来,附加的工作量微不足道。

简而言之,在一些容器拓扑中执行针对路径路径,其取决于不同后端节点主导的是什么样的streaming session。扩展整体与分层拓展一样简单,取决于具体的需求。实际中唯一的限制来自虚拟网络适配器与其带宽。



现在有趣的部分来了:流量的稳定该如何确保,同时还需要避免byzantine 故障?其实这里并不存在太多的挑战,只需使用一个简单的二阶段提交协议,将客户端与后端作为镜像的状态机(比如始终同步),这可以通过让读写操作需求明确的确认请求来实现。尝试读取的做法在失败后进行重试,直到获得确认,接下来会对后端更新(比如将Kafka offset转发,或者编排一系列事件发布)。这样,客户端与后端之间的传输就类似于“分配session”、“读取”、“确认”、“读取”、“确认”……“处理”。

通过这些处理,系统的巨大优势在于可以有效地呈现操作幂等,同时还可以在状态机上编译所有逻辑,无需使用烦人的说明语句(PS,请原谅我追求酷炫的思想)。此外,任何网络故障都可以通过重试解决,从而可以自由地实现control-flow和back-pressure。

这样一来,所有功能都通过Apache ThriftAPI提供(汇聚了压缩和HTTS,并准备实现某些情况下场景的TCP切换)。当下,平台客户端已经使用了Python、Scala、NET和Ruby等多个语言,并使用了大量炫酷的技术。值得一提的是,Kafka offset是由客户端控制的,使得控制后台更为简单。

到了这里,你肯定想问,后端节点挂掉的话该如何处理?这里需要感谢的是二阶段提交协议让读取数据变得简单——客户端复制失败后会使用现有的offset重新分配一个新的streaming session。因此这里的问题存在于向Kafka写入数据,因为它是异步的,因此可能会面临受到下游back-pressure的情况(在节点失败后,Kafka broker也会出现问题,这一点必须注意)。因此这里需要为后端系统实现一个优雅的关闭功能,从而在等待写入时关闭阻止新的请求进入。再不济,也可以将任何等待数据刷新到磁盘中,等待稍后处理。

这里你肯定想问,基础设施问题该如何解决?这里的原理是相同的,任何与处理streaming session的实际后端节点传输中断必然会导致速度变慢,但是由于二阶段提交,这里不会产生令人不快的影响。

此外,在落入Kafka log之前数据会被自动加密(AES 256),当然你一定要在Kafka producers和consumers之间共享秘钥那么只能祝你好运了。关于安全,streaming session通过OAUTH2认证,每个请求单独用MD5-HMAC,并通过TLS向后端集群传输。

那么,这个炫酷的系统是如何部署的?这里使用是Mesos/Marathon集群来运行(现在还不是DCOS,不过在未来会转换过去,并享受其强大的控制面板)。当下,集群托管在AWS EC2 上,在多个c3.2xlarge实例上被复用(在给定区域中执行一个小型部署,10到20算不少了)。请注意,在Kubernetes(不管是EC2还是GCE)也可以使用同样的方法。



使用Ochopod技术完成部署(自集群容器),它同样是开源的。将操作减到最少。比如推进build时,API层只负责分配一些新的容器,等分配好之后再逐步清理旧的。所有这些操作都通过一个专门的、在集群中运行的Jenkins从节点来处理(其本身也是一个Ochopod容器)。

事实上,笔者也开发了Ochothon mini-PaaS,只是为了快速开发运维(devops)所有的容器。



下面让你体会Ocho-* 平台的强大:1个人(笔者)可以管理跨越2个regions上的5个系统部署,包括所有备份基础设施……而且还有时间写写博客和代码。

所以,总体来讲,对它设计与编码是件很有意思的事情,再加上它现在作为Autodesk Cloud基础设施的关键部分在生产环境运行(相当不错)。也欢迎各位提交问题。

相关阅读:

原文链接:How Autodesk Implemented Scalable Eventing Over Mesos(译者/孙薇 审校/朱正贵 责编/仲浩)
  • 大小: 5 KB
  • 大小: 17.6 KB
  • 大小: 87.1 KB
  • 大小: 138.1 KB
  • 大小: 283.5 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Autodesk基于Mesos和Kafka的通用事件系统架构

    【编者的话】我非常喜欢这篇博客,因为它揭示了许多简单架构模块—例如:Mesos、Kafka、RabbitMQ、Akka、Splunk、Librato和EC2可以整合起来来解决实际问题。而且一个小团队就可以获得非常令人惊讶的成就。 几个月...

  • Autodesk基于Mesos的可扩展事件系统

    几个月前,我接到一个任务,要拿出一个集中式的事件系统,可以让我们的各种后端组件相互通信。我们讨论了后端活动流、渲染、数据转换、建筑信息模型(BIM)、个性身份(identity)、日志报表、分析等等。找寻其中...

  • Mesos入门介绍

    2016年会火的技术之一, Mesos。 花了一些时间, 将Mesos相关的知识整理了一下, 以做备忘。 水平有限, 如有疏漏或谬误之处, 还望指出。  Mesos是什么 Mesos是一个集群管理平台。 可以理解为是一种分布式...

  • Docker 与 Mesos 的前生今世 | 数人云CTO肖德时@KVM分享实录

    今天小数给大家带来一篇技术正能量满满的分享——...十五年计算机行业从业经验,曾为红帽 Engineering Service 部门内部工具组 Team Leader,Docker/Mesos 社区代码贡献者。现负责数人云云计算的研发及架构设计工...

  • 2018年开源容器云,你的技术路线选对了吗?

    同时,Mesos通过两级调度架构管理多种类型的应用程序,第一级调度由Mesos监控集群的空余资源,并将空余资源按照一定规则分配给各个计算框架;第二级调度由框架(Framework)组成,各个计算框架会根据需要选择接受...

  • qconshanghai2016

    http://2016.qconshanghai.com/schedule 大会日程 2016年10月20日 星期四 07:45 开始签到 ...大数据应用与系统优化实践(厂商共建) 微服务架构,我们该如何实践? 地点 百...

  • 2016 上海 Qcon 值得关注的技术

    虚拟机层面加入虚拟化的支持,能有效解决传统热更新方案的痛点,高效精确的回收系统资源。对于大规模 Java 应用,可以做到不重启 Java 进程而达到更新应用的目的,整体更新操作时间也被大大缩短。 ...

  • qconshanghai2015

    Uber首席系统架构师 Matt Ranney Slides下载 高性能数据分析平台架构实践:SequoiaDB + Power Linux IBM资深售前技术工程师 孔皓 Slides下载 10:40 短休 专题 可扩展、高可用...

  • 我关注的一周技术动态 2015.08.30

    服务化和资源管理技术 1. Docker基础技术:AUFS ... ...要点: 支持层次化镜像是 docker 的一大创新之一, 本文详细介绍了实现层次化镜像的技术手段之一 aufs 的使用...2. Autodesk基于Mesos的通用事件系统架构 ...

  • (转)那些年不容错过的硅谷IT公司

    是由 dotCloud 创建的一款开源应用引擎,它相当于是加在 LXC(LinuX Containers,一种轻量、基于容器、操作系统层的虚拟化技术)上的管道,通过高级 API 为进程单独提供了一个轻量级的虚拟环境。Docker 镜像犹如一个...

  • 最受IT公司欢迎的50款开源软件

    Sencha Touch 自称是“一种用于构建通用移动应用程序的领先的跨平台移动 Web 应用程序框架,基于 HTML5 和 JavaScript”。它既有开源许可证版本,也有商业许可证版本。据官方网站声称,《财富》100 强中 60% 使用它...

  • 那些年不容错过的115家硅谷IT公司

    是由 dotCloud 创建的一款开源应用引擎,它相当于是加在 LXC(LinuX Containers,一种轻量、基于容器、操作系统层的虚拟化技术)上的管道,通过高级 API 为进程单独提供了一个轻量级的虚拟环境。Docker 镜像犹如一个...

  • 智能车竞赛介绍(竞赛目标和赛程安排).zip

    全国大学生智能汽车竞赛自2006年起,由教育部高等教育司委托高等学校自动化类教学指导委员会举办,旨在加强学生实践、创新能力和培养团队精神的一项创意性科技竞赛。该竞赛至今已成功举办多届,吸引了众多高校学生的积极参与,此文件为智能车竞赛介绍

  • 集字卡v4.3.4微信公众号原版三种UI+关键字卡控制+支持强制关注.zip

    字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您

  • 出口设备线体程序详解:PLC通讯下的V90控制与开源FB284工艺对象实战指南,出口设备线体程序详解:PLC通讯与V90控制集成,工艺对象与FB284协同工作,开源学习V90控制技能,出口设备1200

    出口设备线体程序详解:PLC通讯下的V90控制与开源FB284工艺对象实战指南,出口设备线体程序详解:PLC通讯与V90控制集成,工艺对象与FB284协同工作,开源学习V90控制技能,出口设备1200线体程序,多个plc走通讯,内部有多个v90,采用工艺对象与fb284 共同控制,功能快全部开源,能快速学会v90的控制 ,出口设备; 1200线体程序; PLC通讯; 多个V90; 工艺对象; FB284; 功能开源; V90控制。,V90工艺控制:开源功能快,快速掌握1200线体程序与PLC通讯

  • 基于Arduino与DAC8031的心电信号模拟器资料:心电信号与正弦波的双重输出应用方案,Arduino与DAC8031心电信号模拟器:生成心电信号与正弦波输出功能详解,基于arduino +DAC

    基于Arduino与DAC8031的心电信号模拟器资料:心电信号与正弦波的双重输出应用方案,Arduino与DAC8031心电信号模拟器:生成心电信号与正弦波输出功能详解,基于arduino +DAC8031的心电信号模拟器资料,可输出心电信号,和正弦波 ,基于Arduino;DAC8031;心电信号模拟器;输出心电信号;正弦波输出;模拟器资料,基于Arduino与DAC8031的心电信号模拟器:输出心电与正弦波

  • (参考项目)MATLAB口罩识别检测.zip

    MATLAB口罩检测的基本流程 图像采集:通过摄像头或其他图像采集设备获取包含面部的图像。 图像预处理:对采集到的图像进行灰度化、去噪、直方图均衡化等预处理操作,以提高图像质量,便于后续的人脸检测和口罩检测。 人脸检测:利用Haar特征、LBP特征等经典方法或深度学习模型(如MTCNN、FaceBoxes等)在预处理后的图像中定位人脸区域。 口罩检测:在检测到的人脸区域内,进一步分析是否佩戴口罩。这可以通过检测口罩的边缘、纹理等特征,或使用已经训练好的口罩检测模型来实现。 结果输出:将检测结果以可视化方式展示,如在图像上标注人脸和口罩区域,或输出文字提示是否佩戴口罩。

  • kernel-debug-devel-3.10.0-1160.119.1.el7.x64-86.rpm.tar.gz

    1、文件内容:kernel-debug-devel-3.10.0-1160.119.1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/kernel-debug-devel-3.10.0-1160.119.1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

  • day02供应链管理系统-补充.zip

    该文档提供了一个关于供应链管理系统开发的详细指南,重点介绍了项目安排、技术实现和框架搭建的相关内容。 文档分为以下几个关键部分: 项目安排:主要步骤包括搭建框架(1天),基础数据模块和权限管理(4天),以及应收应付和销售管理(5天)。 供应链概念:供应链系统的核心流程是通过采购商品放入仓库,并在销售时从仓库提取商品,涉及三个主要订单:采购订单、销售订单和调拨订单。 大数据的应用:介绍了数据挖掘、ETL(数据抽取)和BI(商业智能)在供应链管理中的应用。 技术实现:讲述了DAO(数据访问对象)的重用、服务层的重用、以及前端JS的继承机制、jQuery插件开发等技术细节。 系统框架搭建:包括Maven环境的配置、Web工程的创建、持久化类和映射文件的编写,以及Spring配置文件的实现。 DAO的需求和功能:供应链管理系统的各个模块都涉及分页查询、条件查询、删除、增加、修改操作等需求。 泛型的应用:通过示例说明了在Java语言中如何使用泛型来实现模块化和可扩展性。 文档非常技术导向,适合开发人员参考,用于构建供应链管理系统的架构和功能模块。

  • 基于四旋翼无人机的PD控制研究 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics