美国华人网FuninUSA_唐人社区_北美华人论坛:找礼品卡,找折扣,找报价,找工作,找内推,找项目,找股票

 找回密码
 立即注册

点击进入授权页面

只需一步,快速开始

  • 交警蜀黍把交通违法的人做成了表情包 火了!
  • 福岛核事件“产出”新血型?专家说话了
  • 如果太阳突然消失……人类彻底惨了
  • 俄罗斯联盟火箭连续失败!最关键原因无解
  • 宁波16岁少女减肥 暴瘦18斤猝死
  • 石榴籽能吃吗?没想到有这么多好处
  • 新发现!人类大脑就是台量子计算机:如此神奇
  • 最先进波音客机:首架787-10开始最终装配
  • 深夜虐狗:那些秀恩爱的动物们 单身汪不哭!
  • 河南农民挖出人形何首乌:样子太污了
  • 在纽约购置学区房不但能让子女获得优质教育,而且能获取学区房增值的红利-美国投资指 ...
  • 战略家:现在是金融类股的反弹消退的时候了
  • 苹果可能在2017年看到一个“惊喜”的反弹
Logo1-800-PetMeds Free Shipping $49Take $10 Off Your First Order w/code: SAVE10 - 234 x 60
ASICS AmericaPagoda Piercing Banner 234x60Sierra Trading Post
搜索
查看: 3022|回复: 22

内推面经 -问一道system design的题- 唐人社区|北美华人论坛

[复制链接]
TA在交友中心
0 0 42
  @ME:   

18

主题

43

帖子

84

积分

新手上路

Rank: 1

积分
84
QQ
发表于 2016-10-4 02:57:10 | 显示全部楼层 |阅读模式
分享到:
{$content}

唐人社区-北美华人论坛-内推面经版-问一道system design的题


  JobHunting
标 题: 问一道system design的题


onsite被问设计一个定时发送消息的系统,就是当create message时,给一个future
time。到了那个时间就把消息发出去。

我给出的设计是当create时,存入DB. 然后有一个scheduler每分钟query db, 把这一
分钟需要发送的消息发出去。面试官问消息太多,如果server不能发完这一分钟的消息
怎么办。我说scheduler 除了发这一分钟的,也可以发送历史留下未发出的,这一分钟
没发出,下一分钟数量少了就可以发出。或者单独有一个thread专门发送历史未发出的
。面试官说server就是有资源限制,不管几个thread只能一分钟发10个,如果每分钟有
11个消息怎么办?我说加server,面试官说不管加多少server, 总有限制,如果消息数
量超过限制怎么办?他说我的design不work. 我就傻了,不太明白他要什么了。

请问大侠这个应该怎么设计?
--
不求大富大贵,但求平安健康。

新浪微博官方账号】美国省钱快报FunInUSA : 每日滚动更新美国市场折扣资讯微商进货首选资讯渠道。
回复 百度谷歌雅虎搜狗搜搜有道360奇虎

举报

TA在交友中心
0 0 63
  @ME:   

30

主题

83

帖子

146

积分

注册会员

Rank: 2

积分
146
QQ
发表于 2016-10-4 03:30:38 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


再让user重新选时间应该不行。

【 在 magician (爱情魔法师) 的大作中提到: 】
: you can fail it when creating the message, and let users set
: another "future time"



--
不求大富大贵,但求平安健康。
TA在交友中心
0 0 47
  @ME:   

23

主题

96

帖子

139

积分

注册会员

Rank: 2

积分
139
QQ
发表于 2016-10-4 03:39:06 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


这种东西不能放db里吧. db的存取延迟怎么估计...
怎么保证能再发送之前一定取得出来

据说系统设计最重要的环节是把要求和限制问清楚?

【 在 coldknight (冷骑士) 的大作中提到: 】
: onsite被问设计一个定时发送消息的系统,就是当create message时,给一个future
: time。到了那个时间就把消息发出去。
: 我给出的设计是当create时,存入DB. 然后有一个scheduler每分钟query db, 把这一
: 分钟需要发送的消息发出去。面试官问消息太多,如果server不能发完这一分钟的消息
: 怎么办。我说scheduler 除了发这一分钟的,也可以发送历史留下未发出的,这一分钟
: 没发出,下一分钟数量少了就可以发出。或者单独有一个thread专门发送历史未发出的
: 。面试官说server就是有资源限制,不管几个thread只能一分钟发10个,如果每分钟有
: 11个消息怎么办?我说加server,面试官说不管加多少server, 总有限制,如果消息数
: 量超过限制怎么办?他说我的design不work. 我就傻了,不太明白他要什么了。
: 请问大侠这个应该怎么设计?
: ...................


--

TA在交友中心
0 0 56
  @ME:   

24

主题

95

帖子

148

积分

注册会员

Rank: 2

积分
148
QQ
发表于 2016-10-4 03:58:58 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


原来是霸哥啊,你也要换工作了?

【 在 jobhuntinger (jobhuntinger) 的大作中提到: 】
: 各种cron scheduler都是现成的,比如quartz. 只要你单结点load 不大,咋整不行。



--
不求大富大贵,但求平安健康。
TA在交友中心
0 0 30
  @ME:   

11

主题

82

帖子

97

积分

注册会员

Rank: 2

积分
97
QQ
发表于 2016-10-4 04:02:35 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


不错不错
【 在 jobhuntinger (jobhuntinger) 的大作中提到: 】
: DB is for storage/backup purpose. The messages should be kept in a
priority
: queue in memory based on schedule, at least for those that will be sent in
: next N
: minutes, and you can load up every N minutes.
: A master handler can distribute the messages to a worker cluster, if the
: messages are big, message id can be passed instead, and worker cluster can
: call back DB to get the message payload. Using async requests, a single
node
:  can easily send 10s of thousands of messages per second, usually enough
for
:  this kind of app. And if it's not enough, nothing stops you from
vertically
:  partition your messages and front multiple such groups with a load
balancer.
: ...................


