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

 找回密码
 立即注册
  • 《阿凡达》四部续集确定上映时间
  • 《速度与激情》系列有可能出衍生电影?
  • 泰国女子如厕马桶内发现异物:拉出1.5米眼睛王蛇
  • 国产大飞机C919成功“高抬腿”:距首飞仅一步之遥
  • 中国又创记录 107篇学术论文造假被出版商撤稿
  • 手脏了用水洗 水脏了怎么“洗”?
  • 野外碰到熊 装死就可以了?那是找死!
  • 有人想用尿液炼出黄金 没想到竟发现了……
  • 太空是高真空环境 也会发生腐蚀吗?
  • 希望重燃!有人宣称找到了MH370的位置
    Logo1-800-PetMeds Free Shipping $49Take $10 Off Your First Order w/code: SAVE10 - 234 x 60
    ASICS AmericaPagoda Piercing Banner 234x60Sierra Trading Post
    搜索
    查看: 3036|回复: 22

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

    [复制链接]

    19

    主题

    48

    帖子

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

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

    微信公众号】funinusa : 每日微信滚动更新美国市场打折团购折扣Coupon讯息。
    回复 百度谷歌雅虎搜狗搜搜有道360奇虎

    举报

    32

    主题

    91

    帖子

    152

    积分

    注册会员

    Rank: 2

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



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

    26

    主题

    110

    帖子

    161

    积分

    注册会员

    Rank: 2

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


    --

    28

    主题

    102

    帖子

    164

    积分

    注册会员

    Rank: 2

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


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

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



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

    13

    主题

    90

    帖子

    125

    积分

    注册会员

    Rank: 2

    积分
    125
    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

    主题

    99

    帖子

    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

    主题

    247

    帖子

    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

    主题

    94

    帖子

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

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

    22

    主题

    103

    帖子

    144

    积分

    注册会员

    Rank: 2

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


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

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



    --

    27

    主题

    93

    帖子

    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|唐人社区

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

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