文/Patrick Joyce译/杨昊
由于之前爆发的一些问题,大家产生了对Twitter的成见。并不是说对Rails进行增容很难,实际上针对基于Rails的网站进行增容并不是问题所在,对所有的网站来讲,增容从来都不是一个容易的问题。
Twitter的故事
Twitter源自于ODEO公司的一个小的分支项目,它是Jack Dorsey提出的,并且成为了世界上最大的Rails应用。Jack Dorsey 对AIM的状态消息十分着迷。问题在于,如果想把消息发到世界的各个角度,你必须得坐在电脑前面。
Twitter自去年三月发布之后访问量少得可怜,直到去年的西南偏南音乐节,大家都能从大屏幕上看到Twitter的使用过程,自此之后一下火了起来,访问量骤增。然后又平静了一阵。接着媒体技术粉墨登场,又掀起了一股热潮。
所以,你该怎样面对这些呢?
l 更多的主机—仍旧是一个包含主/从副本的数据库
l Joyent网站提供的具有32个CPU核的SUN主机
l 横跨19个CPU核的120个mongrel实例
l 横跨16个CPU核的消息处理
l 横跨2核的Jabber服务实例
l 一个构建于8核主机之上的MySQL实例
l 16GB以上的memcache应用
为何需要这些呢?
l 平均每秒200-300的连接数量
l 高峰期每秒800个连接
l 它们处理了11000个连接
l MySQL每秒处理2400个
l Alexe(有所保留地)说他们有着巨大的流量,那还没计算占用了很大流量的API访问。在他们最新的一次测试中通过API的流量访问是web流量的20倍
而配备了cache_fu与acts_as_cached这两个Rails插件的Memcache成了他们的救星。此外,他们还使用扩展了的cache_stats插件获取状态。
他们写了一个自定义的API缓存插件,在执行过滤之前和之后完成自定义操作。他们打算共享抽取出来的缓存。如何使缓存失效是这样做的一个难点。他们既做基于时间的过期限制,也做事件驱动的过期限制。
在数据库设计方面,诸如一些ID列表之类,他们采取了反正规化(denormalize)的方式。通过对id列表进行缓存,这样避免了数据库中的连接操作,这为他们减轻了许多数据库方面的压力。
他们与Gmail的创建人Paul Buchheit在处理系统缓存时,如何构建一个健壮的分布式队列。因为此前他们的架构工作做的有些过多了。一秒钟会有多少条消息呢?9条。6个月的时间里又能有多少?这个系数是10。只要将他们扔到磁盘里面进行处理就好了。
他们希望能够开放队列系统的源代码。它是基于memecache系统的。通过memcache,任何消息都可以加入到队列中,并使用memcache客户端进行访问。
他们所做的最有帮助的事情之一,就是与社区之间的讨论和互动。你不能总猫在你的办公室。社区能够提供很多帮助。和他们进行讨论,你可以得到众多的顾问。社区中有太多优秀的人了,你没有理由不去借助他们的帮助。
问答环节
问:对于缓存中的事件驱动失效机制,其相关的逻辑是放在什么地方的?在Mongrel里面?还是在Rails和XMPP的集成里面?
答:是放在Jabber服务器中,它可以将这些以Ruby写就的处理客户端完全隔离开来。
问:他们打算什么时候加入分区机制?如何处理用户间的随机关系?
答:用户不是关键。他们仍未进行分区的原因是,他们想要基于时间进行划分,因为大多数请求从时间上看是本地的。他们计划在未来3到4个月里做这件事情。Oracle完成了这工作,但Alex说他宁肯把自己的帽子吃掉,也决不会去买oracle的许可证。所以当他们解决了之后就会推出来。
试着尽量发现如何高效地开展开源工作,并努力去多做一些。
问:你的商业模式是什么?计划如何赚钱?
答:每个人都在问这个问题。简单点回答就是下一个问题(大笑)。他们有一些想法,这些聪明人们正在做一些事情。它一定能够让大家耳目一新。
问:他们有多少eJabberd节点?
答:很多,多得令人吃惊。
问:在eJabberd和rail用户之间进行同步会有问题吗?
答:不会。
问:有了所有这些mongrel,你们是如何完成部署并保证全部正常运行的?
答:他们希望从观众中得到建议。他们付出了很多努力,做了复查和改进。如果你在他们进行部署的时候是连接着的,你会与500个用户相联。这是很惊人的。他们仍没有一个很好的办法来解决这个。对于Mongrel中的队列,他们由Ezra的一个讲演中受到了启发。
问:这么说当你重启的时候你便杀掉了所有的mongrel进程,或是作了一次“回滚”?有些公司就是采取了回滚的方式来解决问题。
答:他们关掉了所有进程,因为队列在mongrel之中,若他们那样做就会填满了所有队列。他们这样尝试过,但得到的结果却是乱七八糟的。
问:怎样看待“Twitter是愚蠢的,因为他们没有采用ETag”这种说法?
答:他们确实在用ETag,但并不起作用,因为它们在末尾有一个显示消息请求时间的时间戳。Web流量的分块小得足以将其忽略不计了。Yahoo高性能小组(High Performance group)在演示中提到了它是无关紧要的。
问:ETag不会对API缓存有帮助吗?
答:只有在客户端执行它们时才可以,大多数情况下是没有帮助的。
问:下一步目标?
答:回调API有很大潜力。第三方的开发人员在打算做这件事。让我们期待着把。
我们热爱XMPP,并在和Jabber社区的人们一起努力通过一些很cool的新方法来使用Jabber以推进其发展。
分享到:
相关推荐
MapReduce虽然提供了容错和扩容的能力,但其批量处理方式不利于实时性,因此有人尝试将其转换为小批量处理,但这会带来新的复杂性和性能权衡。 为了适应流式处理,MapReduce需要转化为Pipeline模式,即将处理过程...
- **Google MillWheel**:容错流处理框架。 - **Pydoop**:Python接口,用于Hadoop的MapReduce和HDFS操作。 - **Rackerlabs Blueflood**:多租户分布式度量处理系统。 - **Stratosphere**:通用的集群计算框架。...
- **Cassandra早期问题**:缺少虚拟节点(vNode)导致扩容困难;Gossip协议在大规模集群中可能导致一致性问题,难以管理。 - **Manhattan关注点**:可靠性、可用性、可操作性、低延迟以及开发效率。 - **存储引擎...
- **社交分享**:支持将美化后的照片通过Facebook和Twitter等社交平台与朋友分享。 #### 四、ALSee——进阶图像编辑程序 **ALSee**是一款功能全面的图像编辑软件,尤其适合追求高质量图片处理效果的用户。除了基础...
1. 实时分析:通过流计算技术(如Twitter的Storm和Yahoo的S4),可以实时处理和分析数据,满足快速决策的需求。 2. 数据挖掘:运用关联规则分析、分类和聚类等方法,从大量数据中挖掘有价值的信息。 3. 预测模型:...
在2022年的社交媒体上,美容品牌竞争激烈,这份报告详细分析了100个在Instagram、Facebook、Twitter和新兴平台TikTok上表现最佳的美容品牌。这份报告覆盖了2021年1月1日至12月31日的数据,包括667百万个帖子、131万...
传统数据库管理系统在面对TB级别的数据和非结构化数据时显得力不从心,而大数据一体机通过引入如Hadoop(MapReduce技术)和流计算框架(如Twitter的Storm和Yahoo的S4)来应对这些挑战。此外,实时处理能力是区分...
这需要对现有的数据库管理和分析技术进行创新和优化,如引入Hadoop的MapReduce技术来处理大规模数据,以及采用流计算框架如Twitter的Storm和Yahoo的S4来实现实时分析。 【应用分析】 大数据分析一体机广泛应用于...
随着社交网络的兴起,如Facebook、MySpace、Twitter和国内的开心网、人人网等,互联网正经历从“人与机器”到“人与人”交流的转变。这些社交网络平台验证了“六度分隔理论”,用户数量庞大,形成了复杂的社交网络...
【Lambda架构】是一种针对实时大数据处理的框架,由Nathan Marz提出,他在Twitter工作期间开发了著名的实时处理框架Storm,并基于实践经验提炼出Lambda架构。该架构的主要目标是实现高容错、低延时和可扩展性,适用...
- **ID生成算法**:参考Twitter的Snowflake算法,结合系统时间戳、机器号以及自增序号三部分信息生成订单ID。时间戳采用毫秒级别,确保了时间上的唯一性;机器号为每台订单服务器分配的唯一编号;自增序号则是在同一...
2. **Bootstrap框架**:Bootstrap是Twitter开发的一款开源前端框架,它简化了网页设计和开发过程,提供了响应式布局、预定义的组件和JavaScript插件,使网站能在不同屏幕尺寸下自动调整布局,适应手机、平板和桌面...
2. **Snowflake**:由Twitter提出的ID生成算法,基于时间戳、机器标识和序列号,生成的ID趋势递增,性能高,但依赖时钟且对时钟回拨敏感。 3. **数据库生成**:如MySQL的自增ID,简单可靠,但单点性能瓶颈明显,可...
采用了类似Twitter的Snowflake算法,订单ID由三部分组成:毫秒级时间戳、服务器唯一编号和自增序号。时间戳记录创建时间,服务器编号区分不同的订单服务器,自增序号在同一毫秒内递增,确保在同一服务器上的多请求仍...
Redis 作为一款高性能的键值存储系统,在处理大量热点数据的缓存场景中表现出色。随着数据量的增长,单个 Redis 实例的存储能力可能无法满足需求,这时就需要引入集群方案来实现动态扩展和高可用性。本文将讨论四种...
同时,后端会与数据库进行交互,处理数据的增删改查操作。 3. **数据库设计**:在女性资讯网站中,数据库通常包含文章、用户信息、评论、分类等多个表。MySQL、PostgreSQL、MongoDB等数据库管理系统常被用来存储...
相比之下,Codis提供了一个图形化的界面,简化了扩容,但因为使用代理仍会影响性能,组件多,需要更多的机器资源,而且它的改动使得与Redis官方同步变得困难。 在选择最佳实践时,应根据具体业务场景来决定。例如,...