服务器架构方案二,支持百万级很轻松(改进版)

张映 发表于 2010-09-03

分类目录: 服务器相关

标签:, ,

以前写过一篇关于服务器架构方面的文章,里面的架构,有一些地方是可以改进的,因为有一些其他原因,当时就没有改进。现在可以把可改进的地方说一下。费话不多说,看一下刚做得图片。

服务器架构方法二

服务器架构方法二

我把服务器架构分成5大块

一,负载均衡块

二,web服务器块

三,数据缓存块

四,数据库块,

五,文件服务器块

上面只是个人理解

1,负载均衡这一块的话,如果访问不是特别特别大的话,用软件来负载均衡就可以了。如果你觉得用软件不够好的话,你可以用f5,要花钱买的。软件做负载均衡个人觉得lvs是最好的,根据个人的实际情况来选择,haproxy,apache,nginx等。

2,web服务器这一块,可以用nginx+php-cgi,apache+php-cli,apache+php-cgi这样的配合,这三种组合的效果如何呢,我做过测试,nginx +php-cgi,apahce+php-cli,cgi的比较,经过这个测试我发现nginx+php-cgi的效果是比apache+php-cli,apache+php-cgi要好,所以web服务器这一块,我们可以用nginx+php-cgi

3,数据缓存块,在这里的缓存指的就是内存缓存,在web服务器和数据库之间,加上内存缓存来减少对数据库的请求。数据库很容易产生瓶颈的地方,重点保护对像,哈哈。文件服务器上面装上varnish,用来缓存静态文件,个人觉得varnish比,squid,apache,nginx对静态文件的缓存效果要好,varnish的命中率很高,缓存过一次后,一般情况下都不会miss的。有空我把这几情缓存的效果做一下测试。

4,数据库这一块,根据自己的实际情况来决定数据库服务器的台数,以及决定使用什么软件来实现数据库集群,常用的有mysql replication,mysql proxy,mysql cluster,drdb等。我做过测试mysql proxy 的效果比较差。mysql proxy 问题 效率太差 慢 郁闷

数据查寻这一块,引入了sphinx全文件检索,对于一般查询id啊,查询name之类简单的,我们直接用数据库的一般查询就行了,如果对于内容特别多的字段来进行查询的话,用like的话,效率太差了。例如:文章简介,文章内容。sphinx号称可以支持亿级检索。sphinx mmseg mysql 中文分词,现在有集成版的,coreseek如果我没有记错的话,那个时候,集成版的,我的电脑还装不了。

5,文件服务器块,其实就是存放文件的地方,对存放的文件进行监控,在这里推荐一下fastdfs,服务器端很小,支持集群,客户端有php,perl,java版的等。对于做下载类,视频类的网站来说,文件服务器肯定很多,例如youku,土豆等。做个集群还是很有必要的。FastDFS分布式文件服务器安装,及配置FastDFS分布式文件客户端安装,以及fastdfsapi

不断的学习,不断的改进中。欢迎探讨



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/server/996.html

6 条评论

  1. hover_sky 留言

    请问博主:

    varnish服务器分别和web服务器、lvs是什么关系?谢谢

  2. 张映 留言

    先说明一下,文件服务器上也是个web服务器,为了区分开了,所以就叫做文件服务器了,在用户请求和文件服务器中间加了一层缓存(工具是varnish)。

    用户对web服务器进行请求时,先经过lvs,通lvs进行负载均衡后决定分配到哪台web服务器,
    对web的请求,我把分它分成二类,一类经常变动的,一类是非变动的。
    1,变动的,例如:产品信息,用户评论等。
    2,非变动的,例如:公司简介,商品图片,flash等一些不要经常变动的静态文件

    如果是动态的话,不要用varnish来进行缓存(转向图中的web1,web2),如果静态的话,用varnish来进行缓存(转向图中的文件服务器),怎么区别静态和非静态,可以通过文件的后缀来区分。

    文中所提到的文件服务器可以和web1,web2放在一起,根据自己的实际情况而定了

    分析有误的地方还请指教。哈哈。

  3. hover_sky 留言

    博主,

    谢谢您的指导。

    您的服务器是放在国外啊,国外的时间啊!

    您说的大体意思我理解,但我想问的是:
    由谁来判断静态或动态?

    假设web请求被lvs分发到web1,然后由web1服务器来判断静态还是动态请求,然后做出对应的处理?

    是这样吗?

  4. 张映 留言

    指导不敢当,相互探讨,国内不备案不给上线,逼着我们这些可怜的小站长,往国外跑。

    有二个方法可以实现:

    1,利用负载均衡功能的反向代理功能,文件服务器根web服务器分开,这个时候,产生的二级域名,如:file.51yip.com,负载均衡工具把这个域名反向代理到文件服务器,因为个人系统的原因,我没有装lvs,我想lvs也会支持反向代理的。

    2,varnish,squid都根据请求的后缀来选择要缓存什么和不缓存什么,你可以看一下http://blog.51yip.com/cache/618.html,http://blog.51yip.com/server/638.html这个里面东西,如果按这种思想的话,文章中所画的图片就要改一改了,把静态缓存(varinsh,squid等)放到负载均衡和web这间,动态的放过,静态的缓存。

  5. hover_sky 留言

    lvs仅仅是一个负载均衡器而已吧,不支持反向代理吧。

    看lvs官方的文档,从头到脚,都是负载均衡!

  6. ticket 留言

    2010年就发表的文章,现在才看到学习,感觉走远了!