下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

网站、数据库的衍变之路(上篇)

作者:课课家教育the     来源: http://www.kokojia.com点击数:853发布时间: 2017-06-07 14:00:10

标签: 数据库数据库衍变数据交换

  最简单的一个网站,可能说是demo更加合适一些,部署上一台计算机上也可以正常运转。通常情况,这种部署方式是效率最高的。但是为什么说需要把web服务器数据库分开放置呢?这就牵扯到通信效率的问题。

  你写一个程序,无论是winform还是webform或者是windowsservice的,总会有两个对象需要交换数据吧?而数据交换大体上有这么几种方式:

  1、通过内存;

  2、通过硬盘;

  3、通过网卡。

  一、通过内存交换数据

网站、数据库的衍变之路(上篇)_数据库_数据库衍变_数据交换_课课家教育

  图1.1是两个类之间的数据交换,取款记录是“引用类型”,那么在“个人”使用的时候就是使用的原对象;而“余额”是值类型,会被拷贝过来使用。但是无论是值类型还是引用类型,这种在一个进程里的通信,都是通过内存进行数据交换的,这种也是速度最快的方式。像我家里的机器,内存的读写速度是6G/s左右。

  上面说了进程内部的通信是通过内存来进行的(这里忽略非主流的开发出来的程序),而进程间通信也存在用内存交换数据的情况。比如,内存文件映射。再比如,匿名管道。(这里不详述这些技术。)

  二、通过硬盘交换数据

 图1.1是两个类之间的数据交换,取款记录是“引用类型”,那么在“个人”使用的时候就是使用的原对象;而“余额”是值类型,会被拷贝过来使用。但是无论是值类型还是引用类型,这种在一个进程里的通信,都是通过内存进行数据交换的,这种也是速度最快的方式。像我家里的机器,内存的读写速度是6G/s左右。    上面说了进程内部的通信是通过内存来进行的(这里忽略非主流的开发出来的程序),而进程间通信也存在用内存交换数据的情况。比如,内存文件映射。再比如,匿名管道。(这里不详述这些技术。)    二、通过硬盘交换数据

  进程内也有这种数据交换方式,更多见的是在进程间交换数据时使用。在实现进程间通信时,内存文件映射、管道技术相对来说比读写硬盘上的文件稍微难理解一点,所以对速率要求不高的系统也有采用这种方式的。图2.1表现这种情况。现在的硬盘一般分为三种,IDE、SCSI和SATA(串口)。IDE硬盘的读写速度一般在10~100M/s之间,SCSI的最高速度320M/s左右,SATA有几个版本,1.0规范是150M/s,3.0规范是600M/s。可见硬盘的读写速度要比内存低好多,而且频繁读写硬盘另外一个坏处是硬盘相对内存来说容易坏。

  三、通过网卡交换数据

进程内也有这种数据交换方式,更多见的是在进程间交换数据时使用。在实现进程间通信时,内存文件映射、管道技术相对来说比读写硬盘上的文件稍微难理解一点,所以对速率要求不高的系统也有采用这种方式的。图2.1表现这种情况。现在的硬盘一般分为三种,IDE、SCSI和SATA(串口)。IDE硬盘的读写速度一般在10~100M/s之间,SCSI的最高速度320M/s左右,SATA有几个版本,1.0规范是150M/s,3.0规范是600M/s。可见硬盘的读写速度要比内存低好多,而且频繁读写硬盘另外一个坏处是硬盘相对内存来说容易坏。    三、通过网卡交换数据

  图3.1反映了通过网卡交换数据的情况。现在的网卡一般都是百兆千兆的,百兆网卡的实际传输速度大约是12m/s,千兆网卡的传输速度大约是100m/s。

  言归正传,为什么要把web服务器与数据库分开放置呢?在单机上放置不是能达到最高效率么?一旦分开放置,即使使用千兆网卡,那么数据传输速度也是大打折扣啊!这就要讲一个规模问题,网站规模小,这样存放当然没有任何问题(这里单从性能上分析,不考虑其它因素)。但是一旦规模比较大的时候就容易出现问题,这是系统瓶颈上的一个考虑。访问量大的时候很可能发生数据库跟web服务器抢cpu,而更糟糕的是,当尝试使用缓存来解决数据库占用大量CPU时,发现内存也被数据库占完了。当web与数据库分离的时候,网站就成长的更像一个网站了。这个时期的网站需要花很多心思考虑性能问题,工作也更加有挑战性了。

  可以当我们沾沾自喜的时候,麻烦的问题又来了,现在两台服务器,一台web一台数据库,性能又出现问题了。这个时期出现的问题相对来说还是比较简单的,因为就两个部分,不是数据库瓶颈就是web服务器瓶颈。当然,是数据库瓶颈的可能性更高一些。为什么这么说呢?一般来说,一个公司开发的网站是这种规模的时候,聘用的程序员都是刚入门不久的。而这个时期的程序员更加关心功能如何实现,对性能优化还没有很多经验。要是再去仔细研究数据库如何优化,如何让查询更有效率,学习改造成本还是相当高的。这个时候一般会采用避重就轻的办法——静态化。

  一、静态化的处理方案(特指生成文件方式)

  1、html静态方案

