大半年来做的计算这点事

写一篇随笔,谈谈大半年来做的一些事情。

简单地说,从去年三月份到现在,一直在做一个计算框架:BH,一个core。我对自己的要求是,掌握Spark(和Flink),然后忘了它。所以层面core基本和spark core的层次是一致的,核心是pipeline和DAG。开始做这件事的时候,Flink当时的两层runtime还没统一成pipeline,所以当时与spark core实现思想的主要区分之一就在于pipeline执行。第二个主要区分在于BH的架构更偏向在线。所以我定位BH的核心竞争力是以下几个关键字:数据复用、pipeline执行、混合计算、在线场景。

这大半年来其实一直在尝试真正搞懂两个概念,DAG和pipeline。

首先是DAG。和不同人交流,大家对DAG的理解都不一样。有的人认为DAG与stage by stage是绑定的,有明确的stage划分和执行步骤的才能称为DAG,这和它的始祖Dryad,以及一脉相承的Spark分不开。在我看来,至少在BH的实现中,DAG更多地被泛化成一个计算模式,stage和pipeline只是执行实现的不同,与DAG本身无关,DAG就是个执行计划,它重点在于灵活,每个节点可以把执行计划最大程度地下推到挂在的Engine里(包括数据库、OLAP Engine及各种存储介质等),极简的DAG就是下发和merge两层,极优的DAG就是可以把SQL优化执行为与原生SQL语言的MPP等系统一样优化的效果,所以DAG是计算表达的统一。

其次是pipeline。pipeline其实刚开始于streaming捆绑出现,直到半年前我终于明白了streaming是什么。其实刚开始做BH的时候,我就是把streaming与pipeline混淆的,pipeline带来的好处就是每一批(一条、若干条或全部)数据的lantency低,各自并发可乱序,中间数据不容易膨胀。后来看了微软的一些论文和系统之后,特别是DataFlow论文的出现,让我看到了streaming的本质。streaming的数据有先天的属性:产生时间系统处理时间。真正完备的streaming可以在编程模型上清晰地定义,何时或什么条件下要触发计算,迟到的数据需不需要及如何处理,放在那部分区间处理,如何对已输出结果做补偿。在这块,思想最先进的就是谷歌的DataFlow,它没有给出实现细节,但是把模型这层说的很清楚,真正统一了streaming和batch计算,微软的Trill也更早意识到了这点,只是论文层面没有DataFlow说的清晰(个人拙见)。

再说回来,当初BH的目的就是用这种流式处理的思想,统一流计算和批量离线计算,同时对在线场景有亲和力,主要体现在QPS。具体说在线这块,在架构设计上做了些设计,当然是通用的,整个BH设计都是从通用开始的。Spark的核心之一是数据复用,我们为了在线的qps,对执行相关也做了类似复用的事情。

在后半阶段,BH开始往图计算走,在我看来是典型的流式图计算做法。BH的DAG被进行了扩展,带环,使之可以做高效的流式迭代计算。这边值得一提的是,我们不仅可以做ASP、BSP,也可以轻松做到SSP,不需要添加任何新模块和新原语。这得益于pipeline系统的执行本身就是stage by stage多了协调模型,在BH中做得比流式的协调者更复杂和灵活。这种流式迭代的表达让BH可以很适合无barrier的图算法,比如N度扩展、标签传播等。当然也有tradeoff,像PageRank在我看来并不占优势。因为在图这个领域,同步BSP模型、异步模型,本身就是不同系统的执行选型,比如Pregel、Graphx、Giraph、GraphLab。BH在模型这层都可以做支持,并且在个别场景中可以发挥所长,做的比较极致,甚至执行起来有点像MPI模型。

所以BH做到现在,我基本觉得分布式计算基本都差不多,流也好,批也好,图也好,以及大部分的MLDM算法,对core这层都没有区别。当然我认为spark的core在执行方式上,支持流还是有问题的。虽然分布式计算都类似,但框架作为通用的架构,真的要支持的时候,还是要面临专有系统的挑战,我们不能真的定制成极致,这也是tradeoff。所以机会可能就在于数据复用和混合计算的场景,这和Spark、Flink是很像的:)

