d**e 发帖数: 6098 | 1 ☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 14:28:11 2013, 美东) 提到:
1. System design 是一个很大的话题,大的System一般都是由Architect来设计的,因
此就算工作过若干年的也未必有很丰富的system design的经验。如果想对system
design有一个初步了解,我发现这个文章不错,http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/。
2. 因为我们jobhunting的主要目标集中在了FLGT等互联网公司,因此在这个范畴里的
system design也就集中在了分布式计算和分布式存储的design上了。想对这些设计理
念有个大体的了解可以读读Google的三驾马车,GFS, MapReduce和BigTable。
3. 有大牛建议读读各个公司的engineering blogs,我觉得是非常好的建议。不但能学
习system design,面试的时候很有可能被问到相关的话题。如果你准备过,不但能更
好的回答问题,还能带给面试官好感,从而产生所谓的化学反应。
4. 如果想在system design上提高,则需要真正的实践。加入,或者研究一些open
source的project是比较有效的方法。因为我们找工作更多集中在了并行和分布式计算
上,因此AKKA则当仁不让是一个非常理想的研究目标。
我感觉如果按照上边几点准备的话,对付面试应该会更有把握很多。一家之言,欢迎讨
论。
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 14:46:18 2013, 美东) 提到:
准备用AKKA实现MapReduce做为system design的练习如何?
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 14:49:06 2013, 美东) 提到:
我前段时间刚好用过scala/akka搞一个分布式计算的东西
不过信息传递全都是用各种case class,结果效率不是很高。
不知道有没有更好的设计和实现方法。
☆─────────────────────────────────────☆
Piscesboy (bluesky) 于 (Tue Mar 19 14:51:09 2013, 美东) 提到:
赞总结!
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 14:51:45 2013, 美东) 提到:
我倒是有想用hadoop和ec2做一个小东西试试,正好上面有很多大数据。不过不知道会
不会钱上面开销很大。。。或者跑个小数据集玩玩?
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 14:52:29 2013, 美东) 提到:
这个要具体看了。你能把你的design share一下吗?
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 14:53:55 2013, 美东) 提到:
昨天跟朋友讨论了一下,感觉hadoop code base太大了,不好involve。所以选择了
AKKA。
☆─────────────────────────────────────☆
a2339923 (肾虚小牛) 于 (Tue Mar 19 14:56:24 2013, 美东) 提到:
赞总结。另外想问问那些open source的project该怎么找?有没有一些网站统一介绍的
?
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 14:58:01 2013, 美东) 提到:
实现的是一个分布式svm的算法
大概做法是,有一个master actor,以及几个其他的slave actor
master actor用来负责发配数据,以及收集各个slave actor返回的数据,做reduce,
然后将reduce后的数据再发配到所有slave actor上。由于算法中需要几次reduce/发配
数据的过程,因此需要好很多case class对应计算的不同阶段。
不过现在想想低效的另一个可能是scala不大适合数值计算,应该把相关的计算部分丢
给C来做?
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 14:58:45 2013, 美东) 提到:
这个以前讨论过,好像没有什么特别好的办法。关键还是看兴趣吧。
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 14:59:19 2013, 美东) 提到:
不过hadoop的应用面会不会广很多呢?感觉actor这东西挺小众的啊
我应该还没到直接看源码的阶段,想先拿来跑一跑感觉一下。
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 15:01:47 2013, 美东) 提到:
github和sourceforge上的开源项目浩如烟海呀
不过要找到一个自己感兴趣的又在自己能力范围内的开源项目倒是挺难的。
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 15:03:06 2013, 美东) 提到:
你是deploy在什么环境了?
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 15:04:05 2013, 美东) 提到:
主要是我喜欢底层一些的东西。这个还是看兴趣。不过一般来说越底层,可以学习的地
方越多。
☆─────────────────────────────────────☆
a2339923 (肾虚小牛) 于 (Tue Mar 19 15:06:43 2013, 美东) 提到:
是的。。那些project太多了。。有些感兴趣但是太难。。有点大海捞针的感觉
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 15:07:19 2013, 美东) 提到:
呃,主要是单机和一个两三台电脑的小局域网了。。。
可能在数据集很大以及node很多的时候会有优势吧
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 15:08:55 2013, 美东) 提到:
我上次找了一个个人挺感兴趣的project,不过下下来一看,部分源码是asm写的。。
晕菜了
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 15:11:33 2013, 美东) 提到:
master actor用来负责发配数据,以及收集各个slave actor返回的数据,做reduce,
//为什么master做reduce呢?会不会bottleneck?
然后将reduce后的数据再发配到所有slave actor上。由于算法中需要几次reduce/发配
数据的过程,因此需要好很多case class对应计算的不同阶段。
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 15:34:10 2013, 美东) 提到:
这是算法本身的局限性了。training data分布在各个actor上,每个actor算出属于自
己的data的minimum/maximum/sum之后,要汇总起来得到一个全局的minimum/maximum/
sum,然后才能进行下一部计算。我把这部分的运算都整合到master里面了,不知道还
有没有更好的设计思路?
☆─────────────────────────────────────☆
maomaoxiong (maomao) 于 (Tue Mar 19 15:38:20 2013, 美东) 提到:
我也想找些感兴趣的open source项目做做。大家可以开个话题分享一下,也许可以一
起做做。
不过,你们公司可以随便上mitbbs吗?怎么都是大白天的回复啊。
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 15:44:40 2013, 美东) 提到:
明白了。如果一台机,有没有可能把结果放在memory里不传来传去?把computation
order搞好。这样应该能节省数据copy的时间。因为各个actor之间数据没有conflict,
所以不需要同步。多台机就不好搞了。不过先记住你这个scenario。一边学,一边想。
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 15:45:29 2013, 美东) 提到:
我们公司吗?我上班向来都自由呀。
☆─────────────────────────────────────☆
a2339923 (肾虚小牛) 于 (Tue Mar 19 15:50:19 2013, 美东) 提到:
同求分享
☆─────────────────────────────────────☆
rhsh (天晴) 于 (Tue Mar 19 16:12:52 2013, 美东) 提到:
我当时考虑过一种类似的。比如说搞一个全局变量外加计数器。每个slave actor有结
果之后就去更新那个全局变量和计数器。当计数器的数量和actor的数量相等的时候,
就说明所有更新已经完毕,每个actor再来读取一次这个变量的值。读取一次计数器减1
,直到减成0,。最后一个actor负责将全局变量清零用于下一轮计算。
不过这种做法的实现挺困难。首先actor之间应该不能用monitor之类的东西搞
conditional block?(否则和actor自治系统设计思路就不符合了?)然后就变得每个
actor要不断访问这个计数器检查是否已经reduce完毕,反而使得开销很大。其次第一
个actor读取全局变量并更新计数器之前还要保证每个actor都已经发现计数器已经达到
预定的值,这个又要额外的代码来实现这个功能。相比之下还是用一个master actor来
维护这些所有工序更加直接。
后来看别人的实现,发现MPI里面一个reduce函数就可以做到这些,不知道后台是怎么
操作的。。。
☆─────────────────────────────────────☆
malan (三民主义救中国) 于 (Tue Mar 19 16:18:34 2013, 美东) 提到:
这么多大牛,就没想过把技术转化成生产力么。。。
☆─────────────────────────────────────☆
peking2 (scala) 于 (Tue Mar 19 16:45:51 2013, 美东) 提到:
减1
我觉得不能有mutable的data to share。所以不应该用全局计数器。每个actor做完了
给master发message,master自己有个计数器。受到message就-1。计算结果本身可以
放到一个全局数据结构。
☆─────────────────────────────────────☆
justicezyx (just) 于 (Mon Mar 25 01:42:13 2013, 美东) 提到:
可以,不过以面试为目的的话实在有点浪费时间,建议你起头搞个open source
project,放到github上,咱们一起搞
另外咱用node行不。。。
☆─────────────────────────────────────☆
ipad (RIP:Steve Jobs) 于 (Mon Mar 25 01:53:00 2013, 美东) 提到:
除了三架马车,还可以看看Amazon的Key value store那篇。或者研究研究Cassandra.
☆─────────────────────────────────────☆
peking2 (scala) 于 (Mon Mar 25 01:58:08 2013, 美东) 提到:
不错的建议。回头看看去。
☆─────────────────────────────────────☆
peking2 (scala) 于 (Mon Mar 25 01:58:53 2013, 美东) 提到:
这两天看了一下akka,感觉可以先用在工作中,这东西感觉还是挺实用的。
☆─────────────────────────────────────☆
Michelle85 (Michelle) 于 (Mon Mar 25 02:30:08 2013, 美东) 提到:
不是说cassandra快被抛弃了吗。。。
☆─────────────────────────────────────☆
yangcheng (牛魔王) 于 (Mon Mar 25 02:30:38 2013, 美东) 提到:
好快 赶不上形式了 那流行什么啊
☆─────────────────────────────────────☆
SmartFarter (敢上九天摘瓜敢下五洋摸甲) 于 (Mon Mar 25 04:30:40 2013, 美东) 提到:
啊?标题党啊。你这篇应该是“系统设计如何总结”更靠谱。。。算了,等我有空胡写
一个大家凑合看看。
☆─────────────────────────────────────☆
ipad (RIP:Steve Jobs) 于 (Mon Mar 25 12:01:09 2013, 美东) 提到:
嗯,但是一些思想还是有用的,比如说eventual consistent。cassandra是amazon的
dynamo的一个开源实现。
☆─────────────────────────────────────☆
bombshell (吃屎不忘拉屎人) 于 (Tue Mar 26 17:21:56 2013, 美东) 提到:
这个帖子含金量太高了!
☆─────────────────────────────────────☆
belledion (sunny) 于 (Wed Mar 27 11:08:06 2013, 美东) 提到:
赞!
☆─────────────────────────────────────☆
bcloud7 (云七) 于 (Thu Mar 28 13:28:18 2013, 美东) 提到:
二爷真是好人啊。收藏了!
☆─────────────────────────────────────☆
lch04 (Sela'ma ashal'anore!) 于 (Thu Mar 28 14:47:27 2013, 美东) 提到:
期待 |
|