浅谈任务调度中的自身依赖

在大数据处理中,因为算法或者业务逻辑的要求,有时候需要依赖任务本身的历史数据,譬如,当前业务日期依赖T-1,即昨天的计算结果。这就是自依赖,在任务调度图上看,就是一个闭环。

以T-1来说,如果昨天的任务没有完成,那么今天的业务日期是处于等待状态,直到昨天的完成为止。这种有个潜在的风险是,如果任务失败,而又不能及时发现并重启,那么后续的所有业务日期的任务都处于等待。而且,重启任务要从最早失败的日期开始,等成功了,在重启下一个业务日期。这种一个一个按顺序重启,非常麻烦。那么如何解决这个问题?

解决方案要具体问题具体分析,如果如果T-1的依赖是业务强要求,譬如,一定要严格计算今天同昨天比新增的数据,那么就一定要这个依赖。但在大数据处理时,这种严格的业务要求通常不会有。

如果是因为算法计算为了提高效率,减少计算量,昨天已经处理过的数据,今天就不必处理了,直接把昨天的结果拿来就行,这时候,就完全可以去掉这种自依赖。从而保证系统的稳定性和鲁棒性。核心是cache,即把所需的历史数据,譬如,t-1的结果放到一个cache表(独立的表或者和处理结果同一个表,但放到一个特别的最大业务日期分区,譬如99991231),那么在当前业务日期计算的时候,增量是和从cache取得,就不需要依赖自身。cache总是保存当前最新的业务日期处理结果。当当天的业务日期处理完成后,除了更新当前业务日期分区,同时,也要更新cache表或最大业务日期分区。这样即使历史任务很多失败了,也可以快速修复数据,因为cache里总是有数据在,只是增量计算的参考不再是严格的t-1,但实际上不影响任何东西。因为算法增量计算的目的是不做重复计算,大多数时候是要把增量和cache的数据做合并,每天仍是全量。

如何设计cache,和具体算法业务有关,如果你想在某些情况下已经计算过的,其中一些在某些条件下需要重新计算,这时候,cache的逻辑可以复杂,只cache满足条件的部分数据。你也可以设计个开关,随时打开或关闭cache。

我们希望系统稳定,减少维护成本,把宝贵的时间和聪明放到更有价值的地方,就需要在系统开发的时候提前规划好,设计好。

Learn programming – C++ basic

I will share some slides being prepared to teach basic C++ to children. C++ is beautiful and useful, particularly when your system has high requirements on efficiency with limited resources. Although high level languages such as Python, are widely used in machine learning, the backbone library is in written in C++ most of times. These slides only include basic C++, not including advanced topics such as class, template, memory management, ……

Practice coding is best way to learning any programming. For each lesson, samples codes are taught. If you are interest, please contact me.

Lesson 1

Lesson 1

Lesson 3

Lesson 4

Lesson 5

Lesson 6

Lesson 7

宽客人生读后感

从一档podcast听到这本书,就找来看看。这是一本介绍Emanuel Derman,一位在哥伦比亚大学受训为理论物理学家,如何经历职业的震荡,最终成为一位量化分析师的过程。如果我在博士刚毕业的时候能看到这本书,可能我的个人职业发展也会是不一样的人生。

对于立志从事科学研究的人,读完这本书,可能要重新审视自己的决定。

六七十年代的哥大,那是理论物理学的重地,因为有李政道在那里坐阵。物理系的研究生可谓是天才中的天才。作者从南方到哥大,立志成为理论物理学家,而且也是自恃聪明,可到了哥大,才发现厉害的人到处都是。经历了选课题选导师,作者开始审视自己,以自己的资质,是绝无可能获得重大成就,可又新有不甘。毕业后为了从事理论研究的职业,做不稳定的博士后。朋友介绍工业界的机会,可不愿放下身段,因为做理论物理的人去做应用,在那时候是很没有面子,丢人的,等于承认自己的失败。

在后来,为了家庭,总算去了bell实验室去做分析软件。渐渐发现编程做软件系统挺有意思,可以看到自己的东西直接有成效。虽然作者自己的系统成了公司的产品,可他毕竟半路出家,后来一个科班出身的哥们加入他们团队,系统升级的时候重写了代码,而他在休假。等他发现,已经晚了,而且他看了人家写的,简直比自己的好太多。以后只能自己维护,理解代码都困难。

在后来有机会加入高盛,在量化团队跟着一位牛人,开发量化模型,其实就是软件工程师,实现领导的模型想法。相比交易员和销售员,地位奖金可差远了。好在他很喜欢,在高盛开发交易模型,一直就这样做下去(中间短期跳槽去了所罗门兄弟)。

主要收获:

  • 搞科学研究不是光有热忱和不屑的努力就可以的,智力占主要的。就像作者说的,读了爱因斯坦的论文,自己绝对做不出来。年轻的时候我们很多人都立志科研,可有时候现实很残酷
  • 应用研究也是很有意思的,可以立马看到效果。看到自己的东西很快产生实际效果,也是很有成就感的。
  • 要跟对人。作者跟着当时的最牛的金融量化教授和专家做,通过实现别人的模型,外加自学相关知识,起点肯定高,做的东西都是顶级的。
  • 时机对。从所罗门兄弟再回到高盛时,原有的team leader 的位置已经没了,因此去了另外一个股票模型组(没有原来的好,奖金啊),正巧牛人老板被掉到其他岗位,空出来leader的岗位。真是命啊
  • 爱好和长期耕耘。作者喜欢建模,善于思考,理解交易员碰到的问题,思考解决方案。这其实是博士的训练,发现问题,抽象和模型化,写代码解决问题。博士训练的是一种思维,一种解决问题的方式。虽然实际问题千差万别,但分析抽象后,就变成一般性的问题,解决方案也就有了。
  • 本书的文笔感觉一般(看的中文版),有点像流水账。里面有不少理论物理界的名人轶事,权当茶余饭后的聊资。
« Older Entries Recent Entries »