说说 JavaEye 网站架构

news/2024/5/19 10:01:52/文章来源:https://blog.csdn.net/u013800446/article/details/84549941

偶然看到了Robbin的一篇文章,说到了一些JavaEye的一些实现解密,那就来看看有哪些有意思的东西。

我正在参与做的一 个项目,在某某地方上线,需要几十块单板集群;在某某地方上线,又需要怎样的一个集群组网。咋听起来兴许觉得能有怎样的业务逻辑处理和怎样的用户量呢?可 是JavaEye让我很吃惊,我先前只知道与CSDN比起来,JavaEye确实是一个小规模一些的网站,专业一些的网站,可是服务器呢?只有两台!

 

http://wenku.baidu.com/link?url=jWy8PbTw5mQQV4VMk0bQQqhh7wr0h3eDibkfKj4GgZzGGUKwb7FrJPlT2JvmKtqcfpi0AlEOd_zxk59XTgMZSn6Epvhabz-kMRVwirJrbMW

 

这是那台Web Server:

• AMD Opteron 2.4GHz单核 * 2 颗
• 8G内存
• 146G SCSI硬盘

这是那台DBServer:

• AMD Opteron 2.0GHz单核 * 2 颗
• 4G内存
• 73G SCSI硬盘

实在不能说有多么优秀的硬件配置,JavaEye又得面对怎样的访问量呢?

150万动态请求/天

image

这个是JavaEye封杀网络爬虫的简单匹配表达式:

image

JavaEye采用Ruby作为实现语言,看来Ruby很慢是没有说头的,看看Google Adplanner Data:

image

这张图表就很有意思了:

image

CSDN拥有JavaEye的3.5倍访问量,但使用了三十多台服务器集群,中国最大的几个IT站点,使用ASP.NET、Ruby、PHP的都有,但看起来JavaEye的性能或许是最佳的。

-----------------------------------------------------------------------------------------------------------------------------------------------------

JavaEye网站架构进化:

(1)2006年9月

• lighttpd
• ruby 1.8.4, rails 1.1.2, 以fastcgi方式运行
• mysql5.0

FastCGI 像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork- and-execute 模式)。因为是多进程,所以比CGI多线程消耗更多的服务器内存,举例来说,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100 就是很大的内存数。

其实小网站来说,使用FastCGI+Lighttpd是一个非常优秀的组合

(2)2007年1月

• 添加了第2台服务器
• 把web和DB分开
• 系统瓶颈在数据库IO端

系统瓶颈出现在DB IO上面是很正常的,我自己这边的项目经常遇到在Java侧锁瓶颈,无疑是非常奇怪的,一方面是性能测试的用例未必能反映现网真实情况导致,另一方面我还是觉得当整个架构过于复杂,远程方法过多,就会导致这样的问题。

(3)2007年2月

• 把posts表的大字段剥离出来
• posts表的select count操作从30秒减少到
0.1秒

把大表的大字段剥离出来,这是一种基于性能考虑的常用的DB重构方法

剥离前:

• posts(id, ..., body)
• 磁盘存储空间2GB

剥离后:

• posts(id, post_text_id,...) 50MB
• post_texts(id, body) 2GB

(4)2007年3月

• 数据库瓶颈仍然存在
• 引入memcached和CachedModel
• 自己编写了简单的查询缓存
• 240 sql query/s 下降到 140 sql query/s
• memcached缓存命中率在75%

这一次的改进主要在缓存上面,其实在做性能优化的时候,需要经常关注的一个东西就是缓存命中率。

(5)2007年9月

• 引入全文检索
• 使用ruby的ferret
• 中文分词使用单字拆分法

主要是对搜索引擎的优化。

(6)2008年1月

• JavaEye网站代码重写
• 缓存框架改用cache_fu
• 缓存命中率上升到84%
• sql query下降到 50条/s

回去打算去了解一下cache_fu,这里有两篇文章可以参考:

http://weekface.javaeye.com/blog/133797

http://iceskysl.1sters.com/?tag=cache_fu

• cache_fu不对AR对象进行任何拦截,全部交给用户编程
• 用户有完全的控制权,但所有的缓存代码要自己手工编写

(7)2008年5月

• 中文分词算法改用rmmseg-cpp

(8)2008年10月

• 自制山寨cache plugin
• 缓存命中率上升到96%以上

• 抛弃ferret,自己编写全文检索服务器
• 使用Java的lucene作为全文检索引擎
• 自己实现C/S架构的内部调用

