初级网站架构图示
原创内容欢迎转载,请注明出处:http://dushii.blog.163.com/blog/static/17305193200883044111183/
网站基本架构图示:
仅供参考,这个架构是针对仅有数台服务器的一般应用,门户型应用肯定要复杂的多。
本图由亿图图示专家绘制,此绘图软件值得推荐。
主要矛盾
对于高并发的网站系统,最早暴露出来的问题就是数据库瓶颈,超级牛的数据库系统也很快会成为访问速度的瓶颈。所以,欲提高访问速度首先要解决的瓶颈就是数据库访问。策略就是
一、缓存:
1、Squid前端缓存;
2、Memcached后端缓存;
3、创建外部索引文件,如使用Sphinx;
二、数据库服务器阵列:
1、将数据库读写操作分开,分为主从服务器;
2、主从服务器分别按照一定规则设置成阵列;
总之,尽量减少对数据库的请求数量,进一步使用负载均衡,最大程度降低单台服务器的压力。
使用Nginx做负载均衡的理由:
- 免费使用
- 高连接并发,能够支持高达 50,000 个并发连接数的响应
- Nginx采用C进行编写, 内存、CPU开销少
- 配置文件简单
- 支持url重写,支持GZIP压缩节省带宽
- 超级稳定,几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动
- 国内已经有多家知名网站使用 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主从阵列等使用可以找下相关详细的资料。
以后会有补充。