初级网站架构图示

来源:互联网 发布:胖熊数据库熊片截图 编辑:程序博客网 时间:2024/04/29 03:39
网站基本架构图示:
仅供参考,这个架构是针对仅有数台服务器的一般应用,门户型应用肯定要复杂的多。

 

本图由亿图图示专家绘制,此绘图软件值得推荐。


 
主要矛盾
对于高并发的网站系统,最早暴露出来的问题就是数据库瓶颈,超级牛的数据库系统也很快会成为访问速度的瓶颈。所以,欲提高访问速度首先要解决的瓶颈就是数据库访问。策略就是
一、缓存:

1、Squid前端缓存;
2、Memcached后端缓存;
3、创建外部索引文件,如使用Sphinx;

二、数据库服务器阵列:

1、将数据库读写操作分开,分为主从服务器;
2、主从服务器分别按照一定规则设置成阵列;


总之,尽量减少对数据库的请求数量,进一步使用负载均衡,最大程度降低单台服务器的压力。

使用
Nginx做负载均衡的理由:

  1. 免费使用
  2. 高连接并发,能够支持高达 50,000 个并发连接数的响应
  3. Nginx采用C进行编写, 内存、CPU开销少
  4. 配置文件简单
  5. 支持url重写,支持GZIP压缩节省带宽
  6. 超级稳定,几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动
  7. 国内已经有多家知名网站使用 Nginx 作为Web服务器或反向代理服务器


详细介绍
客户端在浏览器地址栏输入域名后,将首先访问最前端的代理服务器,静态文本型文件有此服务器直接返回,这里设置了单独的图片服务器,适合图片非常多的网站。将一部分特定的url代理到后端Squid服务器,Squid服务器根据url地址检查是否有缓存的内容,有则返回给前端服务器,否则再访问后端的php应用,获取内容并缓存以备下次访问。Squid服务器可以是一台,也可以是按一定规则组织的阵列。

PHP应用也可以是一台或者一个阵列,单台服务器的情况比较简单,阵列的话需要考虑客户端session回话的问题,解决的办法有二:

1、阵列服务器共享session回话,如统一使用memcached存储session;
2、前端服务器能判断客户端是属于哪个php服务器处理,并始终将此客户端代理给这个php应用;


比较这两个办法,从可扩展性的角度为长远考虑,第二种办法可能更为妥当。对于首次访问php应用的客户端,采取轮回规则进行负载均衡,php给客户端设置一个cookie方式的标记,再次访问则根据cookie信息链接到先前的php应用上。

比如:设置一个cookie信息host=n,n是一个数字,nginx可以获取客户端的cookie信息字符串,
upstream  backend  {
    server   backend1.example.com       weight=5;
    server   backend2.example.com:8080;
}

if ($http_cookie ~* "host=([^;]+)(?:;|$)" ) {

   proxy_pass http://192.168.0.$1;
} else {
   proxy_pass http://backend;
}

memcached数据缓存、sphinx站内搜索、mysql主从阵列等使用可以找下相关详细的资料。 

原创粉丝点击