我刚看到搞笑"The Rise and Fall of Twitter"这让我觉得:如果你重新实现twitter,你会做什么不同?
如果你重新实现twitter,你会做什么不同?
您会使用哪些技术?什么语言?
如何确保服务可扩展?
你还会改变什么?
我刚看到搞笑"The Rise and Fall of Twitter"这让我觉得:如果你重新实现twitter,你会做什么不同?
如果你重新实现twitter,你会做什么不同?
您会使用哪些技术?什么语言?
如何确保服务可扩展?
你还会改变什么?
我会实现它在GAE上,像这样:
每个用户都将有一个包含他们关注的人的鸣叫的表。这个表格将被键入(用户,时间戳降序)。
每个用户还有一个follower_ranges表,它将用户映射到一组连续的跟随者id范围。对于只有几千名粉丝的大多数用户来说,这张表会有一个条目(-inf .. + inf);这将是默认的默认值。对于拥有更多追随者的用户而言,表格中的每个范围都有几千个用户。范围将随时间平衡以保持每个用户在某个时间间隔内的用户数量,例如,大于1000,小于10000.所有范围的联合将包括所有用户ID。
无论何时创建用户 - >追随者操作,它都会被编码为一个操作并添加到队列中。队列中的每个元素都是(发送者,操作,有效负载,跟随者子范围)元组。队列工作者需要一个项目,找到给定子范围内的所有追随者,并将这个动作应用到他们中的每一个。 (请注意,该动作可以是“添加推文”,“删除推文”,“编辑推文”等。基本上任何需要应用于所有追随者的内容。)
将队列动作应用到每个跟随者将涉及到发出相应的写入和删除到每个用户的推文表。队列的障碍将意味着写入不会立即出现,但应该可以将延迟保持在几秒钟之内。
向用户显示他们的推文将是一个便宜的操作:“SELECT * FROM tweets WHERE user_id =:user_id ORDER BY(created_at DESC)LIMIT:max_per_page”。这将扫描一张表,并且是一个非常快速的操作。 (保持用户阻塞延迟很好!)
我认为这个设计最初会比较好。该系统的每个部件现在可以容易地按比例增加:
这么说,我能想到的一对夫妇未来的改进我会考虑立刻道:
它已经正在做:Laconica
我设计它可扩展像是刚刚从一开始地狱。
我的选择将是微软平台,C#,IIS,SQL服务器,Memcached的(或速度,如果它是终局的,运行很好,当我开始;-)
我打算从回去做一遍的前提开始:我会做什么不同的,是我在twitter上当时
没有的事
? Twitter的维持要紧的重点:提供服务,这人居然想使用
我很想上变得如此受欢迎,在这样短的时间周期,其最大的威胁变成了自己的可扩展性的产品配合使用这意味着你赢了,成功来自资源和意图利用成功。
Twitter难以缩放的原因是他们使用SQL。使用SQL意味着你将需要分割或分割数据库以扩展。这对于Twitter的用例来说效果不佳,而且,如果您使用SQL Server,则必须在每台机器上支付新许可证。 – 0124816 2008-09-18 03:47:14
你说得对,问题在于他们使用SQL,而不是SQL本身,以及为了帮助你开展业务而付出的钱有什么问题?你认为在MS平台上运行像Twitter这样的应用程序是不可能的吗?确实如此。 – JRoppert 2008-09-27 16:13:18