(8)2008年11月

• 实现博客,新闻制作PDF功能

(9)2009年3月

• SNS feed功能
• twitter绑定功能
• 开放API

• 废弃Google Analytics
• 自己编写简单的网站流量分析系统

image

(10)2009年12月

• 添加Web IM
• 添加一台服务器
• 合理规划服务器

image

一个生命周期较长的WEB应用每发展到一定阶段一定要面对的是架构上的重组,有时哪怕牺牲一些性能的代价,有时则是牺牲可维护性的代价,带来的是结构层次清晰,便于短期内扩展等好处。这个过程每次都可能是痛苦的,但又是不可避免的。同时,我认为,在项目初期不应当也不可能把架构的融合性和扩展性考虑得太远,那样反而作茧自缚。而在应用发展过程中不断地重构却是更有价值的。

-----------------------------------------------------------------------------------------------------------------------------------------------------

进化总结:

(1)对象缓存原则:

• 数据库表的设计要细颗粒度
• 把有冗余字段的大表拆分为n个互相外键关联的小表
• ORM的性能瓶颈不在于表关联,而在于大表的全表扫描
• 尽量避免join查询,多制造n+1条SQL

上面第一条我觉得还是要看表容量而定,第四条我深有体会,记得在iBatis的使用中还有这样一个专题。

(2)对象缓存的意义:

• Web应用很容易通过集群方式实现横向扩展,系统的瓶颈往往出现在数据库
• 数据库的瓶颈往往出现在磁盘IO读写
• 因此要避免数据库的全表扫描和大表的数据扫描操作
• 如何避免:拆表和臭名昭著的n+1条SQL

……

image

• memcached缓存命中率96%
• cache get : sql query = 4 : 1

另外,Robbin还提到,Ruby的字符串处理,尤其是正则表达式处理性能不好,解决方法也是使用缓存。

cache_money:

• 出自twitter开发团队之手
• 可能是目前最强大的ruby cache框架
• 支持分页查询缓存,支持条件查询缓存

全文检索:

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_880792.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站的构架与设计

随着这几年网络的不断发展,大家对互联网的依赖程度不断加深。各大网站的用户体验各不相同。如淘宝双11 交易300多亿,系统运行基本正常、12306 车票系统的瞬间瘫痪,网站密码泄露等。一个大型网站需要面临高并发访问、海量数据分析处理、网站安…

有哪些可供Web设计师amp;开发者消遣的网站?

开源资讯项目 有哪些可供Web设计师&开发者消遣的网站? 2014-08-01 16:04Onextrapixel作者 Wyatt Welch 172538 社交网站 文本编辑 网页设计 开发者 android 长时间做Web开发和设计工作的人员,难免会遇到各种各样的苦恼事情,这个时候…

【问底】李平:大型网站的灵魂——性能

在前一篇随笔 大型网站系统架构的演化中, 介绍了大型网站的演化过程,期间穿插了一些技术和手段,我们可以从中看出一个大型网站的轮廓,但想要掌握设计开发维护大型网站的技术,需要我们一步一步去 研究实践。所以我打算写…

大型网站系统架构的演化

http://www.cnblogs.com/leefreeman/p/3993449.html 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演 变完善的,…

使用Varnish代替Squid做网站缓存加速器的详细解决方案

from http://blog.s135.com/post/313 我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》,但当时仅仅是用着玩,没做深入研究。  今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的…

html h5 页面 字体大小 fontsize 5px 不生效_必途必:如何通过网站页面布局优化提升seo关键词排名?...

大多数做SEO的人不会忽视网站的页面优化。很多人把注意力集中在网站主页的页面优化上。网站页面优化也是网站内部优化的第一步。通过页面内容的布局调整和设计,可以创建一个用户喜欢并有利于搜索引擎抓取和识别的页面,从而提高搜索引擎的排名。让网站获得…

php如何安装织梦cms,“织梦CMS”网站程序详细安装步骤?

我们之前把网站程序上传到了空间,并解压缩,现在我们只要把上传的程序安装成功,网站就搭建完成了,可以正常运营了,怎么安装那?其实每一套程序中都有“程序安装指南文档”按照指南就可以安装成功的,网站安装…

filezilla怎么上传HTML,filezilla如何上传网页网站,filezilla上传网页网站的方法

