新浪、搜狐、淘宝等这样的大型网站,首页的架构设计怎样比较合理?

据我所知,新浪、搜狐这样的新闻媒体为主的,数据实时性要求不高,可以生成静态页实现。淘宝的数据实时性要求较高,也生成静态页来实现?还是用一些cache缓存来实现?

欢迎大家探讨

 

楼主,我在made-in-china.com做过设计,通过我的经验,我认为一个网站要做过效率高,不过是一个程序员的事情。在性能优化上要数据库和程序齐头并进!缓存也是两方面同时入手。第一:数据库缓存和数据库优化,这个由dba完成(而且这个有非常大的潜力可挖,只是由于我们都是程序员而忽略了他而已)。第二:程序上的优化,这个非常的有讲究,比如说重要一点就是要规范SQL语句,少用in   多用or,多用preparestatement,另外避免程序冗余如查找数据少用双重循环等。另外选用优秀的开源框架加以支持,我个人认为中后台的支持是最最重要的,可以选取spring+ibatis。因为ibatis直接操作SQL并有缓存机制。spring的好处就不用我多说了,IOC的机制可以避免new对象,这样也节省开销!具我分析,绝大部分的开销就是在NEW的时候和连接数据库时候产生的,请你尽量避免。另外可以用一些内存测试工具来做一个demo说明hibernate和ibatis谁更快!前台你想用什么就用什么,struts,webwork都成,如果觉得自己挺牛X可以试试用tapestry。

 

 

我同意marine_chen(覆雨翻云)   的观点,后缀名为htm或者html并不能说明程序生成了静态页面,可能是通过url重写来实现的,为的只不过是在搜索引擎中提升自己网站的覆盖面积罢了。

其实用数据库也未必不能解决访问量巨大所带来的问题,作成静态文件硬盘的寻址时间也未必少于数据库的搜索时间,当然对资料的索引要下一翻工夫。

我自己觉得门户往往也就是当天、热门的资料点击率较高,将其做缓存最多也不过1~2G的数据量吧,别说服务器,个人电脑,1~2G小意思。
拿网易新闻来说http://news.163.com/07/0606/09/3GA0D10N00011229.html
格式化一下,方便理解:http://域名/年/月日/新闻所属分类/新闻ID.html
我们可以把当天发布的、热门的、流揽量大的作个缓寸,用hashtable(key:年-月-日-分类-ID,value:新闻对象),静态将其放到内存(速度绝对快过硬盘寻址静态页面)。

这样可以大大增加一台计算机的处理速度。至于一台机器不够处理的,那是httpserver集群来路由的问题了。
生成静态页面其实是比较苯的做法啊:
1、增加了程序的复杂度
2、不利于管理资料
3、速度也不是最快
4、伤硬盘,哈哈

 

新浪的后台发布我接触过
是perl   php   mysql的,有几个人写的底层东西,然后频道的开发人员在上面进行二次开发。
那个系统很灵活,都是生成静态页面的

 

每签发一条新闻,就会生成静态页面,然后发往前端的web服务器,前端的web都是做负载均衡的。另外还有定时的程序,每5-15分钟自动生成一次。做一个大的网站远没有想象中那么简单。服务器基本就要百十个的

 

我来说一下,
1   我们的新闻是从后台添加进去的,新闻添加进去之后并不能在前台显示,
要发布后才能显示,在发布的时候把新闻生成静态页面,如果在换别的新闻,就必须把以前的新闻撤下来.这样就可以保存发步的新闻是最新的.
2   就技术方面肯定不会用hibernate的,只是用的jsp这种最基本的,在写数据的时候一定用的是存储过程.经过测试存储过程的确快很多,
3数据库用的是oracle.服务器用的是2个weblogic

 

生成静态页面的服务器和www服务器是两组不同的服务器,页面生成后才会到www服务器
一部分数据库并不是关系数据库,这样更适合信息衍生
www、mail服务器、路由器多,主要用负载平衡解决访问瓶颈

 








程序开发是一方面,系统架构设计(硬件+网络+软件)是另一方面。

中国的网络分南北电信和网通,访问的ip就要区分南北进入不同的网络;

然后是集群,包括应用服务器集群和web服务器集群,应用服务器集群可以采用apache+tomcat集群和weblogic集群等,web服务器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;Squid也可以,反正方法很多,可以根据情况选择;

软件架构方面,做网站首先需要很多web服务器存储静态资源,比如图片、视频、静态页等,千万不要把静态资源和应用服务器放在一起;

页面数据调用更要认真设计,一些数据查询可以不通过数据库的方式,实时性要求不高的可以使用lucene来实现,即使有实时性的要求也可以用lucene,lucene+compass还是非常优秀的;

不能用lucene实现的可以用缓存,分布式缓存可以用memcached,如果有钱的话用10来台机器做缓存,> 10G的存储量相信存什么都够了;如果没钱的话可以在页面缓存和数据缓存上下功夫,多用OSCACHE和EHCACHE,SWARMCACHE也可以,不过据说同步性不是很好;

然后很重要的一点就是数据库,大型网站要用oracle,数据方面操作尽量多用存储过程,绝对提升性能;同时要让DBA对数据库进行优化,优化后的数据库与没优化的有天壤之别;同时还可以扩展分布式数据库,以后这方面的研究会越来越多;

新闻类的网站可以用静态页存储,采用定时更新机制减轻服务器负担;首页每个小模块可以使用oscache缓存,这样不用每次都拉数据;

最后是写程序了,一个好的程序员写出来的程序会非常简洁、性能很好,一个初级程序员可能会犯很多低级错误,这也是影响网站性能的原因之一。

Comments are closed.

Post Navigation