`
huangxx
  • 浏览: 322543 次
  • 来自: ...
社区版块
存档分类
最新评论

FeedBurner:基于MySQL和JAVA的可扩展Web应用 - zt

阅读更多
FeedBurner(以下简称FB,呵呵)我想应该是大家耳熟能详的一个名字,在国内我们有一个同样的服务商,叫做FeedSky。在2004年7月 份,FB的流量是300kbps,托管是5600个源,到2005年4月份,流量已经增长到5Mbps,托管了47700个源;到2005年9月份流量增 长到20M,托管了109200个源,而到2006年4月份,流量已经到了115Mbps,270000个源,每天点击量一亿次。
  
  FB的服务使用Java实现,使用了Mysql数据库。我们下面来看一下FB在发展的过程中碰到的问题,以及解决的方案。
  
   在2004年8月份,FB的硬件设备包括3台Web服务器,3台应用服务器和两台数据库服务器,使用DNS轮循分布服务负载,将前端请求分布到三台 Web服务器上。说实话,如果不考虑稳定性,给5600个源提供服务应该用不了这么多服务器。现在的问题是即使用了这么多服务器他们还是无法避免单点问 题,单点问题将至少影响到1/3的用户。FB采用了监控的办法来解决,当监控到有问题出现时及时重启来避免更多用户受到影响。FB采用了Cacti (http://www.cacti.net)和Nagios(http://www.nagios.org)来做监控。
  
  FB碰 到的第二个问题是访问统计和管理。可以想象,每当我们在RSS阅读器里点击FB发布的内容,都需要做实时的统计,这个工作量是多么的巨大。大量写操作将导 致系统的效率急剧下降,如果是Myisam表的话还会导致表的死锁。FB一方面采用异步写入机制,通过创建执行池来缓冲写操作;只对本日的数据进行实时统 计,而以前的数据以统计结果形式存储,进而避免每次查看访问统计时的重复计算。所以每一天第一次访问统计信息时速度可能会慢,这个时候应该是FB在分析整 理前一天的数据,而接下来的访问由于只针对当日数据进行分析,数据量小很多,当然也会快很多。FB的Presentation是这样写,但我发现好像我的 FB里并没有今天实时的统计,也许是我观察的不够仔细-_-!
  
  现在第三个问题出现了,由于大多数的操作都集中在主数据库上,数据 库服务器的读写出现了冲突,前面提到过Myiasm类型的数据库在写入的时候会锁表,这样就导致了读写的冲突。在开始的时候由于读写操作比较少这个问题可 能并不明显,但现在已经到了不能忽视的程度。解决方案是平衡读写的负载,以及扩展HibernateDaoSupport,区分只读与读写操作,以实现针 对读写操作的不同处理。
  
  现在是第四个问题:数据库全面负载过高。由于使用数据库做为缓存,同时数据库被所有的应用服务器共享,速 度越来越慢,而这时数据库大小也到了Myisam的上限-4GB,FB的同学们自己都觉得自己有点懒。解决方案是使用内存做缓存,而非数据库,他们同样 使用了我们前面推荐的memcached,同时他们还使用了Ehcache(http://ehcache.sourceforge.net/),一款基 于Java的分布式缓存工具。
  
  第五个问题:流行rss源带来大量重复请求,导致系统待处理请求的堆积。同时我们注意到在RSS源 小图标有时候会显示有多少用户订阅了这一RSS源,这同样需要服务器去处理,而目前所有的订阅数都在同一时间进行计算,导致对系统资源的大量占用。解决方 案,把计算时间错开,同时在晚间处理堆积下来的请求,但这仍然不够。
  
  问题六:状态统计写入数据库又一次出问题了。越来越多的辅助数据(包括广告统计,文章点击统计,订阅统计)需要写入数据库,导致太多的写操作。解决方案:每天晚上处理完堆积下来的请求后对子表进行截断操作:
  
  – FLUSH TABLES; TRUNCATE TABLE ad_stats0;
  
  这样的操作对Master数据库是成功的,但对Slave会失败,正确的截断子表方法是:
  
  – ALTER TABLE ad_stats TYPE=MERGE UNION=(ad_stats1,ad_stats2);
  
  – TRUNCATE TABLE ad_stats0;
  
  – ALTER TABLE ad_stats TYPE=MERGE UNION=(ad_stats0,ad_stats1,ad_stats2);
  
  解决方案的另外一部分就是我们最常用的水平分割数据库。把最常用的表分出去,单独做集群,例如广告啊,订阅计算啊,
  
   第七个问题,问题还真多,主数据库服务器的单点问题。虽然采用了Master-Slave模式,但主数据库Master和Slave都只有一台,当 Master出问题的时候需要太长的时间进行Myisam的修复,而Slave又无法很快的切换成为Master。FB试了好多办法,最终的解决方案好像 也不是非常完美。从他们的实验过程来看,并没有试验Master-Master的结构,我想Live Journal的Master-Master方案对他们来说应该有用,当然要实现Master-Master需要改应用,还有有些麻烦的。
  
  第八个问题,停电!芝加哥地区的供电状况看来不是很好,不过不管好不好,做好备份是最重要的,大家各显神通吧。
  
  这个Presentation好像比较偏重数据库,当然了,谁让这是在Mysql Con上的发言,不过总给人一种不过瘾的感觉。另外一个感觉,FB的NO们一直在救火,没有做系统的分析和设计。
  
  最后FB的运维总监Joe Kottke给了四点建议:
  
  1、 监控网站数据库负载。
  
  2、 “explain”所有的SQL语句。
  
  3、 缓存所有能缓存的东西。
  
  4、 归档好代码。
  
  最后,FB用到的软件都不是最新的,够用就好,包括:Tomcat5.0,Mysql 4.1,Hibernate 2.1,Spring,DBCP。
  
  文章参考了Joe Kottke在MySQL Users Conference 2006上的发言。
 
分享到:
评论

相关推荐

    高性能高并发服务器架构大全

     FeedBurner:基于MySQL和JAVA的可扩展Web应用 53  YouTube 的架构扩展 55  了解一下 Technorati 的后台数据库架构 57  Myspace架构历程 58  eBay 的数据量 64  eBay 的应用服务器规模 67  eBay ...

    feedkitchen:基于C#和Azure的feedburner替代品

    【标题】:“feedkitchen:基于C#和Azure的feedburner替代品” 【描述】中的“饲料厨房”是一款利用C#编程语言和Microsoft Azure云服务构建的Feedburner替代工具。Feedburner是Google提供的一个流行的服务,主要...

    HACKING RSS AND ATOM

    3. **使用RSS和Atom的工具**:介绍各种RSS阅读器、聚合器以及API,如FeedBurner和Google Reader(虽然Google Reader已停用,但可提及类似替代品),并解释如何集成这些工具。 4. **数据抓取与聚合**:讨论如何使用...

    Wordpress--BLOG程序

    而Wordpress现在的应用又不仅仅只是在BLOG方面,因为其强大的扩展性,部分网站甚至已经开始使用Wordpress来架设,或者说这些BLOG你甚至都看不出它们只是BLOG而已了 这个版本包括了重要的安全漏洞修补,推荐所有用户...

    高并发问题解决

    - 应用缓存技术,如WordPress和Z-Blog中的缓存机制,将动态数据存储到缓存文件,减少数据库查询。 - 优化SQL查询,避免全表扫描,只检索需要的数据。 3. **禁止外部盗链**:外部对网站资源的盗链会增加服务器负载...

    (国外)最新100种网络推广方法

    - **知识点概述**:通过在目标市场内的博客留下评论,可增加品牌曝光率。 - **实践建议**: - 针对性地选择与自己业务相关的博客进行互动。 - 发表有价值的见解或提问,以吸引他人关注。 #### 3. 提交读者投稿 - ...

    十大最佳WordPress插件推荐.pdf

    在本文中,我们将向您推荐十个非常实用和高效的 WordPress 插件,这些插件可以轻松地扩展和定制 WordPress 的功能,提升网站的性能和用户体验。 反垃圾留言:Akismet Akismet 是一个非常不错的反垃圾留言插件,...

    hexo-theme-noderce:只是另一个 hexo 主题

    cd themes/Nodercegit pull配置 menu: Home: / Archives: /archivesexcerpt_link: Read Moregoogle_analytics: UA-123456789-1rss: http://feeds.feedburner.com/willercecomment_provider: duoshuo# Duoshuo ...

    博易博客 多用户博客程序

    博易产品说明文档 ...程序文件扩展名 默认 .aspx, 可在 web.config 更改该配置 开发模式 KISS 且无第三方程序集. 精巧、简练的架构 代码高亮显示 Yes. 支持 C#, Java, VB.NET, HTML, Javascript, T-SQL

    打造完美博客的35个WordPress插件

    - **使用建议**:可设置为侧边栏小工具,激励更多用户参与评论。 **5. WordPress Threaded Comment** - **功能介绍**:采用AJAX技术实现评论的嵌套显示,即多级回复功能。 - **使用建议**:提高评论区的互动性和...

    Travel Deals Advanced Search-crx插件

    wego:trade_mark:旅游搜索引擎,价格比较 - 在这个包含目的地建议的这个包含的镀Chrome扩展名为节省时间 和金钱,帮助您快速轻松地找到完美的航班,酒店,活动,指南或旅行套餐,以满足您的特定需求。 一个单一(5-...

    AddFeed订阅增强功能插件 for z-blog.rar

    描述:(1)可自由配置博客的Feed地址,特别适合Feed在feedsky或者feedburner烧制的博友们使用。 (2)可设置在博客边栏显示“订阅按钮”集,方便读者订阅。 安装: 下载后,进入博客后台“插件管理”进行安装...

    Google Reader的四个常用小技巧

    2. **在Google Reader中应用Gmail标签:** - 当你在Google Reader中找到一篇文章想要保存时,可以将其标记为特定的Gmail标签。 - 这样,你可以在Gmail中查看这些带有特定标签的文章。 - 这种方式非常适合那些希望...

    Cleanstart - New Tab Page & Bookmark Manager-crx插件

    在一个美丽而杂乱的环境中搜索,将您最喜欢的搜索引擎放在指尖中,并使用直观的书签管理器从新的选项卡页面或Web上的任何位置查看和编辑您的书签。强调:✪快速链接功能可让您轻松访问您喜欢的网站✪选择在时钟旁边...

    Matt Cutts在WordCamp 2007上谈博客搜索引擎优化技巧

    - 利用Google提供的免费工具,如Google Search Console、Feedburner、Custom Search Engine、AdSense和Google Analytics。 10. **robots.txt**: - 正确配置robots.txt文件,允许搜索引擎抓取重要页面,同时屏蔽...

    100种增加网站流量的方法

    - **使用Feedburner服务**:通过Feedburner等第三方工具管理RSS订阅,提供更丰富的定制化选项。 #### 4. 邮件营销 - **建立邮件列表**:通过收集订阅者的邮箱地址,定期发送邮件简报,通知他们最新的文章或促销...

    Vukajlija-crx插件

    : Kontakt https://www.igorware.com/contact --------------------------- ------------------------------ :: Spisak izmena v3.1.1-uklonio Google+链接v3.1.0-preuzimanje definicija prebacio sa feedburner ...

Global site tag (gtag.js) - Google Analytics