再接着图计算谈,很多图计算系统都使用标准的图计算算法来做benchmark以说明自己的性能。其实真实场景中:第一,这种写在lib里包出去用的所谓标准算法基本套不上,很鸡肋或者说脱离事实;第二,要参杂图查询。后者其实是个更严峻的话题,我目前还是认为图查询和图计算是两码事,前者我认为就和OLAP一样,毫秒级要求,有一套自己的DSL,标准原语,并且要在建模这层下些功夫,可能要在存储这层额外建点、边以外的索引,真正在计算表达上,就只是DAG的locality。除此之外,我看到图查询的场景里,还带了很多关系型查询,看上去图建模和关系型建模必须混存,或者,我的一个观点是,图存储里面包括关系型存储。所以在我看来,图这块是三个层次,图计算、图建模、图存储。建模确定了计算的API,不同的建模对应不同的API实现,比如Pregel的、类似Graphx/Gelly的。同时建模决定了图存储的组织,可以是纯的切点/切边,按矩阵分区的图存储,也可以带上KV关系型存储作为辅助的,并且加上定制索引。说白了,图建模之所以承上启下,主要是因为它知道存储的元数据,可以为计算提供正确的Partitioner,做更好的locality计算。甚至图查询这块,和搜索的做法更类似,比如Facebook的Unicorn,基本上就是做搜索的方式做图查询。

另外,TensorFlow开源那阵子,作为小白的我还研究了些ML、DL的系统和架构,想着这块的计算是否也有统一的可能。基本上,Parameter Server这样的架子勉强可以在BH里实现,不会很丑,比Spark结合要干净点,BH确实可以做online learning,对于一些model不是很大但要实时更新的场景。

手写的好冷,基本上我觉得大半年来,搞清了统一分布式计算的模型,探索了streaming和graph,从无到有与三四位同事一起做了一个属于我们自己的计算框架,接下来的项目落地有更多的挑战可以做,加油吧 :)

时间: 2024-12-21 18:32:42

大半年来做的计算这点事的相关文章

倒闭企业:“都是1块钱要做10块钱的事”?

浙江传统产业比重较大,放大了目前出口下降对整个经济面的影响.全国纺织服装等10个劳动密集型传统行业的产值比重2001年合计是22.6%,2007年下降到18.3%.而浙江同比分别是35.3%和28.2%,比全国高9.9个百分点.今年1至8月,这些行业对于浙江全省规模以上工业增长贡献份额只有19.3个百分点,比正常状况至少偏低10个百分点. 企业间互相担保引发一连串倒闭 近几年,企业经营多元化成了最时髦的词汇.房地产开发高峰时,各类企业一哄而上,到处跑马圈地:证券市场火爆时,不少企业收购证券公司.

谈谈做外链的那些事吧

外链是每一个网站必不可少的.但是做外链又让人很忧伤.要是脾气暴躁的,你都要砸电脑的冲动了.外链分为论坛的,平台的,博客的.尤其是论坛和平台的是最多的.但是现在论坛对于外链的限制是很严格的.你要发一个外链有这样那样的限制.好不容易发了一条外链,发现这么捣鼓的时间都过去了两三个小时了.让你很崩溃.笔者这次就跟大家分享一下外链的那些事情.我不是跟大家分享什么技巧的,也不是什么绝招的.就跟大家唠唠外链的那些事. 一.心态很重要 做外链的或多或少的脾气都不是很好.每天都做同样的事情,激情都被磨没了.现在外

javascript-帮忙做个计算医保待遇的页面

问题描述 帮忙做个计算医保待遇的页面 实在不怎么会Js代码,能不能帮忙做个计算的网页,最简单那种 界面内容: 1.下拉列表:选择医院等级(一级,二级,3级) 2.选择成年人还是未成年人 3.输入符合报销范围医疗费用 4.点击计算 5.显示计算结果 计算条件: (1)起付线:一级医疗机构及以下定点医疗机构100元,二级定点医疗机构300元,三级定点医疗机构800元. (2)报销比例:一档成年人在一级医疗机构及以下定点医疗机构住院按80%报销,二级定点医疗机构按60%报销,三级定点医疗机构按40%报

