如何做到超大规模离线可视化计算离线作业

百度刘超:大数据时代的智能运维
 作者: 佚名 编辑:
&&&&&&&&【IT168&资讯】在第六届中国大会与运维论坛上,百度运维部总监刘超向与会者介绍了百度云计算和大数据迅猛发展的态势,重点分享了百度利用大数据推进云计算运维向智能化演进的创新思路和实践案例。  据刘超介绍,近年来百度在规模、数据规模、单集群规模等方面出现爆发式增长。百度的规模近5年来增长了15倍以上,达到数十万台;数据规模在过去两年已达到EB级别,数据总量接近两个EB,日志更新量每天超过1PB;最大单集群离线计算规模超万台,达到10万核的计算能力。互联网的特征之一就是『快』,快速迭代是常态。百度每天有400多个上线,比5年前增长4倍。而与此同时,云计算平台出现的各类故障和异常与一年前相比增长了200%,给运维带来巨大的挑战。  在云计算和大数据时代,集群规模和数据量爆发式增长,如何管理好云计算平台、如何提供高质量的服务,是云计算的核心问题之一。百度运维为迎接云计算和大数据应用带来的需求和挑战,正在从以解决运维复杂度为目标的自动化向以预测和自动决策为目标的智能化转变。百度已经建立起了六大数据仓库之一的运维数据仓库,囊括了服务器、网络、系统、程序、变更等各个方面的实时及历史状态数据,每天更新数据量接近100TB,基于对这些数据的分析和挖掘,百度开展了多个项目和应用,包括智能流量调度决策、流量分析与趋势预测、故障根源定位系统等,在智能运维方面做了有益探索,取得了良好进展。  刘超指出云计算运维的目标就是用尽可能低的成本、提供足够好的服务质量和用户体验。网络带宽、服务器、维护人力等是云计算平台的主要成本来源,百度通过对运维大数据分析,实现对硬件故障的预测和自动化管理,对机器的管理实现了零投入;通过智能混部技术,动态感知、实时分析、全局调度,合理分配计算、存储、等不同类型的任务,精细化分析、“消峰填谷”的方式来最大化地利用资源,减低预算开销。据刘超介绍,业界大部分公司的服务器在流量高峰时段的利用率使用较好,但全天平均下来日均利用率大约在5%-10%的水平,做到20%-30%已经很少了。而百度大规模集群的日均利用率已经达到50%以上,离线集群的利用率甚至达到了90%以上。仅仅在过去2013年,为公司节省了24万核的计算资源,折合节省数亿元的成本。  在提供高质量的搜索服务方面,百度同样利用大数据技术,把在线服务运维转向智能化管理模式,并走在了行业的前列。基于对运维大数据的挖掘、对历史数据的学习和异常模式识别来实现对流量数据的预测;通过对包括访问速度、系统容量、带宽、成本等在内的10多个因子的实时自动分析,实现了在众多间的流量自动调度,决策时间由人工判断的10几分钟也大幅缩短到1分钟。这个系统的实际效果在最近的一次故障中得到很好的检验,系统在没有人工介入的情况下智能地把流量调度到另外的数据中心,拒绝流量仅有几千个,而几年前发生的类似故障却造成了数千万的流量损失。  刘超介绍百度运维团队是一个研发型的团队,40%以上的工程师从事自动化平台和基础组件的研发工作,他们的一个理念是“进攻是最好的防守”,积极思考、主动出击,率先利用大数据分析的方法来提升预测、发现和自动决策的能力,积极推动云计算运维向智能化演进。
IT168企业级 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
大数据开发平台base-产品白皮书
下载积分:2000
内容提示:大数据开发平台base-产品白皮书
文档格式:PDF|
浏览次数:3|
上传日期: 22:48:31|
文档星级:
全文阅读已结束,如果下载本文需要使用
 2000 积分
