`
wangdei
  • 浏览: 372100 次
社区版块
存档分类
最新评论

修正版 疯狂代码 写给WEB2.0的站长

阅读更多

当互联网吵吵嚷嚷的进入2.0时代,当互联网的技术不再是那么高不可攀,当复制变成家常便饭,互联网热闹起来了

    myspace火了,中国冒出更多的myspace

    youtube刚刚起来,中国的视频网站就遍地开花

    51拔地而起,中国出了无数的SNS

    facebook则改变了中国站长的抄袭方式,不再学chianren了,校内火了
    ..........

    当抄袭变成习惯,我想说的是,模仿,站长,你准备好了吗?

    如果你打算做垃圾站,或者赚点广告费的网站,请不要点击这篇文章,我从技术角度方面谈谈WEB2.0网站的模仿问题。

    当投资和流量都不是问题的时候,我想说的是,您真的一帆风顺吗?

    拿SNS网站来说,当匆匆上线的2.0,当一笔笔投资砸进去的时候,当流量上去的时候,您的困惑在什么地方?

    我做过多个2.0公司的技术顾问,简单的谈谈2.0公司遇到的问题(涉及隐私,我用A B C D代替),这里就不再赘述大家众所周知的页面静态化,缓存和代码安全等问题了,有点技术的2.0公司的CTO都知道这些东西,我们谈点发展之后的问题

A公司

    A公司做的是SNS网站,程序是两个毛头小伙子做的,目标直指51,程序开发是一帆风顺,功能也比51牛多了,推广也是一帆风顺(A公司有自己独到的推广方式。但是当ALEXA到2W的时候问题出来了,每天下午4点左右,网站速度慢的惊人,基本上打不开,公司三台服务器CPU100%,让人郁闷的是公司的网络配置方式,居然是双WEB的集群,而单独一台DB数据库。整个瓶颈在数据库,于是我建议做DB的集群,分析了一下数据结构,MD,典型的WEB程序员的作品,没有一点数据库设计规范,功能实现是可以,如果要扩展,不可能,集群基本上是不可能的,怎么办?不能办,于是,一个月的时间修改程序,数据结构基本上换了一遍 前期砸进去的几十万打了水飘,用户走光了。

    结论:WEB2.0前期设计的时候不应该只考虑功能,应该认真考虑一下底层和数据结构了。

B公司

    B公司也是做的SNS网站,程序是3个人开发的,CEO是某名牌大学的经济学硕士,有点知己网的味道,又有一些特色出来,说实话,公司的潜力不错,CEO有很强的运作能力,感觉前景不错。系统架构还行,但是---但是系统崩溃了,why?系统没有考虑到用户有个海量的说法,文件也有个海量的说法,用户的相册,图片全部存贮在WEB服务器的一个分区上,每个用户一个目录,而打开性能监视器,磁盘的IO高的惊人,基本上无暇响应。众所周知,文件系统也是一个数据库,单独大文件无所谓,关键是整个是300多个G的零碎文件,大量的读写操作,系统崩溃,数据丢失,文件系统的一个链断了,用户数据全部丢失!!!Raid并不能解决所有问题,磁盘阵列只能保证在硬盘损坏的时候进行恢复,但是这个是文件系统的损坏,raid不能恢复。这是一个非常沉重的问题,系统整整停了一个月来做数据恢复(单独文件很容易,但是海量文件目前还没有一个软件能组织起来软件架构,数据恢复软件一般在建立目录结构索引的时候就已经死掉了,尝试过用16G内存的服务器做恢复,无效)。解决方案:修改程序架构,做分布式文件存贮(程序修改用了8天,但是文件转移却又用去了将近一个月),20万用户损失殆尽 像这种 http://www.bt285.cn bt下载

    结论:WEB2.0前期的设计应该有应付海量存贮的考虑,整个涉及了程序架构的修改,前期规划不好的话基本上思路一条。

C公司

    C公司是一个值得尊敬的公司,CEO技术出身,和比尔盖茨一样,大学未毕业出来做网络,01到03年做短信狠赚了一笔,后来做的小项目也小有所成,说实话,我很佩服。公司做的是校友方面,但是更偏重myspace风格,注重个人主页,推广方面也下了大手笔。系统崩溃的原因其实很简单,由于采用的是微软的SqlServer,而微软的MSDN直接就告诉了我们,SQLSERVER不支持负载集群,只支持灾难恢复的集群,他们的数据库超负载,100%就没有下去过,只能横向增加配置,采用了4路4核CPU系统,但是系统还是崩溃了... 高互动注定了高负载。解决方案: 现从基本入手,解决掉几个程序耗能大户,对数据库采用横向切割,将用户每10万进行分组,同时对数据库系统进行散列,将多个表垂直分割,同时进行文件分组 ,解决问题. 因为修改了数据结构,程序也基本上大动了一下。 好在系统没有出大错,损失不算很大,不过对用户体验造成了很坏的影响。
   附注:SqlServer其实是可以实现集群的,一般是通过复制和分发的形式实现,但是应用程序需要对数据库操作进行分类,更新和查询。但是同时存在一个问题,在高互动下的数据库更新操作频繁的情况下,复制的延迟时间会很长,甚至会有5分钟的延迟!应用程序应该有应对延迟的准备!

    结论:WEB2.0前期设计应该有良好的散列考虑,程序应该能有配合的扩充性,符合数据库的扩充

D公司

    D公司是一个各个方面做的比较好的公司,做了CDN加速,图片也独立分出了N个服务器,数据库不错的一个,(CTO是个数据库专家),系统崩溃的原因在于WEB,按道理说WEB很容易做集群的,但是发现集群并解决不掉问题,他们的集群只允许做4台的WEB集群,但是4台都当掉了。仔细分析,找到原因,我估计整个也是大部分CTO最容易犯的一个错误,或者说他们根本就想不到的问题,就是WEB上传的问题,上传的时候由于数据传输的原因,线程是保持链接的,300个线程就可以把一个WEB Server当掉了。解决方案:这个最简单,把上传和其他耗能大户分离出独立出来,同时做异步分布式上传。程序改动不是很大,但是之前半个月速度满对用户体验的损失也不可小视。像这种http://www.5a520.cn 小说520网

    结论:没有什么结论了,毕竟有海量访问经验的CTO不多,也就是那几个大站的。

    总结:不是泼冷水,模仿其实是很容易的,随便找几个WEB程序员就能做到,并且很简单,速度可能还很高效,因为WEB2.0无非就是跟数据库打交道,会操作数据库就会做。但是真正做大并不容易,因为能应付海量访问的程序并不简单,现在的程序员都太自命不凡,其实真正有经验的并不多,不要相信一个月薪5K--10K的程序员能给你多大的惊喜,能应付海量访问的程序员不是那个价格。如果您想做2.0,想做大,有几个个建议:

    一.找DBMS的专家设计好数据库,大部分程序员都不知道分区视图,数据散列,数据组的概念

    二.设计好程序架构(这个其实不难,有个高人指导就行了),保持良好的扩展性,成本考虑可以找兼职的系统架构设计师做好系统架构,确定将来的发展瓶颈。

    三.考虑好文件存贮的问题。文件存贮的技术含量看起来很低,其实是很高的,可以考虑反向代理的方案。文件存贮出问题了,站点基本上就完蛋了,不仅仅是RAID的问题和存贮服务器的问题,不过道理倒是一点就破的

    四.中国国情考虑,这个最致命,需要考虑电信和网通的问题,CDN并不能解决所有问题。互动性的东西并CDN并不是很有效。最关键的是,现有的双线机房遇到DDOS攻击基本上都会当掉,原因很简单,双线机房都是私人机房,本身就不会有太高的带宽,随便攻击一下就可以D掉(顺带提一个笑话,我知道一个双线机房的老总总共1G的带宽却买了4G的金盾墙,很简单800M的攻击就可以搞定)。

    五.网络延迟的问题,这是分布式系统必须要考虑的,程序要能容忍0到100秒的数据延迟的功能,也就是同步的问题。不要小看这几十秒,问题很大的,如果你的站点有交互式功能,比如即时聊天,你可以想象一下是个什么结果。对于即时聊天的东西,可以用反向代理来解决(成本较高)。但是对于留言和评论的影响不大,但是如果系统为了健壮做了缓存和静态化的时候,这个东西可能就是灾难性的了。静态文件的更新和重写需要异步的方式来做。

    六.分散你的程序,如果你没有太多的资金构筑动辄百万的服务器,建议把功能分散开来,比如相册一台服务器,留言一台服务器

    七.看好你的程序员,如果没有很好的激励措施的话你的程序员很容易写出敷衍性的代码,而这个可能就是将来的大患,程序架构定下来后要修改可能就要费牛劲了。最好你的CTO能对你100%的衷心,100%的负责。

    八.文件同步的问题,这个问题可能你觉得没有必要,如果你看一下网通和电信的TTL就明白了,同步要支持续传,并且不能是持续的,否则你的成本会高出N倍,流量大的时候需要采用同步服务器进行更新,不要期望能通过你的软件实现,交给你的程序员吧,把上面的话告诉他他就知道怎么做了。   
 
    九.最狠的一个问题了,也是吃亏最大的问题,不管您跟网警的关系多好,看好你的用户,审核好你的东西,一被停机可能就致命,本人就吃过N次亏。
   
    十.对于缓存和静态文件,应该采用独立的缓存服务器,对缓存维护和文件索引维护,并更新和删除
 
最后,祝各位站长一番风顺,大展宏图。
8
5
分享到:
评论
6 楼 loveni 2008-07-08  
好文章,让普通的web程序员了解了更多的东西
5 楼 garion 2008-07-06  
多谢楼主,看了楼主的文章,感悟良多,最近正在为这些事情犯愁,呵呵!
4 楼 levin51 2008-07-06  
楼主,这是你原创吗?
3 楼 fight_bird 2008-07-06  
楼主的经验让人受益匪浅,我这种老鸟也深感佩服。

对于高负载的应对,架构是最重要的,也就是说系统从设计之初就要有充分考虑,故楼主的文章对站主有很大的参考价值。

其实很多中小站主并不是没有考虑过高负载的应对问题,但往往受限于技术能力或创业资源,前者是硬伤,没法回避的,后者却是值得关注的,一个问题:创业之初是否值得为未来的高负载投入资源?理性的做法:“架构设计上优先考虑,技术实现上适可而止”,除非资金、技术力量都很到位,否则不能过早的投入资源应对未来的高负载,这种投入要和你的站点的用户规模相适应,要在合适的时候进行恰当的投入,不能仅考虑技术因素。
2 楼 chang 2008-07-05  
楼主真是经验丰富,看了楼主的文章真是可以了解不稍东西。

我有一问,希望楼主能不吝赐教:

现在主机托管100M独享的那种,对于一般web应用,如果不考虑其他因素,仅考虑带宽能支持多大的访问量?
文中的公司A,B,C,D都是把机器托管在IDC吗?还是有其他的方案?

谢谢
1 楼 saharabear 2008-07-05  
谢谢,收藏,受益终生。

相关推荐

    Web2.0标准教案

    ### Web2.0标准教案深度解析 #### 一、Web2.0标准概览 Web2.0标准教案旨在提供一套全面的指南,帮助开发者理解并应用Web2.0时代的最新标准来构建高质量的网站。这不仅仅涉及技术层面的更新,更强调了标准化在提升...

    PE修正版 WinPE2.0修正版

    标题中的"PE修正版 WinPE2.0修正版"指的是Windows Preinstallation Environment(Windows PE)的一个定制化版本,这是微软开发的一个轻量级操作系统,主要用于系统安装、维护、故障恢复等场景。WinPE2.0是这个环境的...

    U盘启动制作(2.0.1.9)修正版

    U盘启动制作(2.0.1.9)修正版,纯净的U盘写入工具,找一个纯净的PE ROM即可

    [企业政府]E7联盟企业网系统 v2.0修正版_sc_web.zip源码ASP.NET网站源码打包下载

    [企业政府]E7联盟企业网系统 v2.0修正版_sc_web.zip源码ASP.NET网站源码打包下载[企业政府]E7联盟企业网系统 v2.0修正版_sc_web.zip源码ASP.NET网站源码打包下载[企业政府]E7联盟企业网系统 v2.0修正版_sc_web.zip...

    JingpinkeSystemApp 2.0 beta修正版

    《JingpinkeSystemApp 2.0 beta修正版详解》 JingpinkeSystemApp 2.0 beta修正版是一款专为用户打造的高效、便捷的系统应用软件,其核心在于提供稳定、流畅的使用体验。这次的修正版更是针对上一版本中的问题进行了...

    3--[10首脍炙人口的音乐(修正版)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    3--[10首脍炙人口的音乐(修正版)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[10首脍炙人口的音乐(修正版)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[10首脍炙人口的音乐...

    SEED-XDS USB2.0(WinXP修正版)

    WinXP修正版是针对Windows XP操作系统进行优化的版本,解决了在该系统下无法识别SEED-XDS USB2.0设备的问题,确保用户能够顺利地进行程序的调试和开发。 在Windows XP操作系统中,由于兼容性或驱动程序问题,有时会...

    计算器V2.0修正版(版本号V2.0.3.6)

    【计算器V2.0修正版(版本号V2.0.3.6)】是一款基于VB.NET编程语言开发的计算器应用程序。VB.NET是Microsoft .NET框架下的编程工具,以其直观的语法和强大的功能深受开发者喜爱,尤其适合创建桌面应用程序。这款...

    CGI网龙购物系统修正版2.0

    CGI网龙购物系统修正版2.0是一个专为电子购物设计的应用程序,它基于Common Gateway Interface(CGI)技术,旨在提供一个高效、安全且用户友好的在线购物平台。CGI是一种在Web服务器上运行外部程序的标准协议,使得...

    红意网 v2.0完美修正版

    《红意网 v2.0完美修正版》是一款基于网络技术的综合网站系统,它集成了多种功能模块,包括论坛(动网BBS)和留言簿等互动元素,旨在为用户提供一个全面、个性化的在线交流平台。这个版本是原版“艺术流氓程序”的...

    简易投票系统修正版2.0(源代码)

    在这个修正版2.0中,保存结果功能的实现可能包括以下步骤: 1. 当投票结束后,将投票结果(每个选项的票数)整理成结构化的数据。 2. 选择合适的存储方式,可能是文本文件(如CSV或XML格式)、二进制文件,或者是...

    Nokia Monitor Test v2.0测屏软件

    《Nokia Monitor Test v2.0测屏软件详解》 Nokia Monitor Test v2.0是一款由诺基亚公司推出的屏幕检测工具,主要用于帮助用户检查和诊断计算机显示器的各种问题。这款软件尤其对拥有诺基亚设备或者使用诺基亚显示...

    和平之翼Java代码生成器SMEU版2.0正式版源码,研发代号:红头船

    和平之翼代码生成器SMEU 2.0 正式版。 2.0版 Code Name: Chinese Sailboat 红头船 致敬伟大的中国航海传统。 和平之翼代码生成器SMEU 2.0正式版,一键支持下拉列表和多对多,已支持Oracle数据库。 本版是和平之翼...

    E7联盟企业网系统 v2.0修正版_sc_web.zip

    【E7联盟企业网系统 v2.0修正版】是一个专为企业和政府设计的网络管理系统。这个系统的修正版表明在原有版本的基础上进行了优化和修复,旨在提供更稳定、更高效的服务。作为一款开源软件,其源码可供参考,对开发者...

    Ajiu AspWebServer V2.0 服务器 (版本号2.0.2.4)

    Ajiu AspWebServer V2.0 服务器 (版本号2.0.2.4) 最后更新: 2009-04-13 顾名思义,本软件是一款小巧轻盈的Asp Web服务器,她,能几近完美的支持ASP~~ 如果您厌倦了IIS的庸肿,如果您不愿意第N次重装IIS,如果您...

    易语言坦克大战2源码,易语言坦克大战2.0修正版

    易语言坦克大战2.0修正版源码,坦克大战2.0修正版,子程序定义数组,子程序数组成员被销毁

    Discuz v2.0(0820修正简体版)

    描述中的 "Discuz v2.0(0820修正简体版)" 重复了标题的信息,强调了这是一个针对中文用户的修正版,意味着它修复了可能存在的问题,提高了对中国用户友好性的支持。 【标签解读】 "论坛社区类" 标签表明这个软件...

    PHP代码生成器2.0(memcache)修正版

    4, BindForm() 自动绑定表单数据配合Add()、Edit()使用减少大量代码,极大提高开发效率 D_表名(静态方法类) 1, 查询一条数据 GetModel($id)、 GetModelByWhere($where) 2,查询多条数据 GetList($PageSize,$...

    中国视觉设计黄页 v2.0修正版

    通过分析和学习《中国视觉设计黄页 v2.0修正版》的源代码,开发者可以提升自己的编程技能,学习到如何构建一个高效、用户友好的设计资源平台。 此外,这个资源包对于学习和研究网站架构和设计原则的人来说也是宝贵...

    网络精英出版系统 v2.0修正版

    《网络精英出版系统 v2.0修正版》是一款基于ASP.NET技术开发的高效能网络出版解决方案,主要针对之前版本中ACCESS数据库无法登录的问题进行了修复,确保了系统的稳定性和数据处理能力。在此次修正版中,用户现在可以...

Global site tag (gtag.js) - Google Analytics