美国华人网FuninUSA|唐人社区|北美华人论坛:找好货,找礼品卡,找折扣,找工作,找内推,找项目,找股票

 找回密码
 立即注册
  • 养熊孩子还不如养熊?这只小熊帮主人种地
  • 从此告别汗身!首款生物空调衣研发成功
  • 民航局公安局一锤定音:护照可作为有效乘机身份证件
  • 迪拜造首栋旋转大厦:风吹就能360度转圈
  • 阿里云发布NAS Plus:支持12层4K级非编
  • 曝乐视美国将启动大规模裁员:500多人裁减至60人
  • 大学毕业生收入调查:最有“钱景”的工作是它
  • 马云感慨:我看到满世界黄金 只可惜体力不够
  • 小米线下转型成功!中国第100家小米之家来了
  • 比特币的前世今生:8年暴涨273万倍
  • 猎人变猎物,亚马逊遭遇实体商业的反击
  • 特斯拉市值目前500亿美元,到2020年呢?
  • 100=7500万 !7年前你对比特币爱理不理 现在的它你高攀不起
  • 福特CEO完成交接
  • 中国期货仍混沌 海外交易所现良机
  • 意不意外?惊不惊喜?通货膨胀来了……
  • 洗把脸冷静一下,你对这个牛市还有多少信心
  • Jim Cramer:银行帮不了你,只有美联储可以
  • 并非良配?AMD与英特尔合作希望渺茫
Logo1-800-PetMeds Free Shipping $49Take $10 Off Your First Order w/code: SAVE10 - 234 x 60
ASICS AmericaPagoda Piercing Banner 234x60Sierra Trading Post
搜索
查看: 3039|回复: 22

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

[复制链接]

19

主题

50

帖子

89

积分

新手上路

Rank: 1

积分
89
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. 我就傻了,不太明白他要什么了。

请问大侠这个应该怎么设计?
--
不求大富大贵,但求平安健康。
【美国亚马逊代购拼单群】423286988
回复 百度谷歌雅虎搜狗搜搜有道360奇虎

举报

33

主题

97

帖子

168

积分

注册会员

Rank: 2

积分
168
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"



--
不求大富大贵,但求平安健康。

27

主题

114

帖子

169

积分

注册会员

Rank: 2

积分
169
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. 我就傻了,不太明白他要什么了。
: 请问大侠这个应该怎么设计?
: ...................


--

29

主题

105

帖子

171

积分

注册会员

Rank: 2

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


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

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



--
不求大富大贵,但求平安健康。

14

主题

92

帖子

133

积分

注册会员

Rank: 2

积分
133
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.
: ...................


--

30

主题

103

帖子

160

积分

注册会员

Rank: 2

积分
160
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.
: ...................



--

6

主题

250

帖子

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.
: ...................



--
不求大富大贵,但求平安健康。

22

主题

95

帖子

141

积分

注册会员

Rank: 2

积分
141
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. 我就傻了,不太明白他要什么了。

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

21

主题

107

帖子

144

积分

注册会员

Rank: 2

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


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

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



--

27

主题

96

帖子

154

积分

注册会员

Rank: 2

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


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

本版积分规则

美国华人网|唐人社区|什么值得买FunInUSA.net发布的内推面经 -问一道system design的题- 唐人社区|北美华人论坛帖子由网友提供或转载于网络,若发布的内推面经 -问一道system design的题- 唐人社区|北美华人论坛侵犯了您的权益,请联系我们.
Sasa.com

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

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

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

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