FileZilla是一个快速免费跨平台的FTP软件,实用多功能和界面直观的FTP客户端。那么FieZilla 怎么上传网页和网站呢?下面格子啦小编就给大家分享下filezilla上传网页网站的方法。 1、打开刚刚装好的FileZilla,点击菜单中的“文件” 2、点击站点管理器 3、…

怎样分析网站日志?

分析网站日志对于网站体验的优化、蜘蛛的友好度有着重要的意义,而网站日志分析应当主要包括以下维度。 一、网站日志的基本分析方向 1、蜘蛛日志 网站日志分析必不可少的环节就是分析蜘蛛日志,其蜘蛛类型应当囊括当前主流的蜘蛛分类、异常蜘蛛类型、蜘蛛…

自己开发网站日志分析工具,需要掌握何种技术?

对于网站运营而言,熟练掌握网站日志的分析是一门必会的技术。那么,如果要做网站日志分析,除了使用在线日志分析工具外,还有别的方法吗? 如果要自己开发网站日志分析工具,需要掌握何种技术呢? 分…

网站日志分析的维度与日志在线分析工具推荐

分析网站日志对于网站体验的优化、蜘蛛的友好度有着重要的意义,而网站日志分析应当主要包括以下维度。 蜘蛛类型 1、蜘蛛日志 网站日志分析必不可少的环节就是分析蜘蛛日志,其蜘蛛类型应当囊括当前主流的蜘蛛分类、异常蜘蛛类型、蜘蛛总数、蜘蛛抓取频次…

记录一个很有意思的事情(关于自己的网站自己不能访问,别人通过公网却可以访问)

问题描述: 首先是这样的,无意之中打开自己的网站www.ishells.cn发现竟然不能访问了,很纳闷怎么回事儿?就打开了云服务器检查了一下nginx,博客应用都在运行着,于是又通过 IP 端口的方式发现网站是可以正常访问的&#…

网站源码出现高危漏洞,请尽快修复,避免严重损失,的解决方法

源码出现这种情况的解决方法: 友价商城里的后台管理界面出现这个的 我按照上面的提示,将执行选框取消勾选后,它又出现这个的: 解决方法是 在宝塔里开启防火墙和网站防护设置即可解决

电脑版支付宝支付对接网站问题彻底解决方法总结

这几天一直在找解决电脑版网站支付宝支付问题,今天特意来好好做个总结, 首先进入支付宝开放平台:https://openhome.alipay.com/developmentAccess/developmentAccess.htm 第一次出现失败的原因:验签出错,这点我后来尝…

电脑网站出现支付宝支付时手机扫码出现系统有点忙....的解决方法总结

这个问题导致的原因是我用的是同一个支付宝账号,也就是收款支付宝和付款支付宝一样的,所以才导致此问题出现了,这是低级错误,解决方法:退出该支付宝账号,重新换另一个支付宝账号,再尝试扫一扫支…

网站中出现点击按钮跳出的还是当前页面的解决方法

这几天遇到这样的问题:点开我网站里的其中一个按钮,跳转的页面一直都是当前页面,此时则需要右键查看源代码里对应的链接是连接到哪个页面了,比如下图中,左边所示的是演示源码正确的链接页面地址,而右侧则是…

如何在腾讯云服务器上安装安全狗提高网站安全解决方法总结

如何在腾讯云服务器上架设安全狗提高网站安全解决方法总结 步骤方法:以下步骤是我自己在学习研究时一步步实操过来的,对于新手很有帮助意义。 1、先登录腾讯云服务器,https://cloud.tencent.com/login?s_urlhttps%3A%2F%2Fconsole.cloud.ten…

如何将一键部署下来的网站源码弄到第二个网站里去的解决方法

按照正常的安装网站的方法之后,还需要做的一步重要工作就是,改数据库,通常是在网站里搜索data相关的文件。如下图 此时,登录网址后,它会出现下图所示情况: 此时,再将站点这两处修改下&#xf…

网站设置微信支付时出现:appid和mch-id不匹配的解决方法

问题描述: 解决方法: 一定要准备一个已认证的服务号(我的情况就是如此),然后绑定该服务号; 参考官方文档: https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html

网站微信支付时出现支付二维码不显示的解决方法

问题描述: 解决方法:通过快捷键F12查看源代码,逐级逐级的找到对应的位置源码,然后看到该二维码图片对应的链接:如下图: 然后在链接处右键 选择copy link dress,即可将该链接复制好了;然后直接…