由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - get Top 1million most frequent entries in past 24 hour
相关主题
how to get the top k queries from a search log of terabytes of data?攒人品,分享Pinterest面经
问个snapchat的设计题弱弱的苹果家面经
C++问题3一道面筋题目~
我也来说说我Amazon的onsite经历吧f design question 求讨论
[zynga面经] backend software engineer求牛人 解答 一个Amazon 设计问题
An interview question: data store schema design (转载)L 家设计题求讨论
写一段如何准备large-scale system design的面试吧Zuora北京招聘Senior Java Developer, Techops Manager等多个职 (转载)
关于MySQL和NoSQL的一道面试题mapreduce 初级问题,请各位大牛指点
相关话题的讨论汇总
话题: slot话题: heap话题: worker话题: top话题: 每个
进入JobHunting版参与讨论
1 (共1页)
b*******d
发帖数: 750
1
给出了incoming entry的distribution的曲线,qps是几千这样子。这个system有三个
api:
1)getTopTenMillionInPast24Hour()
2) isInTopTenMilionInPast24Hour()
3) notifyWhenJoinOrRemovedFromTopTenMillionInPast24Hour()
自己来architect系统,定义service能提供数据的精度。
我当时给的是个多台机器的架构。我觉得是旧data每秒钟都在产生(任何当前时间进行
的api call,准确来说,1小时零1秒前的数据都是旧的,对算
top10millioninPast24Hour没有意义),但几乎没有任何系统在一秒钟内可以purge掉
这么多的旧数据,所以就要定义一个精度。比如,semantics是“我能保证给结果是精
确的,但是有个最多20分钟的delay”,或者“我不能保证结果是100%精确的,但是我
能最新的query能够实时的反应在结果中,并且返回的结果和真值有90%的重合”。
其实就是说consistency,availability,partition/sharding, 只能选两样。
------------------
我当时的做法:
若干worker,把request 通过hash shard到不同的worker上去,每个worker上记录:
K1: t1, t2, t3, ...., tm
K2: t1', t2', t3', ..., tn'
把各个K对应的时间序列aggregate成hourly slot,或更小的slot(15分钟,或者10分
钟),里面放个counter。
变成:
k1: s1, s2, s3, ...,s24, s25 (old) ...
k2: s1', s2', s3', ..., s24', s25 (old) ...
每个worker接受新的request,找到对应的hourly slot,counter加1.
每个worker上有个一直在run 的job,算每个K的last hour只用把最近24个slot的
counter叠加,然后把结果送给server。server上保持个10million大小的min-Heap.看
是否加入这个值。这里的trick:用个hashmap来快速access heap里的node;把top放到
各个worker上直到它被更新,用来降低和server间的message数量。
另外,新的request来的时候,添加完counter后,也算个sum of recent 24 hours (若
干个旧slot里的值+最新的slot的值),看是否放入heap中。
这些值几乎都可以放在memory中,可以assume 那个local job 5分钟能全部扫面一次(
因为每个local就算放了几十million的k,每个k的sum也只是24个slot相加,或者旧值
减去23个slot在加上最新的slot,总之非常trivia)。那个server上的heap的更新也足
够快,几乎每秒钟都在被check,必要时更新。
90%只是估计。测试可以通过load testing(在旧log data上)来完成调制参数:比如
有了一个礼拜的log后,任一时刻你都知道真实的top10Million,然后模拟真实的qps在
QA环境下跑一边这些log entry,调用比如1000次api call,看返回的top10Million(就
是那个Heap里的所有值)和真值有多大差别。
可以调的参数包括:worker的个数(shard的数量);每个local 的copy of min-heap
top更新的速度(需要和server talk),slot的大小(一个小时,半个小时,还是15分
钟)。调节参数使这些api call经常性的达到90+%准确,就可以release这个系统了。
我不是design高手,尽我所能而已。。
g*****e
发帖数: 282
2
我很好奇用什么数据结构来存储和更新当前的有效entry。很久之前做过类似的,fb的
题。返回过去n小时内(n<48)内访问最多的ip。只需要描述,不coding。
我给出的解法是同时维护一个queue(按时间顺序存储当前所有有效entry),max
priority queue(快速求top n)和一个hash function(把queue里的值map到priority
queue的node)。因为ip addr其实就是int32,开个hashtable内存勉强吃得消。如果
是url之类的entry似乎更expensive(转成短url?)。欢迎探讨。

【在 b*******d 的大作中提到】
: 给出了incoming entry的distribution的曲线,qps是几千这样子。这个system有三个
: api:
: 1)getTopTenMillionInPast24Hour()
: 2) isInTopTenMilionInPast24Hour()
: 3) notifyWhenJoinOrRemovedFromTopTenMillionInPast24Hour()
: 自己来architect系统,定义service能提供数据的精度。
: 我当时给的是个多台机器的架构。我觉得是旧data每秒钟都在产生(任何当前时间进行
: 的api call,准确来说,1小时零1秒前的数据都是旧的,对算
: top10millioninPast24Hour没有意义),但几乎没有任何系统在一秒钟内可以purge掉
: 这么多的旧数据,所以就要定义一个精度。比如,semantics是“我能保证给结果是精

1 (共1页)
进入JobHunting版参与讨论
相关主题
mapreduce 初级问题,请各位大牛指点[zynga面经] backend software engineer
我的System Design总结An interview question: data store schema design (转载)
面试 Expectation 问题写一段如何准备large-scale system design的面试吧
FYI, 做kafka的startup confluent刚成立关于MySQL和NoSQL的一道面试题
how to get the top k queries from a search log of terabytes of data?攒人品,分享Pinterest面经
问个snapchat的设计题弱弱的苹果家面经
C++问题3一道面筋题目~
我也来说说我Amazon的onsite经历吧f design question 求讨论
相关话题的讨论汇总
话题: slot话题: heap话题: worker话题: top话题: 每个