可以当我们沾沾自喜的时候,麻烦的问题又来了,现在两台服务器,一台web一台数据库,性能又出现问题了。这个时期出现的问题相对来说还是比较简单的,因为就两个部分,不是数据库瓶颈就是web服务器瓶颈。当然,是数据库瓶颈的可能性更高一些。为什么这么说呢?一般来说,一个公司开发的网站是这种规模的时候,聘用的程序员都是刚入门不久的。而这个时期的程序员更加关心功能如何实现,对性能优化还没有很多经验。要是再去仔细研究数据库如何优化,如何让查询更有效率,学习改造成本还是相当高的。这个时候一般会采用避重就轻的办法——静态化。    一、静态化的处理方案(特指生成文件方式)    1、html静态方案

  图1.1是最常用的静态化处理方式。IIS得到请求交给ASP.Net,根据路径ASP.Net判断是否已经生成这个请求的静态文件,如果存在,则直接输出文件,如果不存在,则读取数据生成静态页,并输出。这种方式最容易理解,准入门槛低,很容易就想到了。

  这样似乎解决了问题,但是新的问题来了。生成静态后的页面,所有人看到的都是一样的,并且现在数据库的数据更新了,现在怎么办?这个时候,如果不想对系统进行大的变动的话,最好的办法是用一段js替换掉需要按用户显示不同的地方,至于数据更新后静态文件更新的方法,制定一套策略就可以了。当然,这样并没有解决所有问题,例如,现在网站的整体风格都需要改变,难道全部生成一遍吗?

  前几年出了一个XML+xslt静态方案,可以解决网站风格变化问题。csdn的论坛改版(具体忘记哪年了),就使用过这种方案。这种方案是对html静态方案的发展。不过似乎效果并不是很理想,具体会遇到什么问题,贫道没用过,也说不清楚。==!

  2、动态页面作载体的静态方案

  这种方案是图1.1衍生品,把静态文件换成aspx文件。现在好了,可以解决更新风格、模板的问题了。因为生成的文件是aspx,就可以使用.net自带的模板解决方案了!当然,像某些部分需要显示用户相关数据的话,那没办法,还是得用js调用的方法。这个方案主要是用来解决统一风格网站更新风格问题的。

  经过上面的处理,一台web加一台数据库也能承受一定压力的访问了。压力是多大?按我的经验是15分钟4000PV左右是可以支撑的,再多的话,例如8000,那就很有难度了。当然前提是你的网页中,或者说被主要访问的网页中不能有iframe。当然,还要受具体带宽多少,机器配置是否足够,用户操作是否分布均匀等因素影响。

  二、缓存式方案

  ASP.Net就提高了现成的页面缓存方案,用起来感觉还不错。这种页面缓存式方案本质上也是静态化处理,不过这部分静态内容是放到了内存中。由上篇文章讲到的内存与硬盘速度的状况,就可以想到这种方案,速度比静态化的快。这种方案也存在局部区域需要特定显示问题,可以用局部静态化,或者也可以用js调用的方式处理。这种方式也不是完美的,主要表现在,一旦缓存了很大的内存,当ASP.Net进程池回收时,IIS容易死掉。

  于是乎,衍生出了进程外缓存。进程外缓存,是把缓存的数据放置到另外一个进程中,脱离了IIS。这种应用一般是windowsservice。本机的话可以用匿名管道,联网机器的话可以用Remoting、socket等方式与ASP.Net交换数据。这种方式效率没有放在IIS内部解决快,但是运行稳定是它的特点。最著名的应用就是MemCached。这种方式是缓存了数据而不是页面,数据在内存中,拿到ASP.Net页面进行数据绑定。这点是这种应用与前面三种最大的区别。

  小编结语:

  更多内容尽在课课家教育~~

  

赞(12)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程