@gaoxiaoyunwei2017
2018-05-29T17:57:30.000000Z
字数 5429
阅读 693
黄晓轩
讲师 | 杨乾坤
编辑 | 黄晓轩
杨乾坤
2012年加入阿里,先后在阿里巴巴技术保障部、技术架构、搜索事业部任职,现任职于阿里巴巴计算平台事业部,主要负责大数据相关的运维和运维平台的开发。
我今天分享的主题是《阿里巴巴实时计算平台运维架构演进》。一共分四个部分:
大家知道最近两年随着AlphaGo的兴起,算法成为各个公司,如阿里巴巴、腾讯重金投入的场景。实时计算平台包括实时计算、流计算,它在搜索、推荐、广告、监控方面,对于实时的反馈效果的提升有非常大的帮助。实时计算最近两年火起来,其面临着与在线服务和离线计算不一样的一些挑战。
在去年双十一时,阿里的实时计算平台服务了20多个BU、有1K多的 Job、近万台机器,其计算峰值达到了4.72亿QPS,大家在双十一当天看到的阿里巴巴对外提供不断滚动的大屏,其计算峰值达到1.8亿QPS。
关于实时计算、离线计算和在线服务的差异。离线计算对SLA的要求不高,分钟甚至小时的延时都是可以接受的。实时计算就要求必须达到秒级,不得出现一分钟卡顿的情况。大家比较熟悉的在线服务必须是毫秒级或者微秒级的要求。
针对不同的情况,容灾方式也不一样。在线服务需要有异地双备或者多地单元化部署,保证能随时互切。对于实时计算,它只会针对个别核心业务做双备,大部分业务只有一个运行实例。
离线计算几乎没有双备。针对这种容灾方式造成资源利用率的不不同。在线服务要保障随时互切,资源利用率比如CPU不能超过40%。实时计算和离线计算对资源利用率有更高的要求,必须达到70-80%以上,甚至达到90%以上。
现在实时计算面临几个挑战:
这是阿里巴巴实时计算的平台和运维架构的情况。
最下层是运行环境的管理,我们主要通过阿里自研的IDC系统以及大数据平台自己做的代码系统,做物理机和Docker的硬件管理,包括硬件的运行。
往上一层对应存储层、调度层、引擎。我们的存储主要有HDFS、HBase、Pangu。在调度层主要是Yarn和我们自研的Fuxi。在引擎层是阿里巴巴基于开源的Blink打造的引擎。
在运行层的管理,我们通过Aquila做了管理。Aquila是我们基于社区开源【英文没听清】做的企业版服务。之所以叫Aquila,因为类似像Hadoop、HBase等,是以动物的形象展现给大家。Aquila是我们在网上搜索到的非洲野生动物园,我们想通过Aquila把类似Hadoop、Blink的生态系统,将其全部管理起来。
阿里巴巴的开发平台目前主要是StreamCompute和Porsche。StreamCompute已经在阿里云公开对外输出,如果大家对实时计算感兴趣,可以到阿里云的官网做试用或者采购。
最上面一层实时计算支撑整个阿里的业务,包括搜索、推荐、广告、大屏。整个的开发和应用层是通过阿里计算平台事业部开发的Tesla系统做业务的管理和运营。以上是目前阿里实时计算的平台架构和运维体系。
DAM主要做的包括四部分:
Aquila,目标是把Aquila从工具到产品的升级。我们需要提供对运维自动化有帮助的能力,包括以下几点:
Aquila:概念和功能需求的划分分为以下几点:
Aquila设计和实现。其底层依赖DB,Server层包括几部分,一是Heartbeat Handler,它负责和Agent通信;FSM是状态机的管理。在Aquila里,各种服务的管理是通过状态机进行的。Action Manager、Coordinator、Stage Pianner负责从请求到生成对应的操作流程。 Agent和Server通信方式是由Agent主动发起,Server端的命令下发、监控是通过Heartbeat respond方式完成,包括Agent监控的信息、动作执行情况,全部以主动向Server汇报的方式进行。
相比于开源社区,Aquila提供以下优势:
这是我们改造后HA的情况。我们的后台是RDS,RDS可以在出现故障的情况下做无缝迁移。在Server端,我们支持两个Server,这两个Server通过Zookeeper保证一致性,保证只有一台Server在运行状态,另一台准备状态。Agent的通信类似Hadoop的工作方式,当它向其中一台Server发起通信受阻情况下,它会主动去另一台做重试。通过这样的方式来保障Aquila的高可用。
这是改造后的配置管理情况。我们通过Aquila WebUI或Json IDE发起配置变更,我们的配置保存在Git上。不管你是通过Aquila WebUI还是Json IDE,都会生成Review Borad。这个Review是通过Facebook提供的开源工具来做,它已经集成到阿里的系统上。生成Review后,我们可以通过对应的开发和QA Review后,才可能进到Git。只有进入Git才有可能被Aquila Server接受,下发到计算平台的集群里。大家看到的不是特别大或者特别复杂的改造,这对于生产环境来说,是一个非常重要,而且是必须要做的事情。
【图:Aquila优势:管理更高效--文字部分】
这是服务自动注册和拉起的情况。Tesla是我们的大数据业务运营管理平台,它可以探测我们集群的水位情况,水位是否超过我们预定的80%,如果超过,我们可以主动向阿里资源管理一层调度平台Sigma做资源申请。申请下发后,如果Sigma可以满足我们的资源申请,它会主动把容器拉起来交给我们。我们拉起时做了一个动作,把对应的Aquila Agent拉起来。拉起来后,Aquila agent会自动向Server做汇报,完成汇报后,Aquila Server可以根据自己在服务端的配置,比如针对Docker需要部署的服务有哪些,它属于哪些配置分组。在这种情况下,Aquila Server会下发部署和配置更新的命令,把Agent和容器内的服务部署好后,向Sigma返回,Sigma知晓情况后,会向运营管理平台做最后的确认。完成从水位检测到资源扩容的整个自动化流程。
这是Tesla在业务运营层面的,统一的大数据运营平台,包括业务中心、平台运营和工具服务。
运维运营平台提供分站开发框架、资源整合相关管理、运维数据化的支撑、智能分析工具,它的功能涵盖业务中心、服务管控、平台运营、工具服务、运营中心和运筹优化。
从运维/运营业务场景来看,它提供故障处理场景、监控分析场景、变更保障场景和值班、大促的场景。Tesla面向的客户包括业务开发、一线运维、IDC、财务,它涵盖资源账单情况。
这是我们在此平台上做的自动化保障。对于实时计算平台来说,机器出现故障,影响业务后再进行处理有比较大的风险。我们通过引入DAM做硬件预测,在预测到故障时,主动通过Aquila完成服务的下线,把机器交还给DAM,做硬件自愈,自愈完成后重新加入到集群中,形成一个完整的闭环。现在在运营工作中,我们不再需要主动做硬件故障管理的工作。
资源自动化扩容,Tesla探测资源水位,在水位紧张的情况下启动向Sigma的资源申请。通过容器做自动注册,完成服务部署,最后加入集群,进行调度作业。
我们现在在做智能化的探索,实时计算对故障的要求比较敏感,我们在做异常分析。可以看到Metrics是时间序列的数据,像ETS、EWMA做预测,通过Sigma做模型的生成。在模型生成中有参数是通过深度学习的方法,不停的做校验。
下面是无监督机器学习的过程,包括特征工程、基于密度和树做LOF、DBSCAN,通过异常报警和人工反馈情况调整参数。
【图:热点机器分析】
具体场景是机器热点分析,我们通过Metrics的采集,做密度聚类,最后生成三个结果,一是PCA降维后的分组图,它会归类哪些机器可以归到一个分组,另外的是不太正常的状态;二是数据化的归一,哪些分组的指标不一样;三是指标明细,哪些分组发生哪些数据。
这种情况对我们的应用场景,在集群异构的情况下,由于配置的原因,我们难以发现机器积累的问题。比如一台64核256G的机器,我在配置资源时出现配置错误,如配了10核128G。我们通过传统的监控不太容易发现其问题。传统监控,我们会配置这台机器的CPU超过多少,再做报警。这不太适用我刚才所说的,我们可以通过聚类的分析,发现离群组的情况,它是因为CPU使用过低而被分在不太正常的组里,我们可以根据分析发现问题。以上是我的分享,谢谢大家!