[20131125]使用vim做合计计算.txt

[20131125]使用vim做合计计算.txt 工作需要,需要使用vim做合计计算,把一列的数据累加,输出结果,到www.vim.org网站检索,发现: http://www.vim.org/scripts/script.php?script_id=1932 visSum.vim插件比较合适.结果测试发现一些问题,结果自己花了一个下午晚上的时间测试修改,有点浪费时间. 主要原因: 1.不熟悉vim里面的函数,以及命令格式. 2.vim scripts 不知道如何调试,我最后只能单步跟踪执行.

闲暇时该做的28件聪明事

如果有时间还不如做点有利你个人财务的聪明事,每天一件,一个月时间会大大改善你的财富状况. 文|CBN记者 崔鹏 插画|陈杨 如果你除了工作还有不少闲暇时间,那么不妨用它来做点对个人财富有利的聪明事,特别是在资本市场既不上涨,也很难下跌,专家们争论个不休的时候,公司人投资者在这个时候不用整天费神费心地盯着市场的走势,也不用去看专家们在数据上吵翻天.眼下正是一个好时机,每天做一件,一个月坚持下来,你的财富状况肯定会大为改观. 01 校准你的投资理念 如果已经开始投资,而且经历了牛市.熊市和不牛不熊的

你做设计,剩下的事交给我

http://www.aliyun.com/zixun/aggregation/29926.html">United Styles让用户体验了设计时装的快感,也为自己省下了不菲的设计费用. 文|CBN实习记者 沈从乐 不需要成为专业的设计师,你也可以给自己设计衣服.在线服装设计制作网站unitedstyles.com的想法是让所有用户都体验一下做时装设计大师的感觉. 在香港生活的Vicki Victoire从来没有学过设计,但她把自己在unitedstyles.com上完成的服装设计稿上传

iPhone 丢失后应该怎么办?我做了这5件事!

你每天会跟你的 iPhone 亲密相处多长时间? 雷锋网的编辑掐指一算,发现竟然超过了18个小时,属于重度手机依赖症患者~~~ 虽然我的 iphone 不是卖完肾才买的,但它俨然已经成为长在我身上的一个非常重要的器官,日常生活中,大到跟领导汇报工作,小到交水电煤气费,都会用到它. 所以,当8月的某天早晨我发现手机丢失后,是一脸懵逼的,我发现什么都干不了,连扫个小黄车去报案也不行~~~ 现在,事情已经过去了大半个月,在这期间,经历了报案.担心微信支付宝等APP上的财产损失.与苹果客服沟通.接到钓鱼

CEO们一年要做别人五年的事争分夺秒吃饭睡觉

这是一个讲求速度的世界,要用最短的时间完成最多的事情.优秀的企业家总是在新的一天之前就规划好了一切,力求在起跑线上姿势都比其他选手更接近起跑瞬间. 推荐阅读博士伦护理液又遭500起诉讼 已赔2.5亿美元 外来的和尚VS 空降兵 成功人士的标志是:一年三百六十五天,你是否总觉得时间不够用? 每天都忙忙碌碌,可是工作一天下来,还是觉得有堆积如山的事情没有忙完? 是效率不高,还是时间管理有问题?为什么在和时间的赛跑中,你永远是那个救火队的角色?或许,该到了检讨你的时间管理方法了.想想王石和罗红,管理着

【阿里云MVP月度分享】如何基于MYSQL做实时计算?

有时候我们会有这样的场景,在某个接口中,数据已经很规范地存入到一张的MYSQL表中,现在想对这样的数据做一些实时或准实时处理,比如数据多模式存储.异步准实时业务流程.业务实时监控等.接口中处理流程如下: 最原始的方法,是改动业务代码,将这些额外的处理流程作为同步流程,在更新MYSQL数据之后同步执行.如下图: 但是这样的处理流程可能会越来越多,如果一直作为同步流程,整个接口会变得越来越庞大.并且耗时越来越长.出问题的风险越来越高. 所以我会考虑异步处理流程.如果可以改动一下代码,将数据额外写一份