我刚看到让我想到的热闹的"The Rise and Fall of Twitter":
如果你重新实现推特,你会采取哪些不同的做法?
您会使用哪些技术?什么语言?
您如何确保服务可扩展?
你还会改变什么?
答案 0 :(得分:4)
我会在GAE上实现它,就像这样:
每个用户都会有一个表格,其中包含他们关注的人的推文。该表将由(用户,时间戳降序)键入。
每个用户还有一个follower_ranges表,它将用户映射到一组连续的跟随者ID范围。对于大多数只有几千个粉丝的用户,这个表只有一个条目(-inf .. + inf);这将是隐含的默认值。对于拥有更多关注者的用户,表中的每个范围将有几千个用户。范围将随时间平衡,以使每个用户的数量保持在某个间隔内,例如,大于1000,小于10000.所有范围的并集将包括所有用户ID。
每当用户 - >创建了跟随者操作,它被编码为动作并添加到队列中。队列中的每个元素都是(发送者,动作,有效负载,跟随者子范围)元组。队列工作者获取一个项目,找到给定子范围内的所有关注者,并将操作应用于每个项目。 (请注意,操作可以是“添加推文”,“删除推文”,“编辑推文”等。基本上任何需要应用于所有关注者的内容。)
将队列操作应用于每个关注者将涉及向每个用户的推文表发出相应的写入和删除。队列的障碍意味着写入不会立即出现,但应该可以将延迟保持在几秒钟之内。
向用户展示他们的推文将是一个廉价的操作:“SELECT * FROM推文WHERE user_id =:user_id ORDER BY(created_at DESC)LIMIT:max_per_page”。这将扫描单个表,并且是一个非常快速的操作。 (保持用户阻塞延迟很好!)
我认为这种设计最初可以很好地扩展。现在可以轻松扩展系统的每个组件:
那就是说,我可以想到一些我将立即研究的未来改进:
答案 1 :(得分:2)
它已经完成:Laconica
答案 2 :(得分:1)
答案 3 :(得分:0)
我将从回去再做一次的前提开始:我会做什么不同的,那时我是不是在推特?
不是一件事。
Twitter始终关注重要事项:提供人们实际想要使用的服务。
我很乐意研发一款在如此短的时间内变得如此受欢迎的产品,其最大的威胁成为其自身的可扩展性。这意味着你赢了。成功的是资源和注意力,以利用成功。
答案 4 :(得分:-3)
我会从一开始就设计它像地狱一样可扩展。
我的选择是微软平台,C#,IIS,SQL Server,Memcached(如果它是最终版本的Velocity,当我开始时运行良好;-)