Etsy Activity Feeds Architecture
https://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture
etsy的消息流架构,从几个方面入手:
- data model 数据模型
- where feeds come from 如何产生feeds?
- how feeds are displayed 如何对feeds进行排序?
- optimizations 优化
Entity, Connection and Activity.
- Entity是消息个体,比如人,地点,餐厅。
- Connection是Entity之间的相互联系,比如A关注B,A喜欢C餐厅,A去过C地点。
- 而Activity则是Entity产生Connection的事件,它是消息流feeds的来源。
Connection是有向的,边上面有权重值,这个信息可以帮助排序。而Activity可以表示成为元组,除了(subject, verb, object)之外,还可以加入owner字段(表示这个activity谁产生的)方便对feeds进行解释。
有了各种各样的activites之后,我们就可以开始制作feeds,无非就是将自己和自己相关的activies聚合(aggregation)起来。
- Choosing Connections.(可以根据affinity进行选择)
- Make Activity Sets. (根据上面选择出来的connections选择activities)
- Classification. (这个我没有看懂是为什么?可能是为了后续展现逻辑使用的)
- Scoring. (simple time decay function)
- Pruning. (剪枝,主要做去重)
- Soft & Merge. (合并和排序)
- Cleaning Up. (限制展现数量)
Aggregation的触发时间有两个:用户操作或者是登录,以及cron定时触发。
展现的时候如果使用naive方式的话,效果会非常糟糕。对于相同owner的activities,可以折叠起来,形成一个Story。实现上可以将整个feeds切分成为多个sections. 对每个section内容相同的owner可以进行折叠。