个人站长的发展方向:大而全不如小而专
作者:stardust 日期:2008-10-29
第一类个人站长从做站第一天就起所构思的站让旁人看来那势头是拳打新浪,脚踢搜狐,胳膊肘里夹网易。此类站长必死无疑,等待他的只是偃旗息鼓和血本无归。
第二类个人站长从做站第一天起构思的就是做垃圾站,这种站长能赚小钱,很有可能在做出一堆垃圾站后能成功推出一个品牌战,告别垃圾站长,往高级站长的方向发展。
第三类站长从做站开始切入点很小,小到可以忽略,这种站长一般都成功了。这里面的杰出站点非常多,hao123、QQ163、55啦、123查等,网站就提供一个功能,没有任何杂质。而他们背后的主人现在有的成为了草根传奇英雄,有的成为了CEO,都已经是前辈高人了,也许他们有的已经离开江湖多年,但是江湖始终流传着关于他们的传闻。
站长应知道淘金者的故事
淘金者的故事相信很多站长都知道:古时候,一群贫穷的人听说远处某个地方有金子,于是这群人就呼啦呼啦的拖家带口去淘金,最后的结果的是,真正的淘金者赚钱的少,而发财的是在那里卖粥的老板。
站长都是淘金者,金子之所以可贵在于其量少。也许我们不能成为一个富有的淘金者,但是我们可以给这些“淘金者”卖粥,事实上已经有人这么做了。IDC提供商、程序开发商、广告联盟……他们或许不是个人站长,可是他们却在给个人站长提供服务的同时成为了富有者,他们是真正的智者。
有朋友会说我们人单势薄,无法提供这些服务。但是我们能够做的其实很多,我所认识的初级站长培训班第一期的一个朋友,自己没有站,可是在站长这个圈子里,通过自己的微薄力量,给自己和很多个人站长带来了可观的收入。他做的事情其实很简单,创办了一个QQ群(64447904),这个群就一个功能,源码供求群。在这里,你能以低廉的价格甚至免费获取一些优秀的源码。你也可在这里出售你的源码,交易可以委托admin5中介,100元以下的交易是免收中介费的。收入在部分人眼里也许很微薄,但细水长流总比干涸要好。
跳出站长圈子谈小而专
为站长提供服务的网站不计其数,其中成功的莫不是小而专的网站。那么我们在做其他网站的时候,道理也是一样的,锁定你的目标用户,通过网站为你的目标用户提供一种服务,将这种服务做到极致,你便成功了。其实看看传统行业,有见过婚介公司卖老鼠药吗?卖老鼠药会发财,婚介公司也会发财,可是婚介公司在做婚介的同时卖老鼠药的话,公司可能马上就会垮掉。
个人站长受资金和人力的限制,不可能做出大而全的网站,如果能在首期就成功开发并运营大而全的网站,你也就不再被称为个人站长了。所以提醒各位初次做站的朋友,刚开始做站的时候,切忌一口吃个胖子。网站的切入点越小越好。只要你能将这个小的切入点做到极致,让30%需要网站服务的用户选择你的网站,你绝对是个成功的站长。
个人站长没有冬天
大佬都说互联网即将过冬,个人站长是永远不会有冬天的。锁定目标用户,找准用户需求,大刀阔斧的去做,把你的网站能为用户提供的服务做到极致,并推广出去,下一个成功的就是你。也许现在的你因为失败,虽然踏入江湖多年,但江湖始终没有你的传闻。朋友,不要泄气,不要抱怨;理清思路,找准方向,埋头苦干。一段时间后,因为你的成功,江湖上会到处都是你的传说
从LiveJournal后台发展看大规模网站性能优化方法
作者:stardust 日期:2008-10-25
March 16, 2006
从LiveJournal后台发展看大规模网站性能优化方法
于敦德 2006-3-16
一、LiveJournal发展历程
LiveJournal是99年始于校园中的项目,几个人出于爱好做了这样一个应用,以实现以下功能:- 博客,论坛
- 社会性网络,找到朋友
- 聚合,把朋友的文章聚合在一起
在上线后,LiveJournal实现了非常快速的增长:
- 2004年4月份:280万注册用户。
- 2005年4月份:680万注册用户。
- 2005年8月份:790万注册用户。
- 达到了每秒钟上千次的页面请求及处理。
- 使用了大量MySQL服务器。
- 使用了大量通用组件。
二、LiveJournal架构现状概况

