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

本文与前四篇文章内容关联不大,将主要讨论网站在压力下演变过程中的一般性。

作为一个网站管理员来说,但网站遇到性能瓶颈,那就会思考,为什么网站遇到的性能问题,有什么样的解决思路。在前四篇中,我们讲到了一些办法,讲得最多的是拆分应用或者叫做垂直划分。那为什么会产生垂直划分这种思路?

来思考下以下的几种场景:

1、任何一台服务器安装Windows操作系统,并没有出现性能瓶颈;
2、全世界有那么多的小网站,如果把它们当作一个整体,那么他们并没有遇到性能瓶颈。

这就表明,性能瓶颈的出现是因为把用户往有限的服务器上集中而产生的。而作为一个网站,一般来说,为了方便我们的用户或者说是打造一个良好的品牌,一般来说只是有一个或者几个域名。那么问题就产生了。如果把大量的用户当作是一条河流,但网站初期的时候,这条河流是干枯的。随着网站的发展,河流里的水位越来越高,而我们的网站实际上起到了一个水闸的作用。但一个水闸不能满足的时候,我们用多个水闸来进行分流,像是98年特大洪水的时候在某些地方进行泄洪。这种应用就是垂直分割。而上面描述的第二中场景可以看成是有N个水闸的情况。但水流量过大,水闸越少,那么压力就越大。

实际上我认为,网站其本身是因为internet的产生而产生的,那其局限性也是由internet的解决方案引起的。假设,我们的一个域名可以绑定到N台服务器上,就不会产生web服务器性能上不能满足的情况。也就是说域名指向的那台服务器就是水闸,水闸能通过的水是有限的。要让水闸能通过尽可能多的水,有一些办法,在其他地方也开水闸,或者扩大这个水闸,或者加快水的流速。

在其他地方加水闸,就是垂直分割,把用户浏览导入到不同的子域名上,而子域名是可以绑定到不同的服务器上的。扩大水闸就是要在硬件上买更好的服务器,服务器就能有更好的性能。加快水的流速就是要让用户连接的时间尽可能短,这个不但是在web上,在网络游戏上也是如此。

实际上目前为止最为终极的解决方案还是让用户连接的时间尽可能短。为什么这么说呢?在理论上,一个网站可以划分为任意个子应用,但是不方便管理。比如你划分了5个应用,而5个应用中某个应用又产生了性能问题,怎么办?

在网络游戏服务端中(曾经作私服,见过传奇的服务端),连接、登录游戏等应用是分开的。用户在使用时并没有感觉,那就像是你把网站的数据库服务器和web服务器分离,并不会让用户察觉道理是一样的。在我们普遍开发中使用缓存等方式,提高用户操作的响应速度,但是用户并没有离开服务器。比如把www.a.com这样的域名,指向到111.111.111.111这样的IP地址(假定为服务器A),虽然这个地址的服务器在局域网内使用了一些办法让用户响应速度更快,但是用户并没有离开这台服务器。而现在像集群这样的方式,是通过4底层TCP/IP协议让其到达A服务器的请求重新执向到B服务器,然后B服务器收到的数据直接回发给client。这样,A服务器实际上的工作量就很小了,从而实现了网站的高负载,而实际上这些负载已经被分发掉了。

要出去和朋友吃饭,就先到这里了 ==~

posted @ 2009-09-25 17:55 Birdshover 阅读(...) 评论(...) 编辑 收藏