下载此文档
该用户还上传了这些文档
大数据开发平台base-产品白皮书
关注微信公众号接近淘宝 80%的大数据实时计算平台,从0搭建的经验和坑 - 简书
接近淘宝 80%的大数据实时计算平台,从0搭建的经验和坑
上周一,来自武汉的直播平台斗鱼TV宣布C轮融资,腾讯领投的 15 亿人民币,距其获得 B 轮1亿美元不到半年,也是大写的牛逼。
但小寻更关心他们的大数据架构,作为一个在 2 年多时间里崛起的公司,其流量经历了从 0 到 PB 级别的飞跃。
刚好今年 3月,斗鱼的大数据团队负责人参加过简寻主办的首届武汉开发者峰会,分享了一些经验和坑,结合一些资料,小寻整理了这个帖子,供有志于大数据的同学参考和借鉴。
244192.jpg
关于吴瑞诚:2014年加入斗鱼,成为斗鱼大数据团队第一人,经历了斗鱼的用户从 十万级别大千万级别的飞跃,并从0 搭建了斗鱼的大数据实时计算平台。入职斗鱼前,我吴瑞诚在淘宝干过三年,主要做HBase。
QQ截图53.png
这是斗鱼非常典型的直播间,55开,游戏打得好,牛吹得好,在斗鱼比较好,大家看到密密麻麻的字,就是弹幕,视频直播最火的场景,弹幕。很火的时候,上面会有礼物,用户给主播赠送火箭,鲨鱼骑着火箭的礼物飘过,这个火箭价值还挺高。
右下角这些图标是礼物,用户赠送给主播的礼物,鱼翅可以充值购买,鱼丸赠送,右边是土豪的贡献排行榜,贡献越多排名越高,右边是弹幕区。内容和形态就是这样,但是现在很火,有时候我们没办法预料现象级现象。
主要分享内容
第一,日志检索,日志全局检索。后面会展开,这个地方主要是以NginxPHP日志做事例。
第二,实时CEP系统,类KV的处理系统。
第三,实时流计算,流计算。 strong text
一、日志检索
QQ截图04.png
这是一个现在的大数据的架构图,这个图最近才整理出来,越整就觉得体会越深,这个图里面看一下红红绿绿有一些方块,看PPT看得多的同学,可能司空见惯了,大数据架构图到最后可能都是这个样子,但是图上的每一个块都是踩过无数个坑,付出了血的教训才成为现在这样。
我加入斗鱼,当时是一个人负责整个这一大块的东西,后来就是因为网站量上来了,个人吞吐量到了上限,招了第一批人。我第一批是组内培养的,会有一些java开发,生拉硬拽凑到大数据团队,从最开始的小系统越做越大,做到现在这个架构。
最下面一层是数据源一层,Nginx、PHP日志,公司技术栈比较多,处理起来会越来越蛋疼,现在统一接入层是是Kafka,现在还没有完全接入。
上面一层就是数据清洗和格式转换包括初步的结算。
再上面一层就包括依赖MySQL实现的归档数据,最大一块是离线计算基于Hadoop,YARN。去年上线Spark,现在应用的范围还比较小,主要还是在风控和个性推荐这一块。
另外实时计算是Hbase,是之前经验比较熟悉,Hbase大家觉得有很多替代的产品,我觉得Hbase在第一层兜住海量热数据,我觉得Hbase的优势还是非常明显的。所以我这一块一直会保持Hbase在这个地方使用,在快速查询,可以相对于自助查询走的presto。
右侧实时计算主要基于Storm,今年大目标把spark作为重点引入。对于新框架的考量,小公司二次的开发能力或者定制能力弱一些,我们现在主要应用短平快的一些方式,比如,主流的有一些大公司BAT、京东、美团把坑踩完了我们再上,这样我们成本会小很多,我们会跟进spark,spark社区活跃得让人没办法忽视它,它现在活跃程度比Hadoop强一个量级。
最右边是Elastic,最开始引入的时候只是做一个搜索引擎,后来越用越觉得爽,真的是一个神器,后面会具体展开。
再就是上面的服务数据层,前端网站和服务层使用,再就是Dashboard,监控、个性推荐、用户行为分析、风控系统、搜索引擎、其它数据应用。
平台监控非常重要。
a2mQZzj_副本.jpg
这是Lambda架构,这三层架构,P处理层,再是上面的加速层到服务层,这三层架构,应该可以覆盖绝大多数的大数据团队架构的场景。
实时日志检索
从前:grep + awk
演进:rsync + Hive UDF
我们最开始,只有几个PHP实例,出了问题,我就上去grep、awk,然后规模上来了,机器和应用实例突增,就用rsync和HiveUDF的方式,把日志收集起来,按照时间粒度切碎了拖过来,然后用Hive进行一些匹配,形成这么一个非常初级的系统。
到了现在,ELK,用的很爽的系统,能支持的量很大,可扩展,全文检索,很多时候包括技术团队定位问题非常方便,有这几个特性能满足基本使用。如果再能够帮他们做一些告警,包括量的告警,文本的告警,有更好,这也是我们现在在做的。
这是实时日志检索的架构图,大家可以看到应用场景,当时flume用得最多,应用场景变得比较快,我们的业务调整也非常迅猛,新场景中发现flume有两个场景没办法满足,一个场景是C++场景,它的量太大,他们的日志按实例文件夹写本地;一个是,Java太耗资源,包括CPU、包括内存,后来我们觉得这一块要做一些改变。
最开始的方案,因为我们有C++的团队做服务化,他们觉得我们可以自己造轮子,这个轮子比较简单,后来我做了一圈对比,发现Logstash新版本中,有一个Beats组件,是golang实现的。
架构图中间以Elastic技术栈为主,包括中间汇聚层在不久将来会被替换掉,但是现有的一些场景,如果一直稳定的话先保持现状。因为我们在这个阶段它比较稳定。
Flume 的Memory channel在量大的时候会OOM,这个时候把溢出的量落地到disk上面,这样可以在保证效率的同时能增大Flume能承受的吞吐量,这样让flume很稳定,一直沿用到现在。
现在还是用Flume做了汇聚层,我们后续会使用Kafka做汇聚层,有很多场景,有些日志可能回头还要再消费或者说要做Pub-sub,现在模式很难实现,必须要用到Kafka。
日志数据在图的下方走了Elastic,用Kibana做的UI,Kibana 2.0以后使用上会有很多不顺畅,我这一块其实建议大家二次开发,二次开发的成本不大,比较容易上手,所有的接口都可以走API,定制起来方便,图上方是走的Hdfs出报表。
Flume 监控
再说一下踩过的一些坑。
首先Flume的选型。我最开始看中还是因为他是Apache的产品,觉得它稳定,在很多公司PPT里面,我稍微估计一下,flume出现的概率比其它产品出现频率高很多,所以做一些压测做了对比,差不太多,就选了flume,现在要新用或者要换型需要更详细的压测。
channel这一块,最开始内存到disk到现在两个方案混搭在一起,但是占资源特别耗资源。
flume的监控,一定要先考虑监控再上新的技术栈。
ES vs Solr
ES 插件:KOPF集群监控:hesd 索引操作;
ES 读写分离
独立小集群解决慢查询;
避免索引过大
最热的查询中避免使用 Range 查询;
JVM heapsize 设置;
在Elastic上,我们跟Solr做对比,大家可以看一下纯开源的组建跟有商业团队支撑的开源产品,社区活跃度和产品迭代不是在一个量级上,Elastic现在已经开始注重使用体验了,这一点是Solr还没有纳入考量的点。
因为Elastic除了我们最开始最传统的搜索引擎、文本搜索,现在更大的一块可以当作我们的多维自助查询,水平扩展能力非常强,因为数据结构的天热优势,就有一些场景,包括多维的及时查询这一块有非常强悍的性能。
ES插件上,我们使用了Kopf做监控,head来操作索引。
ES读写分离。ES集群拓扑越来越大,如果按照默认的拓扑来使用的话,可能量上没法满足很多场景,比如,如果读写不做分离,查询极有可能把线上写的节点直接压垮,这样就建议有一个专门的节点来负责读。
对于资源隔离,我们使用了几个小的Elastic的集群来满足各个功能。因为,Elastic是P2P的,无主。无主有一个问题,有时候没有办法很强的控制某些节点行为,这时候要做一些隔离,最见效的方式就是按照小集群直接做隔离。
避免索引过大。这一点大家如果能注意把不必要的字段建到索引能解决大部分。
最热的查询中避免用range查询。
JVM heapsize设置,我们现在一直使用32G,Hbase集群也是这样,尽管集群配置很高,Hbase的配置还是32G。
GC方面,我们使用的是CMS,在线上使用、压测表现看的话,G1稳定性和用户体验看来都会差一些。
二、实时CEP系统
从前: Redis
演进:HBase
现在:TSDB
最开始我们做一个指标统计,大家把数据推到我们这边来做一些统计,然后借助redis做统计并最后把结果数据保存在Redis,简单的统计场景OK了,后来业务场景复杂了,产品线多了,redis单个实例肯定不够,可扩展性和数据规模是redis暂时无法越过的门槛,所以我们又很自然用到了Hbase。
Hbase使用有两大点需要注意:
第一,rowkey的设计,Hbase中除了rowkey没有索引可供使用。
第二,数据压缩,历史数据的压缩很关键。一个指标两个指标做抽样做一些归档很好做,但是怎么做到统一,而且还很简单,我们能直接拿来用,这个时候碰到open TSDB,一个时间序列存储方案。
最开始也用了InfluxDB,感觉有时候只要压力上来了之后,它可以没有征兆挂机,后来干脆就考虑到open TSDB。数据揣拽产生图形,基于OpenTSDB,能满足很大的量。
这个系统中真正性能考验的其实还是Hbase,Hbase OK,opentTSDB也就没有问题,我们会一直把这个方案做下去,基于open TSDB,我们可以很灵活做定制,它本身就是基于Hbase做了定制的特性,包括我刚刚说到对rowkey的设计。
对数据压缩,每一个指标每一个小时会有一个row,open TSDB帮我们做了。后面有定制需求我们从头开始做,这一块是比较简单的,底层Hbase性能是没有问题,越往后看,Hbase有很多地方它会做得越来越通用。因为它的性能这一块显性能没有问题,后面卡顿的问题会有明显的提升。
回到刚刚上面的图这是CEP系统,这个图上面,大家可以看一下。
从数据收集,第一个parser会走到Kafka,从spark走到Hbase,走到这一步就走到了业务系统,包括我们的监控系统,这是有一个业务流程,现在可以简单理解成某些指标大于阈值就觉得它的是一个嫌疑事件,需要告警的,简单理解就是这样,这一块马上引入规则引擎,这一块业务变化频率太快了,发布速度拖了后腿,在已经测试上了。
到后面有一些结果的存储,再有告警的推送,这个地方也是直接走到Hbase。后面有一些统计好的指标可以拿来用的,这个地方我们走到了open TSDB,这个图就没有重新再画,直接从Cloudera Blog上面借用,这个架构图和我们的系统是一模一样的。
关于 Open TSDB:
周期 IO 波动问题:①禁用 OpenTSDB 的Compation机制;②数据压缩过速度
Open TSDB,业务指标非常灵活,我们现在有一些CPU指标,打出来我们收集起来,各个指标汇集在一起,而且是秒级的力度,这个力度因为指标量大,时间粒度比较细,我们服务机器的服务数越来越大,现在还碰不到瓶颈。
关于HBase:
Rowkey 设计是关键;
不适宜多维度索引、需要事务、稳定性要求极高;
关注写热点;
writebuffer,WAL,Autoflush;
关闭compact/split、手动触发GC
关于Hbase使用。现在用Hbase的公司越来越多,2011年淘宝这一块就已经开始在线上大规模使用,Hbase这一块很稳定,从0.96之后就已经可以说到非常稳定,1.0有一些变化,1.0之后的Hbase是值得大家使用的。
rowkey设计可以写一本书,这里只做简单介绍。Hbase没有索引,所以rowkey非常关键,我们通过rowkey定位到数据,如果通过rowkey能约精确定位到数据,查询效率越高,用这个思路看看业务场景和看看使用,可以做一些相应的优化,做一些提升。
HBase不适宜的场景,包括多维度索引、需要事务、稳定性要求极高。
关注写热点,一般,按照默认的Region Split方案,上线后如果写压力比较大,都会有写热点的问题,这时需要考虑预建region。再就是写压内考虑writebuffer、WAL、autoflush,我写的要求很高,数据一致性要求很高那这事就不好办,只有做权衡,写性能上和数据一致上做权衡,下面三个参数只要你调了或者关了,可用性就会丢,有这个风险择,这是预先告诉大家。
对日志类的表化考虑关闭compact,手动触发GC。
y2i263I_副本.jpg
Open TSDB表设计和原数据和数据表。这是官方图,讲得非常透,大家看一下怎么保证维的很多,数据量很大的时候,能够基于open TSDB把这么一个系统做得高效,就是通过一套rowkey,还有右图按照时间力度做row的压缩,我觉得主要这两个特性保证它的性能。
这是跟open TSDB密切相关的两个点。
三、实时流计算
这一块我们现在斗鱼用得规模比较大,和大公司比可能就有一点小巫见大巫,但是我还是想分享一下,从0到1的过程,包括第三点,从1到1.1的过程。
实时流计算
以前:靠猜
演进:Redis
现在:Storm + Spark Streaming
流计算。比如,我们上了一个专题或者我刚开始提到,英雄联盟有一个决赛,线上有量,量有多大,只能根据卡不卡,只能主观上感觉卡不卡做一个评估。后台服务器的一些数据指标比较延时,刚开始靠猜,靠感觉,感觉要上机器了,要调一些流或者压力到另外一部分机上,靠感觉。
包括有一些上专题,比方说有一些活动,锤子或者魅族、乐视新品发布,他们的量,有时候没有能想象的大,有时候会非常大,但是我们没有办法做一些预案,所以这个时候我们就慢慢有了这个,这是我们最开始的一个迫于压力有了这样一个方案,redis实时统计的量。
用户多了,鸟就多了,各种羊毛党就越多,这一块有了一个风控,再一个个性推荐,用户多了之后,用户群体户越来越多样化,这一块就考虑个性推荐,千人千面,这一块是后来第二阶段的需求。就有了现在storm加spark Streaming的方案在跑。
zE3qUrF_副本.jpg
这是数据流的架构,最开始只有最上面的架构,web、APP,在Nginx Lua,这是锤子2发布会捐赠的一个项目,他把世界上最快的两个系统,一个是Nginx和Lua,加在一起性能非常好强悍。基于Lua和redis,性能好,又好用又稳定,又不吃资源。
到了Kafka这一层,就有了另外的一些数据,比方用户行为数据接入进来,关系表MySQL,我们没有其它的关系存储。到了Kafka出来之后就是storm,是线上规模用得最大,我刚才说的数据产品都是基于storm,后面简单介绍一下storm踩过一些坑。
Spark吞吐量是非常好的,因为两个数据模型就决定了他们两个侧重业务场景是不一样的,后面离线计算,这个中间有一个是数据应用层,我们可以从实时计算到数据应用层,会写到中间离线层,又有另外一批数据到前面的应用层,实时数据监控和其它应用。
关于数据收集
以前:堆PHP
现在:OpenResty
刚刚讲了数据收集这一块,尤其用户行为数据,包括另外有一些服务层的服务,开始堆PHP,太耗资源,我们就发现OpenResty。
再用Storm,我先把这个罗列在这个地方,Storm优化主要就是基于这两个逻辑对象图。
6_副本.png
Storm的新版本中,已经剥离了对ZK的依赖。我们所有的调优调这几个对象的参数,比方提高并行度,我们要提高时间时效,就是基于这个图。
这个图中,数据流怎么从这个流程里面最快的流入,最快流出,这就是实时流计算的初衷或者说包括最终的解决方案,也就是一直在优化。就比方说我们在第一级Kafka或者redis出来之后进到storm,越简单越快把消息弄进来最好。弄进来之后越快把消息处理完统计完把数据推走,越快推走对压力越小,处理时效吞吐量越大。
如果我们做优化,会去分析在第一个bolt1或者bolt2,如果里面有堆积,是在哪一个逻辑里面堆积,会考虑增加并行度或简化它的逻辑,让数据流尽快从第一级到 第二级到第三级,流出数据流程,我们整个优化的思路就是这样。
bolt1、2到bolt3,想跟大家分享,我们很多时候优化Storm忽略一个点,Storm依赖外部资源会成会我们的瓶颈,我们的数据没办法往外面推,没办法落地,后面一层堆积也会直接制约我们优化的一个瓶颈。
我们最后往redis写,性能强悍,你一个storm没问题,当时用一个redis做一些hush,做分散,还是解决不了,后来把redis替换掉。
关于 Storm 优化
Spout数和Kafka中Topic 的 Partition 数相匹配
根据excute latency,找出各个 componet 的 process cost
让 spout nextTuple 尽量简单
提升 Storm Topology的性能要注意外部资源
这是我们在storm优化整体的思路,比较简单,主要几大块。 spout数和Kafka中的话题的partition数相匹配。 监控每一个执行的时效,去做监控,及时发现某一些componet要不要做优化。
我们最开始上storm就有了spark流,流利用在时空监控的场景,这是今年2016年的大方向。
关于 Spark Streaming
设置合理的批处理时间(batchDuration)
缓存需要经常使用的数据
集群task并行度
使用Kryo序列化
这是流的简单使用有一些心得,踩过一些坑。批处理时间。换粗需要经常的使用的数据。集群task并行度,使用Kryo序列化。
这是我们踩过的巨坑,最后和大家强调一下。
踩过的巨坑
第一个踩过的巨坑就是监控。
我们有很多量,现象级的,百万级的用户立马在一秒到十秒用涌入一个直播间,这个直播间放在和其它直播间放在一个server上面,立马卡顿不卡用,如果在监控这一块,可以解决很多的一些告警和预警。包括有一些业务的指标监控,监控这一块非常重要。
今年做了比较大的一块,就是在做统一监控平台,现在我们也是在花主要的开发资源做这一块,因为我们前端有网站端后端有C++服务端,语言异构排查起来就存在,没法定位,第一反应大家很本能甩锅,就需要统一监控平台。
第二,安全。
最开始太粗放,我们最开始做网络隔离,我们的集群是第一次做了网络上的隔离,然后后来就包括人员越来越大,因为不可能是我一个人干,也不可能做这么多业务场景,用的人越来越多,包括其它团队,业务分析师做数据分析用到线上环境,这个地方安全非常重要。
第三,一定的余量。
预估业务、提需求,上机器这么一套下来,就一两个月,小公司不要扣这部分的成本,起码预留20%的量。
探索式数据集市、推荐系统、风控系统,这是我们今年最大的三块目标。
ps:作为优秀又土豪的公司,斗鱼现在非常缺人,非常非常缺,总之钱多速来有挑战!对斗鱼感兴趣的同学可以联系私信小寻哦~
智能的程序员招聘平台
详情请戳:www.jianxun.io
斗鱼实时计算平台的演进 我是吴瑞诚,来自斗鱼,很高兴能有机会和大家分享斗鱼TV实时计算平台的演进。 做一个简单的自我介绍。我之前在淘宝干过三年,主要做HBase,目前在斗鱼TV做大数据开发。 斗鱼典型直播间介绍 这是斗鱼非常典型的直播间,55开,游戏打得好,牛吹得好,在斗鱼...
http://geek.csdn.net/news/detail/210469/archives/87945 本文除了一些常用的大数据工具,还总结汇总了其他大数据工具,几乎是最全的大数据工具的总结。 如果你想入门大数据,可以对他们进行...
问题导读: 1.如何构建高并发电商平台架构 2.哈希、B树、倒排、bitmap的作用是什么? 3.作为软件工程师,该如何实现读写? 4.如何实现负载均衡、反向代理? 5.电商业务是什么? 6.基础中间件该如何设计? 7.对于平台各个系统之间的异步交互,可以通过什么实现? 8...
从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。 转载请声明出处:http://blog.csdn.net/yangbutao/article/details/ 作者:杨步涛 关注分布式架构、大数据、搜索、开源技...
一、 设计理念 1.空间换时间 1)多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓...
昨天朋友看到深圳养老保险有断交的需要在9月30号前补交,她刚好有几个月的断交,就叫我陪她去社保局,于是下午2:00准时去,结果已经没号了。
今天起个大早,7:20到社保局,那里长龙已从2楼绕楼梯排到了5楼。8:30开始取号,门口有工作人员把关,一批一批的放人进去。整个...
我能怎么办,我也很绝望啊! 春花秋月,阳春白雪。避免感叹时光荏苒,回避再回避,终究抵挡不过岁月的摧残。华发早生,青丝不再。 是不是每个出身清贫的孩子都曾抱怨过命运的不公?我想是有的吧!比如像我。 一年前我选择了这种寄人篱下的生活,身边没有一个人不羡慕我,她们都说我命好。怎么...
他回家乡当伴郎去了。 昨晚出发,今晨到达,他发小开车去接站,顺道还帮了另一个发小的忙——送一车妹子到别处。弄得原本就疲惫的他一上午没吃到热早餐。 真正回到家里已经10点过,看着又在施工的家里,他说“我已经有点不认识这个家了”。在他的形容中,我一直很期待见到院子,为了方便运送...
作为斗鱼平台品牌代言形象的鲨鱼娘,可以参考动漫角色的塑造,进行角色设定,如年龄、身高、星座、性格、爱好、口头禅等,可以找声优配音进行动画化,让其活跃于平台的各项宣传活动。后续还可以让鲨鱼娘演唱平台主题歌曲,或者推出鲨鱼娘和动漫化后的主播进行互动的系列漫画。由动漫角色推广平台...
阳光晴好的饷午,天空一抹玫瑰色的彤云。当我下班回到家,准备躺在我那张熊猫床上的时候,手机亮起了光,一个多年未联系的老友发来的。 我看着看着就哭了,没错,这是陆澈写的一篇日记:我不知道你为啥把我的相机零件给旋松,你生病的时候哦我听到你说梦话,呢喃着想去看日本的樱花。从那时候开...阿里大规模计算平台的自动化、精细化运维之路
我的图书馆
阿里大规模计算平台的自动化、精细化运维之路
作者简介:范伦挺阿里巴巴 基础架构事业群-技术专家花名萧一,2010年加入阿里巴巴,现任阿里巴巴集团大数据计算平台运维负责人。团队主要负责阿里巴巴各类离在线大数据计算平台(如MaxCompute、AnalyticDB、StreamCompute等)的运维、架构优化及容量管理等1、前言本文主要会从以下四个方面来写,分别是:阿里大规模计算平台运维面临的一些挑战;阿里自动化平台建设;数据精细化运维;我对运维转型的思考和理解;2、在阿里我们面对的挑战在讲挑战之前,我们可以简单看一下阿里大数据平台演进历史,我们的 MaxCompute(原ODPS)平台是2011年4月上线的,2013年8月份单集群超过5K,2015年6月单集群超10K,目前在进行异地多活和离在线混布方面的事情。首先是规模大、小概率事件常态化对于小概率事件大家不能赌运气,基本每次都会踩中狗屎的。譬如各类硬件故障,规模小的时候觉得硬件故障概率比较低,即使坏了也比较彻底,但是规模大了后会有很多情况是将坏不坏,类似这种奇葩事件会越来越多。 &还有网络链路不稳定,网络链路会有很多原因导致它不稳定。一方面是网络设备多了,网络设备出现故障的概率也大了,另一方面运营商日常割接、挖掘机施工等都会对我们带来挑战。 &还有一部分是工具,机器的环境变得复杂以后,我们对工具稳定性就有更高要求,比如你要考虑到有些机器的 SSH 会 hang 住,还有某些机器 yumdb 是坏的,不能想当然的以为一条命令下去一定会执行成功。其次是多机房多地域 &几千公里距离会有几十毫秒的延时增加,大家在布置异地多机房应用的时候,要考虑到应用之间的超时设置是不是合理,需要重新 review 尤其针对多次往返的请求,累加效应是非常明显的。 &还有一块是资源不均衡,可能那个集群早上忙一点,那边是下午忙一点,但是因为计算任务依赖下面大规模底层数据,所以你不可能利用长传带宽直接来进行直读直写的计算,因此要考虑应用的合理布局。关于自动化平台建设,自动化的意义我想读者们应该是有共识的。第一自动化能够提升稳定性,机器的操作比人要靠谱,固化的操作交给机器去做,可以减少人犯错机会,提高线上稳定性。第二自动化能够提高效率,机器代替人做很多事情之后,把我们从日常繁琐运维操作中解放出来,解放出来以后我们可以做更有价值和意义的事情。今天因为时间关系,我会从以下四个最常见自动化方向做简单举例介绍,变更、问题排查、硬件维修,交付检查。右边是我们内部用的运维平台架构简图,下面介绍的东西都是基于这个平台的功能模块。3、 四步走让平台自动跑起来3.1 第一步:实现自动变更说到变更,做运维的总是有很多共同语言要聊。变更在我们日常工作中占的时间还是比较多的,包括变更方案整理,变更跟进执行,都是比较耗时的,另外变更也是非常危险的。原来有过统计,号称70%稳定性事件是跟变更相关的,有可能是运维工程师直接变更操作引起的,也有可能是上线代码有 bug 引入的,这两类都归结在一起,反正是“线上不作不死,一作就死”。但是不能因为这个不发布,还有很多功能开发也是跟我们一样,天天加班熬夜,搞出来的代码不给他推上去也说不过去,还要满足业务需求,那这个问题得解。怎么解呢?我们内部思路是首先会把最底层的一些操作进行原子抽象,比如像把一台机器从 VIP 里摘取出来,装一些包进行固化,固化之后抽象出来,称为工作流,然后把工作流进行组装把它称之为组合工作流。一个组合工作流对应一种日常的固化变更类型,比如控制集群服务升级等等,这样固化的变更就可以由对应的组合工作流去做。在组合工作流之上,还会有一层封装需求单。主要解决开发的自助申请,审批等环节。在工作流执行页面可以查看详情,包括对应的每个步骤具体命令,返回信息,执行超时时间,超时或者失败的通知方式和人等等。通过这样一套平台,基本上能够解决日常固化的那一类变更请求,能够做到变更由开发自己申请发起,运维只需审核一些参数、测试报告等等。3.2 第二步:高效稳定的解决问题第二个例子是关于问题排查的,上图画的是我们当前用的实时日志分析系统的架构,阿里因为这块的产品自研的都有,所以用的都是自研的产品。为了便于理解,我在边上备注了对应的开源产品,基本上的流程或者逻辑也是比较好理解的,首先在服务器上部署 Agent,Agent 会依据日志服务里配置的规则进行过滤以后,将对应的信息推送到日志服务。日志服务里数据可以实时进入到流计算平台进行实时分析计算,并且把结果存到 RDS 里面,然后 tesla 通过 RDS 进行调取和展现。另外日志服务存的数据,也会通过实时建立索引,提供 WEB 级别日志查询,帮助用户做日志查询。同时也会导入 max compute 做永久存储和进一步分析。基于这套系统,我们举一个例子:异常流量排查。流量打满是很常见的问题,通过这样的机制怎么帮忙我们排查和定位这些问题呢?比如有N个机房,机房与机房之间有很多链路,每一条链路带宽都是有限的,有时一个突发流量尖峰过来会导致流量拥塞,假设平台上有一条链路,流量打满以后,呈现黄色预警状态,通过点击这条链路,就会进入流量分析实时界面。这里可以看到从某个时间段到某个时间段,从某个机房到另外一个机房最近十分钟的情况,这里显示的是最近十分钟对应作业流量总的情况,点击流量最高的点可以在右侧看到每个作业对于流量贡献情况及其最近10分钟的变化趋势。下面还可以列出来这些作业具体的项目归属,作业名称等等。通过这个机制就可以很快定位到问题的原因。这里收集的日志是阿里云飞天盘古 master audit log,盘古 master 有点类似 Hadoop 里的 name node 节点,它会记录所有集群发起的数据访问请求,包括来源 IP 是什么,获取数据大小是多少,发起的作业名称等。把这些信息通过前面介绍的实时架构收集完之后,放到流计算平台算,然后再结合网络地域和 IP 归属,就可以画出整个网络拓扑和实时流量图。基于这套平台还可以做很多其他的事情,比如说网络静默丢包,这个理论上来讲在网络层很难做到监控。但可以通过收集作业执行日志,分析长尾和失败的作业相应的源IP及目的IP分布情况,可以发现某些交换机的异常情况。做到先进行隔离,再让网工去排查解决。3.3 第三步:更高效的硬件维护第三步是硬件维修,我们内部有个硬件全生命周期管理工具称之为是 DAM,在日常工作中它能够涵盖整个硬件循环的生命周期,上线以后如果发现线上有硬件问题,它会调应用自定义的下线接口,把这台机器从具体应用里摘出来,从应用层面隔离完之后,再去调机房维修自动接口进行报修。报修以后会监测这个维修单子状态,等维修结单后,自动做上线前硬件检查,检查通过以后会把这个工单关闭,同时调用应用自定义的上线接口,完成服务器上线。所以这套东西基本上跟应用是属于松耦合的,只要应用提供满足条件的上下线 API 接口,基本上都可以转起来。这是它的一个架构简图,主要有三大模块:Dam &Worker 、Dam &Client、Dam &Center.这里面主要难点还是在于硬件信息收集和分析,怎么判断这块磁盘坏了,怎么判断 CPU 是有问题的。这其中需要长期的数据和经验积累。这里我可以简单介绍一下我们现在采集的信息源:硬盘主要依赖于 kernel log/smartctl/tsar内存是 ipmitool/mcelog/stream,CPU/风扇是 mcelog/cpu 频率/ipmitool,网络/网卡/交换机端口是tsar/kernel log。主板方面如果我们分析以后都不是以上信息,那可能就是主板的原因。上面这个图是一个最终的效果,这个系统在规模化场景下还是非常有用的,以前没有这个的时候,值班人员是比较痛苦的,因为我们知道现在互联网用的机器都不是高可靠的,去 IOE 都差不多了,都是廉价的服务器,所以出现一些硬件问题还是比较常见的。很可能一个电话过来,客户就开始抱怨作业又长尾了,你上去一看,这个机器硬盘有问题,加入黑名单,重跑一下,用户和我们自己都搞得很痛苦。现在我们就不会因为单台机器的硬件问题而受到骚扰了。主要白天看看那些异常工单原因,不断优化逻辑即可。对于这类自动处理我们肯定采取比较保守的策略,任何系统拿不准的或者不是完全精准匹配的就不动,先做隔离而不做进一步自动处理,放到异常工单池子里,由人工介入分析异常 case 什么原因,不断完善我们硬件检测判断的模型。3.4 第四步:完善的交付检查交付检查分为软件交付检查和硬件交付检查,软件交付检查就是用前面介绍过的工作流,硬件交付检查主要针对 CPU、内存和磁盘,对于 CPU 做法是绑定每个 CPU 算 π,算算它的消耗时间分布,最终把曲线画出来,标准就是看曲线的偏离程度。其实大家可以看出,大部分还是很规矩的,会集中在一起,类似上面有几条偏离曲线的就是我们认为有问题的。那么这里大家可能会问,为什么你这里集中在两个区段,是不是有一半的机器都是有问题的,其实是因为这个集群机器是异构的,本来就有两种类型的 cpu。内存压测采用通用的 stream 方法,就是对内存做拷贝、读取相加,读取做乘法诸如此类的,对于性能指标明显偏离的机器也是有问题的。磁盘主要用 Linux FIO &命令按照不同的读写比例和块大小,来看它的表现。其实这里并没有用到什么高深的技术,我之所以拿来说是告诉大家这个极其重要,尤其是对于离线场景。离线计算在公司里一般给的是都是更廉价,更低成本的硬件设备,甚至很多时候在线应用退役的机器也会拿来用,即所谓的利旧。这种时候再加上机器是经过搬迁的话,那硬件的压测就必须做,否则线上会很长时间不得消停。4、数据驱动精细化运维下面我们讲讲数据驱动精细化运维,今天主要是讲一些点,举一些例子,以此来表达我的一些想法。大家都知道数据是有很大价值的,我们通过历史数据分析,能够知道平台过去是发生过的事情,对于现在的数据分析,可以知道平台现在正在发生的事情,还可以通过建模预测未来可能会发生的事情,所以数据可以说是能够通晓过去未来之事。我们运维的大数据平台上每天都在产生海量的各种运维日志、信息,我们手里拥有在线、离线,各种大数据平台,我们也想把运维做得更精细化一些,可以说是有数据,有需求,有平台,正可谓天时、地利、人和,所以一直在这方面做些尝试。4.1 实时大屏背后的精细化运维实践第一个例子是关于双十一大促的,这个屏相信大家不会太陌生,这是双十一大促在深圳晚会现场直播的一个媒体屏,上面有双十一大促最终定格的成交额 1207亿。这是一个 GMV 翻牌器,它的作用就是实时汇总当前每一笔成交,并且把成交额显示在上面,在光鲜亮丽的媒体屏背后,其实我们还有很多保障用的技术屏,今天就带大家一起来看看其中的一块技术屏。这上面的数字都抹掉了,简单介绍一下我想说的事情,左边部分是用于承载翻牌器成交额实时计算作业主备集群负载情况,在它的右边显示的就是几个关键的核心作业当前实时的延时情况,单位是毫秒。这里最右边的这几个白色的数字,代表了每个作业对应的延时,有了这个之后我们才能知道当前算的成交额比真实的用户下单时间,它的延时有多大,超过一定的量,我们就要进行链路切换。所以有了这个数字以后,可以更好地帮助我们判断现在哪条链路是好的,哪条链路不好的,不好到什么程度,好的话什么程度,不能盲目的去拍脑袋判断,需要有实时化的量化指标做评判。这里还要强调说明一点,这里用不同的颜色深浅分成三段,这三段分别代表这个作业它的日志采集延时、消息队列读取延时和读到之后计算的延时,把三段延时进行了分开展现,这个有什么用呢?当链路有问题之后,我们可以知道哪段出的问题,因为实时计算整个链路是非常长的,对于秒级应用来讲,每个环节消耗的时间都是需要被清晰度量的,也就是说,有了这个时间你才能准确判断现在是因为哪里出现的瓶颈导致整体延时不达标。也就是说,不但能够知道哪条链路有问题,还可以知道链路具体问题点在哪,加快问题定位。所以对于这个核心指标我建议大家做到三化量化,这些压力值都可以清晰看到。细化,每个指标再分细一点,可以更精准判断和定位问题。持久化,这些实时屏不能看完就算了,还要把数据存起来,非常有用。所以做到三化,量化、细化、持久化,在核心指标量化分析里是很重要的。4.2 存储分析在精细化运维中的实践下面讲一个存储分析的例子,这个例子起源是因为集群规模太大了,每年都被老板盯着能不能省出一点钱来,我们分析了下存储的数据,看看每个 byte 是被什么占用了,这是可以分析的。我们通过分析之后得到右边的图,这个是真实的图。看了这个图之后,你会注意到,原来存储是这么被消耗的。其中我们可以找到一些应用层的优化。譬如平台是分层的,每一层为了数据安全都会做自己的回收站(延迟删除)功能,站在每一层独立去看都是合理的,但各种回收站累加在一起就会发现回收站占用比例有些高(尤其是对于频繁删除类型应用)。可以从整体运维的角度去看,对于各层回收站策略做评估。另外我们还发现一个优化点,就是 &inode。我们可以计算下看看我们要不要用到这么多 &inode,按照PPT公式计算可能只需要原来的1.75%就够了,万台集群可以因此省下6PB的存储。当然这里面实际适用 inode 大小还是要根据自己应用场景去评估。大家经常做数据运营,数据分析,其实它在很多地方都在那儿等着大家,有很多点可以去做,包括我们日常忽略的,司空见惯的,觉得不值一提的地方,大家可以细究一下,会发现那里有另外一番天地。4.3 精细化运维在资源优化上的成果还有一个是资源优化例子,大家知道资源调度器里有一个用户资源申请的值,和申请之后真正跑起来的实际消耗值,我们建立了一个用户实际消耗和用户资源申请的比例,理想值我们希望接近100%,这个指标能够说明调度模型的资源使用状态,有了这样的衡量指标之后,我们做进一步细化分解,看看怎么优化这个指标。这个是实时计算里面作业的情况,每个作业我们会去看它的资源使用趋势,这上面红色的两条直线是作业里设的申请值,下面蓝色波动比较大的是这一周来资源使用的尖峰值,大家可以看到即使按照这一周作业使用物理资源峰值来看,离申请值也是很远的。所以这里面还是有不少优化的事情可以做,包括提醒用户自己做优化,也可以在平台层面自动做优化,来达到节省成本的目的。因为一旦调度器认为可以申请的资源都分配出去了,哪怕这时平台物理水位非常低,它也不会调度更多的作业了,所以这件事情也是我们可以深度去做的。5、如何摆脱苦逼运维的魔咒5.1 转向运营或许是破解之道我个人对于运维转型的一些理解和思考。运维转型最近被谈的比较多,有一个论调就是运维向运营转。这个问题我是这么看的,传统运维更多关注的是平台稳定、安全,也就是非常传统的两个领域,更多关心的是平台是不是活着,这个平台没有出问题,没有挂掉,这是传统运维关心的事情,重点关键词活着。对于运营来说,除了活着,还要看平台质量怎么样,用户用得好不好,这个平台本身它的效益怎么样,它的成本是不是还能进一步优化,用户感受怎么样,用户满意度怎么样。而对运维来讲,包括运营,我们大部分都是跟垂直的具体产品或者平台绑定的。不可能完全脱离他们,去谈运维的价值。所以运营是以一种更积极开放的态度,去看待我们所运维的对象,多看一点,不光看它的活着,还想想怎么能够帮助它和自己一起去成长和发展。5.2 自动化在转型过程中的四个阶段然后讲到转型逃不开自动化,我个人认为自动化可以分为四个阶段:第一个阶段人肉时代 &这时候人就是一切,你说了算,你说什么命令就是什么命令,这时候没有任何校验标准机制,就像交警纯人肉指挥交通一样,什么时候让你走就走,什么时候让你停你就停。第二阶段工具时代 &好比交警手里的指挥棒和哨子,这些工具提升了他的个人能力,比如哨子可以让更远的车辆听到他的指令,棒子可以在天气不好的时候让汽车看到他的指令。 &这个阶段还是以我们人为主体,工具在能力上做了一定延伸和拓展,但是始终还是人为主,器为辅。还是人在决定这个操作要不要做,什么时候做,参数应该是什么。只是人做完决定后,可以由工具搞定具体落地执行,提升了执行效率,节约下来了时间。但是离开了人还是什么也不是。所以这个时代,单兵作战能力增强了,但是人逐渐成为整个运维的瓶颈点,因为工具的能力是远远大于人的能力的,更多需求就堆在你手里的,你怎么编排和控制。你成为瓶颈点了,工具越多,人的瓶颈点就会凸显。第三个阶段平台时代 &这个阶段过渡到器为主,人为辅的阶段,还是以交通举例,这里面大家可以看到由很多工具沉淀变成了完整的交通疏导指挥平台,包括红绿灯,包括限速和车道划分等等,这一系列规则和工具,最终不是零散的在那里放着,而是通过一个有序组织变成一个固化的平台,通过这个平台,能够完成交警日常工作中交通疏导的事情。 &对于我们运维也一样,我们怎么把我们的经验、想法和技能放到平台里,最终变化自助或者自动化运维平台,这样的时代才能称之为平台时代,就像我刚才前面说的变更平台一样。 &我不知道大家有没有经历过,其实很多公司经历过,变更平台可能有很多不同的人开发过很多拨,第一拨可能是开发写的,第二拨可能是工具团队写的,第三拨可能是运维团队自己写的。 &这里做一个变更平台并不难,难的是怎么把运维的想法和思考沉淀到平台里面去,怎么让平台有和你相当的能力,这时候它才能代替你日常的职责,所以它这里面的灵魂和思想很重要。 &同样是做开发变更平台,开发考虑的是怎么快速高效的执行变更,那运维做的时候会有些什么更多的思考呢? &你会考虑是否有灰度功能,是不是应该先灰度发布一部分,然后有自动冒烟机制,冒烟过了我再引流,然后有没有快速回滚机制,这就是区别,为什么我们要自己去做,自己转型,我觉得别人很难理解我们,也很难救我们,所以要自己转型做自己想要的运维平台。 &这里面大家多想想你平常怎么工作的,重要的是把你的能力进行平台化,而不仅仅是简单开发一个系统。第四个阶段智慧时代 &第一个时代是人解决问题,第二个时代是人借助工具更好的解决问题,第三个时代是让平台能像人一样解决问题,第四个时代是让平台超越人类能力去解决问题。这张图是阿里云栖大会上王博士发布城市大脑的照片。城市大脑是解决城市交通拥堵问题,这个问题已经突破人的能力极限,安排再多的交警到各路口执勤也搞不定这件事。但城市大脑可以,它通过对每天的车流量预测数据,再加上其他的一些补充数据,包括实时红绿灯,每个探头采集到的实时流量等等,把这些数据进行综合判断,它就能够智慧的实时控制所有的交通信号灯,从而达到缓解城市拥堵的目标。在这里其实一样的,当上升到一个智慧时代以后,平台能力就能够突破人的极限,做到一些人的能力以外的事情,譬如故障的预测、快速自恢复等等。这也是未来的方向——智能运维时代。5.3 运维效率向运维价值转型假如我们前面的自动化事情做得不错了,有时间了,该干点什么,原来有一句老话叫做“喝着咖啡干运维”,我个人认为这个观点从生活的角度来讲是不错的,但从工作和个人发展的角度来看还是太过于消极了。当你达到这个阶段,如果你真这么去做的话,慢慢你可能有时间喝咖啡,但却没钱喝了,很有可能会被淘汰掉。我们应该转变思路,更多的去关注数据分析,可视化及运维平台的产品化。当我们建立了前面说的自动化运维平台以后,可以更多去想一想如何通过数据分析,让我们运维平台更加智能,达到一个智慧运维的时代。利用计算机强大的计算能力,最终实现机器管理机器的目标。另一方面也可以借助数据分析和运营,帮助我们所运维的产品做改善,如性能、易用性、成本等等。另外我们也要更多的去思考怎么把运维平台进一步产品化,使我们的运维能力可以输出,产生更大的价值。这些目标都是可以实现的,当然有很多的事情需要去做,我们可以分阶段的,先从一些简单的事情做起,逐步深入。6、最后的思考最后用一张图来总结我对于运维转型的思考。运维应该始终以稳定性为基石,一旦脱离稳定性,其他一切都是扯淡,都是浮云。在稳定性基础之上,我们应该以更积极的运营思路来思考我们自身的发展和平台的发展,借助于数据分析和运维能力产品化这样两个翅膀,实现华丽的转型。运维的人生不止苟且,还有诗和远方!近日好文:来GOPS 阿里的大咖带你运维转型就在4月21日-22日的GOPS2017深圳站哟。GOPS2017·深圳站今年大促不再通宵?秘诀就在GOPS会议地点:南山区圣淘沙酒店(翡翠店)会议时间:日-22日
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 可视化计算离线作业 的文章

 

随机推荐