首页 存档 技术 查看内容

SystemDesign总结

2018-3-30 13:00 |来自: 互联网 494 0

摘要: 1. System design 是一个很大的话题,大的System一般都是由Architect来设计的,因此就算工作过若干年的也未必有很丰富的system design的经验。如果想对system design有一个初步了解,我发现这个文章不错,http://www ...

1. System design 是一个很大的话题,大的System一般都是由Architect来设计的,因此就算工作过若干年的也未必有很丰富的system design的经验。如果想对system design有一个初步了解,我发现这个文章不错,http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/。

2. 因为我们jobhunting的主要目标集中在了**T等互联网公司,因此在这个范畴里的system design也就集中在了分布式计算和分布式存储的design上了。想对这些设计理念有个大体的了解可以读读Google的三驾马车,GFS, MapReduce和BigTable。

3. 有大牛建议读读各个公司的engineering blogs,我觉得是非常好的建议。不但能学习system design,面试的时候很有可能被问到相关的话题。如果你准备过,不但能更好的回答问题,还能带给面试官好感,从而产生所谓的化学反应。

4. 如果想在system design上提高,则需要真正的实践。加入,或者研究一些opensource的project是比较有效的方法。因为我们找工作更多集中在了并行和分布式计算上,因此AKKA则当仁不让是一个非常理想的研究目标。

我感觉如果按照上边几点准备的话,对付面试应该会更有把握很多。一家之言,欢迎讨论。

一些回复:

  1. 实现的是一个分布式svm的算法
    大概做法是,有一个master actor,以及几个其他的slave actor
    master actor用来负责发配数据,以及收集各个slave actor返回的数据,做reduce,
    然后将reduce后的数据再发配到所有slave actor上。由于算法中需要几次reduce/发配
    数据的过程,因此需要好很多case class对应计算的不同阶段。
    不过现在想想低效的另一个可能是scala不大适合数值计算,应该把相关的计算部分丢
    给C来做?

  2. 我当时考虑过一种类似的。比如说搞一个全局变量外加计数器。每个slave actor有结
    果之后就去更新那个全局变量和计数器。当计数器的数量和actor的数量相等的时候,
    就说明所有更新已经完毕,每个actor再来读取一次这个变量的值。读取一次计数器减1
    ,直到减成0,。最后一个actor负责将全局变量清零用于下一轮计算。

    不过这种做法的实现挺困难。首先actor之间应该不能用monitor之类的东西搞
    conditional block?(否则和actor自治系统设计思路就不符合了?)然后就变得每个
    actor要不断访问这个计数器检查是否已经reduce完毕,反而使得开销很大。其次第一
    个actor读取全局变量并更新计数器之前还要保证每个actor都已经发现计数器已经达到
    预定的值,这个又要额外的代码来实现这个功能。相比之下还是用一个master actor来
    维护这些所有工序更加直接。

    后来看别人的实现,发现MPI里面一个reduce函数就可以做到这些,不知道后台是怎么
    操作的。。。

更多讨论,见原帖地址,自备梯子,点击原文链接。

本文转载自:微信公众账号 - 待字闺中,版权归原作者所有!

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部