大型Web架构思想系列专题之-以空间赢得时间

      我们在日常生活中很多地方有意识或无意识的都遵循一个规律-以时间赢得空间。比如动荡的中国股市,个股大多的做法用时间赢得空间。另外在《论持久战》从始至终贯穿一条主线-防御、相持、进攻,典型的“持久战”就是一种时间赢得空间得做法。现实中这样的实例应该是举不胜举。

      我们今天这里要探讨的恰恰跟我之前的思路是背道而驰的,是站在一个全新的角度来考虑的。说到这里我还得从上一篇文章的一个大型Web案例开始切入。产品库MW级、会员库KW级、Web并发5K、图片库KG,有人问这组数据时怎么来的,有两点,其一该新版本之前的资源已经带到一定数量,构建新版站点实际也是在很多问题上遇到了瓶颈。其二我们根据既定的业务流程做了压力需求测试分析,报告结果大约90%的数据交互压力,10%的静态文件压力,90%里面大约有20%来自实时数据压力,另外根据现有的资源文件体积和产生该数据的时间轴加上增长率等因素从而可以推算出,上线后有效上线时间内的最高数据容量。从需求的角度来考虑,首先要解决几个大的瓶颈问题。

    1、如果数据库最大的一个库要达到1010数据,那么维护这一堆数据将变得异常艰难。
    2、图片库的数据量达到250bit,首先是要解决存储设备的问题,其次是图片类别及目录深度和目录大小的算法问题。
    3、站点并发在5k,意味着大量的硬件设备要参与协同工作了。

      不难看出上面的问题,已经逐渐开始暴露空间问题了。在IT行业尤其是Web站点类的地项目,直观上很忌讳的东西大致有几个,速度慢、品味低(我通常理解为页面不漂亮)、用户体验差。所以我们想方设法赢取时间。有几个概念我要先提一下好为我下面的陈述做铺垫。

    思考时间(Think Time):由交互系统产生的提示符或消息的结束至用户响应开始之间消逝的时间。
    Web思考时间:浏览器在收到响应后到提交下一个请求之间的间隔时间。
    并发(Concurrent):用于说明两个或多个活动在同一时间间隔内发生,指交错的活动或同时执行的活动。
    在线(Online):关于输入数据直接从初始点进入计算机或输出数据直接发送至所用的点的系统或部件。
    WEB在线用户数:用户通过浏览器访问登录WEB应用系统后,并不退出该应用系统。通常一个WEB应用服务器的在线用户对应WEB应用服务器的一个Session。
    WEB并发用户数:WEB服务器在一段时间内为处理浏览器请求而建立的HTTP连接数或生成的处理线程数。当所有在线用户发送HTTP请求的思考时间为零时,WEB服务器的并发用户数等于在线用户数。

      在维护大量库结构数据的同时还要考虑高并发数,而且前提是速度不慢,那么显然如果从数据库来下手的话,我首先考虑的就是库表散列(逻辑上一张表的数据可能物理上存储在多张表上),然后通过数据库的集群机制解决,因为数据库的水平扩充远大于垂直扩充。接下来我们讨论海量图片库,曾经团队有人跟我说用存储器可能就能解决,其实不然,而且那样开销也是惊人的。据说google机房还有大量类似pc机在高负荷运转。我的经验告诉我服务器的数量远比服务器质量要重要,当然也不是绝对的,其实我这样做也是业界统一思路:开源节流。用google的话来说就是机房的每台机器几乎都要燃烧了。榨干服务器的所有资源,这种感觉还蛮好的。在图片问题上我的解决方案是通过多台服务器,组成一个图片库群,彻底分离服务器I/O,实际上图片服务期最大的瓶颈也就是I/O啦。通过类似反向代理方式将不同类型图片分布在不同机器上。这样一个点出了问题还不至于站点整体瘫痪。以上种种做法实际上都是通过增大空间存储来节省时间开支。
    
      这些天有不少朋友给我邮件,探讨Web应用发展及这个专题的延续问题。既然有这么多人关心这个专题,我想我会一直写下去的。有的时候我还总在想大家到底最需要的是什么,或许大家可以给我一点建议,比如最关注的问题是什么,也许不同研究领域的朋友会有不同的理解方式和解决方法,但我想我会认真认真思考每个人的意见。我想用截稿最后一位朋友给我邮件里的一句话结束这一个专题,没有做不到的-只有偷懒而错过的。

posted on 2008-10-31 15:42  JerryChang  阅读(2494)  评论(20编辑  收藏  举报