--

TA在交友中心
0 0 47
  @ME:   

23

主题

86

帖子

122

积分

注册会员

Rank: 2

积分
122
QQ
发表于 2016-10-4 04:31:34 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


怎么处理定时发送? 总是要有个scheduler 吧。

【 在 jobhuntinger (jobhuntinger) 的大作中提到: 】
: DB is for storage/backup purpose. The messages should be kept in a
priority
: queue in memory based on schedule, at least for those that will be sent in
: next N
: minutes, and you can load up every N minutes.
: A master handler can distribute the messages to a worker cluster, if the
: messages are big, message id can be passed instead, and worker cluster can
: call back DB to get the message payload. Using async requests, a single
node
:  can easily send 10s of thousands of messages per second, usually enough
for
:  this kind of app. And if it's not enough, nothing stops you from
vertically
:  partition your messages and front multiple such groups with a load
balancer.
: ...................



--
TA在交友中心
0 0 12
  @ME:   

6

主题

236

帖子

245

积分

注册会员

Rank: 2

积分
245
QQ
发表于 2016-10-4 04:32:43 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


多谢,你这个设计确实好。

面试官确实说了每个消息可以很大,甚至可以有大附件,所以我第一反应是要DB存,我
说了DB design,他也默许了。不过我没有想可以把多长时间以内的存在memory,他反
复两次说用时间query DB不work。估计是像你说的,他想要的答案是preload next N
minutes message into memory. 三哥真应该给我一个方向提示,提示我处理速度受到
query DB的限制。还有我提到Server cluster, 和multi clusters, 他也没搭理,只是
说再多的server也有处理限制。给我的感觉就是无所谓server数量。把我问住了,我只
好说发不出去的留到下一分钟再发。我感觉你这个设计用master 和 work很好,master
不用处理历史未发送的,可以提前把下N分钟要发的 message ids分配给work clusters
, work server preload messages into memory from DB, 并定时发送。再加上你说的
multi clusters/ Data centers with load balancer, 应该差不多了。三哥面试官一
点都不给提示,只是说query不能work, 实在让我没头绪,不明白他要什么。



【 在 jobhuntinger (jobhuntinger) 的大作中提到: 】
: DB is for storage/backup purpose. The messages should be kept in a
priority
: queue in memory based on schedule, at least for those that will be sent in
: next N
: minutes, and you can load up every N minutes.
: A master handler can distribute the messages to a worker cluster, if the
: messages are big, message id can be passed instead, and worker cluster can
: call back DB to get the message payload. Using async requests, a single
node
:  can easily send 10s of thousands of messages per second, usually enough
for
:  this kind of app. And if it's not enough, nothing stops you from
vertically
:  partition your messages and front multiple such groups with a load
balancer.
: ...................



--
不求大富大贵,但求平安健康。
TA在交友中心
0 0 46
  @ME:   

21

主题

91

帖子

131

积分

注册会员

Rank: 2

积分
131
QQ
发表于 2016-10-4 04:39:58 | 显示全部楼层
JobHunting
标  题: 问一道system design的题


onsite被问设计一个定时发送消息的系统,就是当create message时,给一个future
time。到了那个时间就把消息发出去。

我给出的设计是当create时,存入DB. 然后有一个scheduler每分钟query db, 把这一
分钟需要发送的消息发出去。面试官问消息太多,如果server不能发完这一分钟的消息
怎么办。我说scheduler 除了发这一分钟的,也可以发送历史留下未发出的,这一分钟
没发出,下一分钟数量少了就可以发出。或者单独有一个thread专门发送历史未发出的
。面试官说server就是有资源限制,不管几个thread只能一分钟发10个,如果每分钟有
11个消息怎么办?我说加server,面试官说不管加多少server, 总有限制,如果消息数
量超过限制怎么办?他说我的design不work. 我就傻了,不太明白他要什么了。

请问大侠这个应该怎么设计?
--
不求大富大贵,但求平安健康。
TA在交友中心
0 0 44
  @ME:   

21

主题

92

帖子

126

积分

注册会员

Rank: 2

积分
126
QQ
发表于 2016-10-4 04:52:16 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


throttle 是一招。你也应该设计考虑如何可以scale out,这在实际中更重要。楼上古
德霸的设计不错,可以 scale workers. 工作中很常用的手法。

【 在 coldknight (冷骑士) 的大作中提到: 】
: 你说的也有道理,如果无论如何都有限制,需要throttling。



--
TA在交友中心
0 0 56
  @ME:   

24

主题

88

帖子

143

积分

注册会员

Rank: 2

积分
143
QQ
发表于 2016-10-4 05:20:12 | 显示全部楼层
JobHunting
标  题: Re: 问一道system design的题


设计个load balancer不就好了?简单的round robin就可以啊
--
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

玩美生活FunInUSA.net 华人娱乐论坛发布的内推面经 -问一道system design的题- 唐人社区|北美华人论坛帖子由网友提供或转载于网络,若发布的内推面经 -问一道system design的题- 唐人社区|北美华人论坛侵犯了您的权益,请联系我们.
1&1 Hosting

Copyright ©2011 FunInUSA.com All Right Reserved.  Powered by Discuz! X3.0 小黑屋

本站信息均由会员发表,不代表美国华人网FunInUSA立场,如侵犯了您的权利请发帖投诉  技术支持: 美国华人网FunInUSA

安全联盟认证 安全联盟认证

快速回复 返回顶部 返回列表