SWE / Applied Scientist · System Design / OOD

Amazon GitHub用户社区:身份、内容与权限Feed

设计开发者社区的身份连接、帖子互动与关注Feed,防止外部API故障阻断站内功能。

题目重点:设计开发者社区的身份连接、帖子互动与关注Feed,防止外部API故障阻断站内功能。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 只有GitHub user社区设计方向,没有具体功能或TPS。练习让用户连接外部开发者身份,发帖、关注、评论和浏览Feed;代码托管不是本题默认范围。
  • 外部GitHub身份或公开项目数据通过授权和缓存同步;不把外部access token当本站登录session,不假设无限API配额。

解题路线

  1. 本站User与ExternalIdentity分开,绑定通过明确验证;public profile缓存可过期刷新,private项目访问仅按授权范围,不因外部API返回过就长期公开。
  2. 帖子、评论、反应为权威内容对象,编辑和删除带版本并发事件;Feed只存contentId和排序信号,读时检查当前权限/删除状态,避免推送时的旧权限泄漏。
  3. 关注图支持关注/取消;小作者fanout on write,大作者fanout on read或混合。外部项目更新先进入缓冲队列限流和去重,不让供应商API超时直接阻断发本站帖子。
  4. 站内内容spam和冒充风险用rate limit、审核队列和身份标识处理;“有GitHub账号”不是内容真实性证明。按查询需求区分近期Feed与全文搜索。

手动走一遍

作者删私密项目相关帖子时,Feed缓存仍有ID,但读路径依据版本/权限不展示正文。外部API被限流,界面显示profile更新时间,站内发帖仍成功;后台重试不反复创建同项目通知。

规模与取舍

练习100万DAU、平均每人读20次为2000万读/日约231/s平均,峰值、Feed候选和对象字节另估。fanout成本取决于作者粉丝数,不靠DAU单独决定架构。

易错点与追问

容易失分的边界

  • 默认所有外部项目数据公开且可永久缓存。
  • 仅Feed删除事件到达后才保护隐私。
  • 外部API故障影响全部站内写操作。

继续深挖

  • 如何让用户解绑外部身份并删除相关token?
  • 明星作者突发发帖如何防写放大与读热点?
✓已复制微信号!