作者: Fenng
|
可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.dbanotes.net/arch/twitter_arch.html
Twitter 是我最近一段时间用的最多的网络服务之一.还记得刚开始有段时间发消息速度那叫一个慢. 难得的是 Twitter 的开发者在用户激增的情况下性能提升的不错, 据说,相比当初有 100 倍的性能提升
, 那我们就来看看他们都做了什么.(发现我这个 Blog 快成了 High Scalability
的中文镜像站了.)
是否真的是 100 倍性能提升, 大可不必较真, 但 Twitter 的一些经验是足以借鉴的.
Ruby on rails
似乎 Twitter 是用 RoR
开发的流量最大的站点(有待于求证). 开始使用DRb ("Distributed Ruby".), 该库可以通过 TCP/IP
从远程 Ruby 对象发送接收消息, 其缺点是不那么好用,并且没有冗余, 于是转向 Rinda
, Rinda 基于 DRb 开发, 使用简单. Twitter 也证明了 Ror 应用同样可以支撑比较繁忙的站点, 工具没有对于错,关键是否能运用好.
图片来源
. (这里面我非常疑惑的一点是据说只有两台DB(Master/Slave),可要支撑这么大的并发更新似乎有些难度.)
ETag
Twitter 对于Etag
的态度让不少人疑惑. 这恰恰是因技术制宜的一个体现, 因为 Etag 不是万能药
. 另外一点比较重要的原因是 Twitter 有超过 90% 的流量来自 API
, 而 多数 API
客户端不支持 Etag.
数据库方面的经验
尽可能的索引(Fenng补充:不要过度索引). 因为 RoR 应用的特殊性, 索引是在代码中向 DB 提交的. 另外一个值得议题的是,
反范式. 严格遵守范式是要吃苦头的.建立可行的测试方法,明确的知道你的SQL都在用什么方式运行.(另外,我有个疑问是 rails 不支持 2
阶段提交的吧?)
避免资源过度被占用
哪个站点都不避免的有"水葫芦用户"
,对于这样的 Spam 类型用户, 肯定会影响原有的应用处理资源. 该处理就要处理掉. 另一个方面,对于间歇性占用系统资源过多的进程用 Monit 处理.
另外一个很重要的环节是 Cache, 不废话了,没有好的Cache机制怕这样的站点不会成功的. (建议阅读车东
辛苦翻译的这篇面向站长和网站管理员的Web缓存加速指南[翻译]
). Twitter 运营的一个可取之处是能够积极听取社区的意见并改进, 同时社区上也有很多用户给他们提供了不少技术支持. 这也是开放而带来的好处吧.
分享到:
相关推荐
1. 网络架构设计:Twitter 的网络架构设计是基于自主设计和开源社区的网络技术,高效地提升集群性能,发布尽可能强的产品。 Twitter 的网络架构设计可以分为三个阶段:第一个阶段是将集群从第三方主机上迁出,第二个...
### Twitter系统架构设计分析 ...虽然这种架构在初期能够满足需求,但随着用户规模的增长,它逐渐暴露出扩展性和性能上的不足。为了应对这些挑战,Twitter需要对其系统架构进行优化或重构,引入更高级的技术解决方案。
【标题】:“Twitter性能优化”揭示了在大规模社交平台中如何进行系统性能提升的关键策略。这一主题涵盖了Twitter作为全球知名社交媒体公司,在面对海量用户数据和高并发访问时,如何通过技术手段实现系统的高效运行...
- 实际项目中的架构设计决策,例如Facebook的BigPipe、Twitter的Finagle等,揭示了大型网站如何应对高并发挑战。 以上内容只是《大型网站技术架构:核心原理与案例分析》一书的冰山一角,书中详细讨论了这些话题并...
支付宝钱包系统架构是基于分布式架构设计的,旨在提供高性能、可扩展、可靠的支付服务。该系统架构主要由以下几个部分组成: 1. 默认资金处理平台:负责处理用户的支付请求,包括交易处理、账户管理、风险控制等...
MySQL是Twitter存储推文的主要数据库,其开源、稳定且性能优秀的特点满足了Twitter的需求。Node.js则用于队列处理,确保推文可以快速写入数据库,避免阻塞服务器通道。 Twitter的工程师工具箱里包含了多种开源软件...
- **目的**:支持动态扩展和故障节点的替换,保证在线操作的同时不影响系统性能和可用性。 - **方法**:传统的拓扑转换方法往往耗时较长且容易出现全盘失败(all-or-nothing)的情况。新的方法则是增量式的拓扑迁移...
Yi Zhuang指出,目前的搜索引擎基础设施还仅由少数工程师和SRE支持,这意味着有巨大的空间可以通过技术创新和团队扩建来进一步提升搜索引擎的性能和可靠性。 综上所述,Twitter搜索引擎的演化不仅展示了如何应对...
10. **性能优化**:JavaQQ项目可能涉及到负载均衡、缓存策略(如Redis)、数据库索引优化等多个层面的性能提升措施,以确保服务的高效运行。 总的来说,JavaQQ项目源码是一个综合性的学习资源,涵盖了从网络编程、...
该资源是一个修复版的PHP源码,用于...通过深入研究这个修复版的PHP源码,开发者不仅可以学习到PHP语言本身的知识,还能了解到构建社交网络平台的完整流程和技术栈,对于提升PHP开发技能和理解Web应用架构有极大帮助。
Spring微服务架构是一种将大型应用程序拆分为小型、独立的服务的方法,每个服务都可以独立开发、部署和扩展,从而提高了灵活性和可维护性。 在Spring框架下,我们可以利用Spring Boot来快速构建微服务。Spring Boot...
### 扩展Twitter:从慢速到高效的关键步骤 #### 概述 “扩展Twitter”是一份关于如何针对高负载、大数据流量环境优化Twitter平台的技术资料。文档详细介绍了Twitter在成长过程中遇到的各种技术挑战以及应对策略。...
这篇分析将深入探讨Twitter的核心技术架构,以期为大型网站开发者提供宝贵的经验和启示。 一、分布式微服务架构 Twitter采用的是微服务架构,即将整个系统拆分为许多独立的小服务,每个服务都负责特定的功能,如...
3. **携程**:针对海量用户数据和高并发请求进行了应用架构的优化,提升了用户体验。 #### 六、总结 构建一个高效、可靠的大数据平台是一项复杂且持续的过程。它不仅需要选择合适的技术栈,还需要关注数据的采集、...
它主要关注视图层,但也可以与其他库或框架结合使用,形成完整的MVC架构。React的核心理念是组件化,允许开发者将UI拆分成独立、可重用的组件,每个组件都有自己的状态和属性。 【组件化编程】 在React中,组件是...
7. **性能优化**:关注应用的启动速度、内存占用和电量消耗,优化图片加载、数据同步策略,提升整体性能。 通过深入研究TL-SocialNetLib和TweetLanes,开发者不仅可以掌握Twitter客户端的基本开发流程,还能学习到...
- **配套项目**:为了进一步提升MetaQ的易用性和扩展性,支付宝团队还开发了一系列配套项目,包括Python客户端、Twitter Storm的Spout、Tail4j等工具。 ### 总结 通过上述分析可以看出,支付宝钱包系统的架构设计...
- **分层缓存架构**:构建一个层次化的缓存体系,从操作系统层面到应用层再到客户端,每一层都尽可能地利用缓存技术来提升性能。 #### 五、案例分析 以JavaEye网站为例,该网站每天处理超过300万次的Rails动态请求...