三、从LiveJournal发展中学习
如何实现Win2003负载平衡
作者:stardust 日期:2008-10-25
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。这种群集技术可以用最少的投资获得接近于大型主机的性能。
网络负载均衡的优点
第一,网络负载均衡能将传入的请求传播到多达32台服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务。网络负载均衡技术保证即使是在负载很重的情况下,服务器也能做出快速响应;
第二,网络负载均衡对外只需提供一个IP地址(或域名);
第三,当网络负载均衡中的一台或几台服务器不可用时,服务不会中断。网络负载均衡自动检测到服务器不可用时,能够迅速在剩余的服务器中重新指派客户机通讯。这项保护措施能够帮助你为关键的业务程序提供不中断的服务,并可以根据网络访问量的增加来相应地增加网络负载均衡服务器的数量;
第四,网络负载均衡可在普通的计算机上实现。
网络负载均衡的实现过程
在Windows Server 2003中,网络负载均衡的应用程序包括Internet信息服务(IIS)、ISA Server 2000防火墙与代理服务器、VPN虚拟专用网、终端服务器、Windows Media Services(Windows视频点播、视频广播)等服务。同时,网络负载均衡有助于改善服务器的性能和可伸缩性,以满足不断增长的基于 Internet客户端的需求。
网络负载均衡可以让客户端用一个逻辑Internet名称和虚拟IP地址(又称群集IP地址)访问群集,同时保留每台计算机各自的名称。下面,我们将在两台安装Windows Server 2003的普通计算机上,介绍网络负载均衡的实现及应用。
这两台计算机中,一台计算机名称为A,IP地址为192.168.0.7;另一台名为B,IP地址为192.168.0.8。规划网络负载均衡专用虚拟IP地址为192.168.0.9。当正式应用时,客户机只需要使用IP地址192.168.0.9来访问服务器,网络服务均衡会根据每台服务器的负载情况自动选择192.168.0.7或者192.168.0.8对外提供服务。具体实现过程如下:
在实现网络负载均衡的每一台计算机上,只能安装TCP/IP协议,不要安装任何其他的协议(如IPX协议或者NetBEUI协议),这可以从“网络连接属性”中查看。
第一步,分别以管理员身份登录A机和B机,打开两台机的“本地连接”属性界面,勾选“此连接使用下列项目”中的“负载均衡”项并进入“属性”对话框,将IP地址都设为192.168.0.9(即负载均衡专用IP),将子网掩码设置为255.255.255.0;
第二步,分别进入A机和B机的“Internet协议(TCP/IP)”属性设置界面,点击“高级”按钮后,在弹出的“高级TCP/IP设置”界面中添加IP地址192.168.0.9和子网掩码设置为255.255.255.0。
第三步,退出两台计算机的“本地连接属性”窗口,耐心等一会儿让系统完成设置。
以后,如果这两台服务器不能满足需求,可以按以上步骤添加第三台、第四台计算机到网络负载均衡系统中以满足要求。
用IIS服务验证网络负载均衡
网络负载均衡配置好后,为了实现某项具体的服务,需要在网络负载均衡的计算机上安装相应的服务。例如,为了实现IIS网站的负载均衡,需要在相应的网络负载均衡服务器上安装IIS服务。为了让每个用户在通过网络负载均衡访问到不同的计算机时,能够访问到一致的数据,需要在网络负载均衡的每台计算机上保持数据的一致性。举例来说,实现了两个节点的IIS的网络负载均衡,为了保证两个网站内容的一致性,除了这两个IIS服务器的配置相同外,相应的网站数据必须一致。
为了检验网络负载均衡,我们可以通过IIS来进行验证,其他的一些应用如终端服务、Windows Media服务与IIS的应用与之相类似。在其他计算机上的IE浏览器中键入192.168.0.9,根据网络的负载,网络负载均衡会自动转发到A机或B 机。为了验证效果,你可以在浏览的时候,拔掉第一台计算机的网线或拔掉第二台机器的网线,将会发现浏览到的将是不同内容。当然,我们在测试的时候,为了验证网络负载均衡的效果,把两个网站设置成不一致的内容,而在正式应用的时候,网络负载均衡群集的每个节点计算机的内容将是一致的,这样不管使用哪一个节点响应,都能保证访问的内容是一致的。
负载均衡在校园网中的应用
校园网的应用除了用于教学、科研、管理、图书情报资料检索外,还承担任着校内外信息交流、电子邮件、公告、新闻发布,以及各种公共网络口的访问等任务。由于在网络上传输的信息不只是数字、文字和图形,还会随应用水平的提高,逐步增加语音、活动图像及视频图像等高带宽的应用。因此,网络的建设,尤其是主干网要求高带宽与高速度,在校园网的服务器中应用负载均衡技术不失为一种廉价的解决方案。
解密淘宝网的开源架构
作者:stardust 日期:2008-10-25
对于规模稍大的网站来说,其IT必然是一个服务器集群来提供网站服务,数据库也必然要和应用服务分开,有单独的数据库服务器。对于像淘宝网这样规模的网站而言,就是应用也分成很多组。那么下面,我就从应用服务器操作系统、应用服务器软件、Web Server、数据库、开发框架等几个方面来介绍一下淘宝网中开源软件的应用。
操作系统
我们首先就从应用服务器的操作系统说起。一个应用服务器,从软件的角度来说他的最底层首先是操作系统。要先选择操作系统,然后才是操作系统基础上的应用软件。在淘宝网,我们的应用服务器上采用的是Linux操作系统。Linux操作系统从1991年第一次正式被公布到现在已??走过了十七个年头,在PC Server上有广泛的应用。硬件上我们选择PC Server而不是小型机,那么Server的操作系统供我们选择的一般也就是Linux,FreeBSD, windows 2000 Server或者Windows Server 2003。如果不准备采用微软的一系列产品构建应用,并且有能力维护Linux或者FreeBSD,再加上成本的考虑,那么还是应该在Linux和 FreeBSD之间进行选择。可以说,现在Linux和FreeBSD这两个系统难分伯仲,很难说哪个一定比另外一个要优秀很多、能够全面的超越对手,应该是各有所长。那么在选择的时候有一个因素就是企业的技术人员对于哪种系统更加的熟悉,这个熟悉一方面是系统管理方面,另外一方面是对于内核的熟悉,对内核的熟悉对于性能调优和对操作系统进行定制剪裁会有很大的帮助。而应用全面的优化、提升性能也是从操作系统的优化开始的。
应用服务器
在应用服务器前端,我们采用了Web Server做了一次转发,我们选择的Web服务器是大名鼎鼎的Apache。几年前,Apache几乎是Linux系统上开源Web Server的唯一选择。那个时候虽然也有一些其他的开源的Web Server,但是从功能和稳定性上来说都无法和Apache相对。在今天来说,Lighty也会是一个非常好的选择。Lighty是一个非常轻量级、占用内存资源也比较少的Web Server。虽然功能上没有Apache强大,但是在不少场景下,性能是非常出色、强于Apache的。而微软的IIS,就只能工作在Windows的系统上了。并且使用IIS的话,基本上也就是选择了ISAPI、ASP或者ASP.NET进行Web应用的开发了。
数据库
说完了我们采用的操作系统、应用服务器、WebServer后,下面就来谈谈我们的数据库。在淘宝网的应用中,采用了两种关系型数据库管理系统。一个是Oracle公司的Oracle 10g,另外一个是Sun MySQL的MySQL。Oracle是一款优秀的、广泛采用的商业数据库管理软件。有很强大的功能和安全性,可以处理相对海量的数据。而MySQL是一款非常优秀的开源数据库管理软件,非常适合用多台PC Server组成多点的存储节点阵列(这里我所指的不是MySQL自身提供的集群功能),每单位的数据存储成本也非常的低廉。用多台PC Server安装MySQL组成一个存储节点阵列,通过MySQL自身的Replication或者应用自身的处理,可以很好的保证容错(允许部分节点失效),保证应用的健壮性和可靠性。可以这么说,在关系数据库管理系统的选择上,可以考虑应用本身的情况来决定。
一个互联网应用,除了服务器的操作系统,Web Server软件,应用服务器软件,数据库软件外,我们还会涉及到一些其他的系统,比如一些中间件系统、文件存储系统、搜索、分布式框架、缓存系统等等。在淘宝网,这些系统都是自主开发的,没有采用目前商业的或者开源的产品。有些系统,会存在着一些开源的产品或者商业产品。但是,考虑到淘宝网自己的需求和大并发量的压力,这些系统都选择了自主开发。
开发框架
前面谈的都是系统级的产品,下面我们说说开发框架的使用。可能有朋友想问,作为一个如此大规模的网站,淘宝网的Web展现层采用的是什么框架,是怎么实现的呢?曾??也有到淘宝的应聘者问过我这个问题,他问我说是不是用的struts。我告诉他说不是的。其实淘宝网的Web展现层的框架用的不是struts,不是webwork,不是spring mvc等等。淘宝网的Web展现层的框架用的是集团内部自主开发的一套Web框架。这个框架能够解决一些其他Web框架不能解决的、在淘宝的应用中又会出现并需要解决的问题。在淘宝的多个应用中,也采用了一些开源的框架,比如Spring、iBatis、jBPM、Hessian、Mina等等。这些开源软件的采用为我们构建应用系统提供了很大的帮助。
采用开源软件构建系统,我想有两个很大的好处:
一个是降低成本。假设你有1000台应用服务器,如果你每台服务器上采用的不是 JBoss AS或者其他开源的软件,而是使用商业的Oracle BEA的Weblogic或者IBM的WebSphere,那么为这1000台机器的应用购买License的费用是非常高的。
另外一个好处(我觉得最大的好处)是你可以看到软件的源码,你可以研究了解软件内部的工作过程、原理。这对于应用设计、开发、查错、优化都是非常有帮助的。
淘宝网的开源观
对于开源软件的应用,有些人可能担心质量的问题,有些人可能担心软件本身发展更新的问题,等等。对于质量的问题,我想现在很多的开源软件尤其是一些很著名的开源软件都有很完善的组织,有完善的开发、测试、发布流程。在一个新版本完成前,会有多次的测试版本发布,最后才是正式版。这和商业软件是一样的。并且因为代码公开,反而更加的容易发现错误,提高质量。至于第二个问题,我想跟第一个问题一样,关键是组织和规划而不在是否开源,并且在很多著名的开源软件背后,会有厂商在进行支持。软件本身的发展应该是不会成为问题的,不太会出现软件突然停止发展的情况。
在今后的发展中,我们还是会一如既往的关注开源软件的发展,也还会根据需要采用不同的开源软件。在选择一个开源产品的时候,我会考虑以下几点:
1. 这个软件目前的功能和它的RoadMap
2. 软件本身的架构
3. 该软件开发的活跃度
4. 该开源软件是否是遵守该领域内的国际规范的
5. 在同类产品中,要挑选有比较优势的。并且要考虑可能存在的移植代价。这个移植指的是采用了这款开源软件后现有系统的移植,或者是从这个开源软件到其他软件的移植。
对于企业级系统、互联网应用来说,采用开源软件不仅可以降低成本,更重要的是能够真正了解软件的内部工作机制。还可以在现在的基础上进行增强和定制,也能够从开源软件中借鉴到很多好的设计和实现。希望国内能有更多的企业在使用开源软件的同时,也能开源自身的一些软件,或者能够成为一些开源软件的贡献者。而作为淘宝网,我们也会非常积极的参与到开源的活动中,也会努力为开源的发展做出我们应有的贡献。
大型互联网网站架构心得之一
作者:stardust 日期:2008-10-25
首先是横向的分:
1. 大的网站化解为多个小网站:当我们一个网站有多个功能的时候,可以考虑把这个网站拆分成几个小模块,每一个模块可以是一个网站,这样的话我们到时候就可以很灵活地去把这些网站部署到不同的服务器上。
2. 静态动态分离:静态文件和动态文件最好分离开成2个网站,我们知道静态网站和动态网站对服务器来说压力的侧重不同,前者可能重IO后者重CPU,那么我们在选择硬件的时候也可以有侧重,而且静态和动态内容的缓存策略也不一样。典型的应用,我们一般会有独立的文件或图片服务器。
3. 按照功能来分:比如有一个模块是负责上传的,上传操作很消耗时间,如果和其它应用混在一起的话很可能,一点点访问就会使服务器瘫痪,这种特殊的模块应该分开。安全的不安全的也要分开,还需要考虑到以后SSL的购买。
4. 我们不一定要全部用自己的服务器,搜索、报表可以依靠别人的服务,比如google的搜索和报表服务,自己做的不一定比得过别人,服务器带宽都省了。
其次是纵向的分:
1. 文件也相当于数据库,IO的流量可能比数据库还大,这也算是纵向级别的访问,上传的文件图片一定要和WEB服务器分开。当然,数据库和网站都放在一个服务器上的很少了,这是最基本的。
2. 对于涉及到数据库访问的动态程序来说,我们可以使用一个中间层(所谓的应用层或逻辑层)来访问数据库(部署在独立的服务器上),最大的好处就是缓存和灵活性。缓存的内存占用比较大,我们要把它和网站进程分开,而且这样做我们可以很方便的去改变一些数据访问的策略,即使到时候数据库有分布的话在这里可以做一个调配工作,这样灵活性就很大了。还有好处是中间层可以做电线网通桥梁,可能网通访问双线再访问电信会比网通直接访问电信服务器快。
有人说我不分,我可以做负载均衡,对,是可以的,但是如果分的话,同样的10台机器肯定比不分10台机器可以承受更多的访问量,而且对硬件的需求可能不会很高,因为知道需要哪个硬件特别好。争取让每一个服务期都不空闲,又都不是太忙,合理进行组合调整和扩充,这样的系统伸缩性就高了,能根据访问量来调整的前提就是之前有考虑到分,分的好处是灵活性、伸缩性、隔离性以及安全性。
1. CPU:动态文件的解析需要比较多的CPU,CPU出现瓶颈就要看是不是哪个功能过长时间占用线程,如果是就分出去。或者就是每一个请求处理时间不长,但是访问量很高,那么就加服务器。CPU是好东西,不能让他干等,不做事情。
2. 内存:缓存从IIS进程独立出去,一般对WEB服务器来说内存不够的情况不是很多。内存比磁盘快,要合理利用。
3. 磁盘IO:用性能监视器找到哪些文件IO特别大,找到了就分到独立的一组文件服务器上去,或者直接做CDN。磁盘慢,大规模读取数据的应用靠缓存,大规模写入数据的应用可以靠队列来降低突发的并发。
4. 网络:我们知道,网络的通讯是比较慢的,比磁盘还慢,如果是做分布式缓存,分布式计算的话,要考虑到物理服务器之间网络通讯的时间,当然,在流量大了以后,这可以提高系统的接纳能力一个等级。静态内容可以借助CSD分担一部分,在做服务器假设的时候还要考虑中国特色的电信网通情况以及防火墙。
对SQL SERVER数据库服务器来说[Update]:
其实还是水平分割和纵向分割,一个二维表,水平分割就是横过来切一刀,纵向分割就是竖直切一刀:
1、纵向分割就是,我们不同的应用可以分到不同的DB中,不同的实例中,或者说把某个拥有很多字段的表拆分成小表。
2、横向分割就是,某些应用可能不负载,比如用户注册,但是用户表会非常大,可以把大表分开。可以采用表分区,数据存储在不同文件上,然后再部署到独立物理服务器增加IO吞吐以改善读写性能,土一点的做法就是自己定期把老的数据存档。表分区的另外一个优势可以增加数据查询速度,因为我们的页索引可以有多层了,就像一个文件夹中的文件不要太多,多分几层文件夹一样。
3、还可以通过数据库镜像、复制订阅、事物日志,把读写分开到不同的镜像物理数据库上,一般来说够用,如果还不行可以用硬件来实现数据库的负载均衡。当然,对于BI,我们可能还会有数据仓库。
架构上考虑到了这些之后,流量大了,就可以在这个的基础上再去调整或者做WEB服务器或者应用服务器的负载均衡。很多时候我们都是在重复发现问题-》找到瓶颈-》解决这个过程。
典型的架构如下:

动态WEB服务器配好点的CPU,静态WEB服务器和文件服务器磁盘好点
应用服务器内存大点,缓存服务器也是,数据库服务器当然内存和CPU都要好
大中型网站架构探秘
作者:stardust 日期:2008-10-25
负载均衡:
负载均衡是所有大中型网站必备的部署。显然,大型网站每天上千万独立IP的访问量,一个Web服务器根本承担不了,网站后台必需有多台服务器共同工作,因此各种负载均衡技术就应运而生了。
较早的负载均衡是DNS负载均衡。原理很简单,只要在域名解析的时候,将多个地址配置成同一个域名,负载均衡就完成了。不同用户点击同一个域名的时候,实际上只解析给用户一个地址,这样用户实际上访问的是不同的Web服务器,就减轻了每个服务器的负担。这个DNS负载均衡方法,一般而言是随机抽取地址。DNS负载均衡早期被广泛使用,优点是简单易用,但是DNS负载均衡还是有一些问题存在。如果某一台服务器发生了故障,而DNS的下一个刷新周期又没到,这样就可能导致某些用户无法访问站点的情况发生。而另一个缺点在于DNS负载均衡随机性太强,比如一段时间内众多访问都被指向同一个地址,而另外的地址却闲置,就造成了局部繁忙的不良现象。而且有时某处服务器正在运行其他应用而处于繁忙状态,DNS负载均衡也无从得知,而依旧平均的解析域名。
稍微复杂一点的负载均衡,是反向代理,当外部有请求到代理服务器,代理服务器再将该请求均匀的转发到内网的服务器上。这种方式被广泛采用,比如说上面提到的又拍网yupoo.com,就采用了nginx作为反向代理。此外,现在还可以购买专业的硬件设备,比如Plentyoffish.com(全球最大的婚介网站)就采用了网捷网络公司的Web交换器ServerIron作为硬件负载均衡,ServerIron 能够有效地处理 16,000,000个并发连接,并且可以改善服务器负载均衡和缓冲转换,像ServerIron这类的硬件产品并非只有网捷一家提供,由于大型网站预算充裕,因此也可以选择一些其他的硬件设备来做负载均衡。当然了,我们也别忽略了最基本的软件负载均衡——Windows Server就带有这样的功能。
负载均衡还有一个极为简单的方法,就是建立镜像站点。比如华军软件或者天空软件,都直接采用了镜像站点。这个方式很直接,省去了很多麻烦。以华军软件园为例,登陆华军软件园的时候,我们将有多种选择,可选电信、网通等网络;而下载某一软件的时候,为了使用户得到更快的速度,天空和华军在中国各地都安排了服务器,可以提供距离最近的下载服务。不过,也有一些麻烦,就是每一次选择都是人工手动选择。总之,这一系列负载均衡方法,都得以让大型网站的负载均匀,不会有哪个服务器有太大的压力。
CDN:
CDN( Content Delivery Network),内容分发网络也是大型网站必备的部署之一。CDN的原理不难理解,就是将网页内容存放到离用户更近的缓存服务器上,减少路由,从而加快远距离的访问速度。比如说,你随意登陆一个国外小站,速度可能很慢。因为国外网站到国内的最终客户端的路径冗长,但是如果你登陆部署了CDN的网站,比如 Plentyoffish.com,你会发现速度非常快,跟国内的网站访问速度差异已经无法从感知上判断。依照Cache存放的位置不同,CDN也有一些类别,不同的网站会根据具体需求,有不同的选择。CDN通常是由独立的CDN商提供的。举一个例子,就是网易,我的查询时间是2008年2月28日,我们发现,同一个域名下的有很多个IP地址,这就说明了首页CDN的部署。
C:\>nslookup www.163.com
Server: ns.lnpta.net.cn
Address: 202.96.64.68
Non-authoritative answer:
Name: www.cache.split.netease.com
Addresses: 202.108.9.37, 202.108.9.38, 202.108.9.39, 202.108.9.51
202.108.9.52, 202.108.9.31, 202.108.9.32, 202.108.9.33, 202.108.9.34
202.108.9.36
Aliases: www.163.com
而我们如果查询一个简单的个人网站,则不可能有CDN;另外,如果有兴趣,我们也可以仔细察看一个网站多个二级域名的CDN情况。
平台设计:
大型网站一般都有着非常复杂的与用户交互的内容,必须大量调用数据库,因此一个完善的数据库设计对于大型网站非常重要。例如上面提到的 Plentyoffish.com,这个站其实是个人网站,但流量大的惊人,该网站有一个主要的数据库,两个搜索数据库,早些时候, plentyoffish.com的数据库设计问题频频,经常到数据库堵塞,所以站长花费时间最多的地方就是数据库优化。数据库优化没有什么特别的捷径,其实很少有一次成型的完美数据库构建,只能是按照特定的需要来设计数据库,如有不足再去着手改进。不过大型网站还是有一些共性,比如说图片存储单独使用图片数据库,尽量使用静态页面来减少数据库调用等等。
还有很多大型网站,都有着非常深厚的技术实力,可以开发属于自己的平台。比如说谷歌,Google.com就有着自己独特的平台,主要包括GFS、 MapReduce和 BigTable。因为海量数据存储,所以常规的数据库调用查询是非常恐怖的,每次查询都将调用百亿个页面,成千上万个并发检索足以使得谷歌系统崩溃,因此Google File System将大量页面以独特的方法压缩之后再提供检索;整个系统一共包括超过两百个集群,再由MapReduce来协同作业。不仅仅谷歌,比如百度、中搜等等网站也都有自己研发的独特的平台。
硬件配置:
大型网站的硬件配置一定就好吗?答案是否定的。比如说全球最大的网站谷歌,google.com的整个架构的基础是几十万台普通的PC级别服务器。谷歌一些服务器的细节为商业机密,但是根据谷歌已经披露的资料显示,在2006年之前谷歌拥有45万台服务器,这些服务器都是非常普通的PC级服务器,甚至硬盘接口都还是有些过时的IDE接口。这也是谷歌的独特架构决定的,而对比谷歌,维基百科则拥有非常强势的服务器,全部为SCSI硬盘,而且主要的主机中都有多达6块硬盘,超过16GB内存。这比较容易理解,因为谷歌在全球拥有很多个数据中心,员工数量众多,完全有能力管理数以万计服务器的运行,而维基百科则为非营利机构,主要依靠捐赠生存,员工数量非常稀少,因此必须配备强势的服务器。其实,每个网站都应该根据自己独特的情况来配置硬件,目前1TB SATA硬盘已经步入了量产阶段,可是2年以前1TB的硬盘只能通过RAID 0来实现,可见硬件的更新速度非常惊人,所以即便预算充裕,在配置服务器的时候也应该多考虑实际用途,而不一定要拥有最好的配置。
总结:
以上只是大型网站的概括总结,其实每个网站都有自己独特的一面,所以以上的每一条规则都未必是死规定。比如说着重沟通的Twitter.com,本质就是一个异步聊天室,因此静态页面就不见的有必要。总之,网站架构没有死定律,只要合适网站的,就是好的架构
asp.net调用EXE执行程序
作者:stardust 日期:2008-10-25
ASP.NET 中图像验证码的实现
作者:stardust 日期:2008-10-25
1.首先创建一个 ValidateImage.aspx 页,注意引用System.Drawing和System.Drawing.Imaging两个命名空间。
代码如下:
public class ValidateImage : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
//生成验证码
string validateCode=CreateValidateCode();
//生成图像
Bitmap bitmap=new Bitmap(70, 25);
//设置图像背景色
SetBgColor(bitmap,Color.Brown);
// 绘制图像干扰
DrawDisturb(bitmap);
// 绘制验证码
DrawValidateCode(bitmap, validateCode);
// 保存验证码图像,等待输出
bitmap.Save(Response.OutputStream, ImageFormat.Gif);
}
// 生成 A-Z 的四位验证码
private string CreateValidateCode()
{
string validateCode=string.Empty;
Random random=new Random();
for(int i=0; i<4; i++)
{
//n=1~26
int n=random.Next(26);
validateCode+=(char)(n+65);
}
// 保存验证码
Session["ValidateCode"]=validateCode;
return validateCode;
}
private void SetBgColor(Bitmap bitmap,Color color)
{
for(int x=0; x<bitmap.Width; x++)
{
for(int y=0; y<bitmap.Height; y++)
{
bitmap.SetPixel(x, y, color);
}
}
}
private void DrawDisturb(Bitmap bitmap)
{
Random random=new Random();










