《设计可伸缩的Twitter》原文见
http://natishalom.typepad.com/nati_shaloms_blog/2009/04/writing-your-own-scalable-twitter.html
期待有人翻译为中文。下面是我的中文摘要。
twitter的可伸缩性挑战
1、消息风暴问题。tweets、re-tweets,海量的消息如何处理。
2、阅读tweets问题。众多的用户同时阅读。
设计可伸缩的twitter:
选择正确的可伸缩性模式。
分区模式作为核心设计原则。
twitter是以数据库为中心设计(大多数web应用是这种模式)与以消息为中心设计的结合。
黑板模式适用于这一场景。
分区模式和黑板模式作为可伸缩twitter应用的基石。
可伸缩性需求
Tweet容量:每天100亿tweets
Tweet存储:每天100G(按10:1压缩)
其他假设:每条tweet最多140个字符、tweet不可更改(只能增、删)、限制客户端应用每小时只能发70次请求
使用内存数据网格In-Memory Data Grid (IMDG)作为黑板系统
将数据存到内存里,避免磁盘I/O
在memcached和IMDG两者中选择IMDG
memcached 读最多时选用比较好。不支持失败恢复、缺乏高可用性。使用memcached,必须以db作为后端,每次发表tweet, 必须同步写到memcached和db。读访问可伸缩性足够了,写和更新可伸缩性受限。
IMDG是设计来处理读/写场景。仍然可以用db来做长久的持久化,但因为IMDG已经负责在内存维护可靠性,可以异步更新db,避免db瓶颈。
设计分区架构
设计任何类型分区集群的主要考虑之一就是确定分区Key
twitter选用user-id作为分区Key
数据容量分析
全部数据都放到内存经济上不可行。所以IMDG只是作为缓存。实时搜索的数据(24小时内)会加载到内存。其他数据从db取。需要10台服务器,每台在内存保留10G数据。
选择正确的回收策略
采用基于时间的回收策略-内存里保留最新的数据。
tweet写的可伸缩性
通过@SpaceRouting指定路由属性
web前端直接调用space.write( new Tweet(..),..) 就可以发送tweets
space proxy隐藏了路由到不同分区的复杂性
tweet读的可伸缩性
黑板模式
所有东西都写到黑板上,followers可以读
SELECT * FROM Post WHERE UserID=<id> AND PostedOn > <from date>.
因为按user-id分区,通过mapreduce模式来找到所有follow的用户,进而查找那些用户的更新。在GigaSpaces中通过分布式任务api达到这一目的。
Web前端的可伸缩性
web应用<->IMDG代理(load-balancer<->web服务器集群)<->IMDG实例
保持web层的无状态,避免会话粘性
SNA
使用云计算,简单又省钱
分享到:
相关推荐
Designing Data-Intensive Applications 中文 epub 版本
《界面设计模式》(Designing Interfaces) 第二版是一本关于如何创建易于使用的用户界面的指南,作者Jenifer Tidwell通过详细的描述和案例分析,提供了一系列设计模式以帮助设计师构建更直观、更有效、更吸引人的界面...
1.Designing Data-Intensive Applications The Big Ideas Behind Reliable Scalable And Maintainable Systems 2017; 2.英文原版,PDF格式; 3.内容简介: If you develop applications that have some kind of server/...
Designing Distributed Systems Patterns and Paradigms for Scalable, Reliable Services 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
《设计中的设计》是日本著名设计师原研哉的一部重要著作,书中全面展示了他对设计的深入思考和独特见解。这本书不仅是设计师的专业读物,也是任何对美学、创新思维和生活艺术感兴趣的人的宝贵资源。原研哉作为无印...
在本文中,作者探讨了如何通过结合MPI(Message Passing Interface)和OpenSHMEM这两种编程模型来设计可扩展的Graph500基准测试。 MPI是科学并行应用程序的事实标准,它提供了诸如非阻塞、单边通信等吸引人的特性,...
英文文章名:Designing a Wireless Network 毕业设计中要求交一篇有关本专业的中英文翻译,翻译了其中一章(第五章)
Designing.Data-Intensive.Applications 设计数据密集型应用 详细阐述了分笔试系统的理论基础通俗易懂 看完之后再去学习hadoop hive hbase kafka将加深你的理解 加速阅读效率 下载压缩包用chrome打开html文件 右键...
《70-443:使用Microsoft SQL Server 2005设计数据库服务器基础设施》是针对微软认证的一项专业考试,旨在考察考生在SQL Server 2005环境下设计高效、可靠且可扩展的数据库服务器架构的能力。这个考试涵盖了一系列...
Designing Software Architectures A Practical Approach 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
全面介绍CMOS和双极性模拟IC设计。 假定没有线性设计的先验知识,因此对于具有非模拟背景的工程师而言是可以理解的。
综上所述,“Designing Interactions”的第二章不仅讲述了个人电脑桌面设计的起源和发展,还深入探讨了苹果Macintosh和Lisa、苹果鼠标、微软鼠标的设计故事。这些案例展示了设计者如何通过不断的创新和技术进步来...
《Designing Interactions》是2006年MIT Press (MA)出版的图书,作者是Bill Moggridge。 Language: English Pages: 791 英文完整清晰版
Designing Software Architectures A Practical Approach 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
《边缘世界(RimWorld)》的作者Tynan Sylvester出品了一本名为《Designing Games》的游戏设计指南,为读者提供了详细的游戏设计知识。尽管只提供了部分内容,但仍然能从中提取出一些关键知识点。 首先,Tynan ...
### 并行化游戏引擎的设计相关知识点 #### 一、引言 随着多核心处理器的广泛应用,游戏开发者面临着如何充分利用这些处理器性能以提高游戏体验的新挑战。传统的游戏引擎设计往往侧重于图形处理单元(Graphics ...
Designing Distributed Systems.epub 设计分布式系统 建议只用edge浏览器进行阅读
Qualities of a great application 8 How Do You Design the Obvious? 10 Turn qualities into goals 10 The Framework for Obvious Design 12 Know what to build 14 Know what makes it great 14 Know the ...