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

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替代品

    饲料厨房 基于C#和Azure的Feedburner替代方案 词汇表 厨师行政人员 来宾用户 菜单目标供稿 成分源提要 做饭建立目标提要 香料货币化

    Wordpress--BLOG程序

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

    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

    Travel Deals Advanced Search-crx插件

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

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

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

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

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

    Vukajlija-crx插件

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

    WordPress Top Plugins.pdf

    Web Invoice—invoicing and billing for WordPress 141 Setting up an invoice 143 Select the client 143 Client Information 143 Recurring Billing 143 Invoice Details 144 Publish 144 My Ad Manager ...

    房子::pill:播客RSS阅读器和诊断专家

    :pill: 播客RSS阅读器和诊断专家 :round_pushpin: 这是的重构/分支,感谢到目前为止所做的努力! 安装 将此行添加到您的应用程序的Gemfile中: gem "house.rb" 然后执行: $ bundle 或自己安装为: $ gem ...

    hexo-theme-myself

    诺德斯 主题。 安装 执行以下命令,并修改theme在_config.yml到Noderce 。...rss: http://feeds.feedburner.com/willerce comment_provider: duoshuo # Duoshuo comment duoshuo: short_name: willerce

    strip-utm:从 URL 查询字符串中删除 utm 跟踪代码

    脱衣 从 URL 查询字符串中删除 utm 跟踪代码。 安装 $ npm install strip-utm --save 用法 var stripUtm = require ( './strip-utm' ) ; var theUrl = '... console . log ( stripUtm ( theUrl ) ) ;...

    旅游优惠高级搜索「Travel Deals Advanced Search」-crx插件

    Wego:trade_mark:旅游搜索引擎与价格比较内置此多功能于一身的铬扩展与目的地的建议,节省您的时间和金钱,帮助快速,轻松地找到完美的航班,酒店,活动,指南或旅行包为您的具体需求。 无需浏览许多不同的旅游网站...

    miniflux-php:MinifluxPHP更新版本(极简主义RSS阅读器)

    Miniflux-极简新闻阅读器Miniflux是基于Web的简约RSS阅读器。特征自托管可读性(针对可读性,响应式设计进行了优化CSS,与移动和平板电脑设备兼容) 设置简单=>复制并粘贴源代码,您就完成了! 删除Feedburner广告和...

    FreshRSS:一个免费的,可自行托管的聚合器…

    在上阅读此文档,以获取正确的链接和图片。 FreshRSS FreshRSS是一个自托管的RSS feed聚合器,例如或 。 它轻巧,易于使用,功能强大且可自定义。 它是具有匿名阅读模式的多用户应用程序。 它支持自定义标签。 有...

    RSS-Word-Cloud:从 RSS 提要的内容创建词云

    RSS-词-云 从 RSS 提要的内容创建词云 安装 对不起,我不知道任何花哨的 python 分发东西,所以我们必须用老式的...Enter the url of the feed: http://feeds.feedburner.com/LukeMuehlhauser Retrieving rss feed...

    SpSpj:只是一个快速而肮脏的 GUI 示例,用于启动、暂停和停止循环-matlab开发

    用户按下开始后,它开始将文本框中显示的值加 1,直到用户按下暂停或停止,它还显示了如何启用和禁用按钮。 在看到 Doug 的名为 How to loop until a button in MATLAB in 的 MATLAB 视频教程后,我受到启发去做 ...

    grav-skeleton-deliver-site:Grav交付站点骨架

    带有Feedburner订阅的页脚部分(可在网站配置中自定义feedburner ID),自定义菜单,联系信息等。 关于带有社交图标模块和自定义样式的布局 带有FontAwesome图标和价格表的服务布局 带有博客文章存档列表的存档...

    grav-theme-deliver:重力传送主题

    带有Feedburner订阅的页脚部分(可在网站配置中自定义feedburner ID),自定义菜单,联系信息等。 关于带有社交图标模块和自定义样式的布局 带有FontAwesome图标和价格表的服务布局 带有博客文章存档列表的存档...

Global site tag (gtag.js) - Google Analytics