【设计题】今日头条会根据用户的浏览行为、内容偏好等信息,为每个用户抽象出一个标签化的用户画像,用于内容推荐。用户画像的存储、高并发访问,是推荐系统的重要环节之一。
现在请你给出一个用户画像存储、访问方案,设计的时候请考虑一下几个方面:
用户画像如何存储如何保证在线高并发、低延迟地访问机器宕机、负载均衡问题
如果用户增长很快,在你的方案下,该如何做扩容?
将存储用户画像的数据经过哈希函数运算后得到一个key值,然后用key%服务器机器数,得到的就是该用户画像数据归属的服务器,对该数据增添,查询删除都在此机器上进行. 如果服务器变多变少时,用一致性哈希则可以解决这种问题。
负载不均衡的问题:可以引入虚拟节点技术解决,即同一机器经过不同的哈希函数计算出多个哈希值分布在环上,节点数变多了。平衡性自然会好。
1. 建立用户关系映射表,用户和标签为常量,关系为映射。保存用户画像最好使用缓存,比如ememcached,同时后端要落地到DB;
2. 有了内存缓存的话,访问速度自然会有提升,除此之外,还要提高缓存利用率,这样请求不会到DB去请求。
3. 同时还要减少单机查询流量,将不同用户分配到不同的机器上,可以采用分布式,比如按照用户的地区,ID的号段进行分开,这样每个机器的请求都是独立的,可以命中缓存,提高系统的性能。
4. 一致性哈希,保证结点变化后用户访问的机器不变,比如之前在一号机器访问的用户还是到一号机器。