1. 网站架构角色
1.1. 最基础的架构
1.2. 升级版的架构
1.2.1. CDN
内容分发网络,实时根据网络流量,节点等信息,把用户的请求导向离用户最近的服务节点上.
-
最简单的CDN网络由一个DNS服务器和几台缓存服务器组成:====>简单的理解就是一个带缓存的代理.
- 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器.
- CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户.
- 用户向CDN的全局负载均衡设备发起内容URL访问请求.
- CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求.
- 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:
- 根据用户IP地址,判断哪一台服务器距用户最近;
- 根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;
- 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力.
- 基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址.
- 全局负载均衡设备把服务器的IP地址返回给用户.
- 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端.
- 如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地.
-
常用CDN:
- 腾讯云
- 阿里云
- 又拍云
-
阿里CDN原理:
1.2.2. 代理
这里主要是用来实现负载均衡.
- 负载均衡
- Nginx
- LVS
- HAProxy
- 代理:
- Squid
- Varnish
- Nginx
- HAProxy
1.2.3. Web服务器
- IIS
- Apache
- Nginx+phpfpm
- Tengine:淘宝的Nginx分支
- Tomcat+jdk
- Nginx+uwsgi+python
1.2.4. 存储
比如一些用户图片等.可以是云存储,如果是头像等公开信息,也是可以放到CDN上
-
GFS
-
FastDFS
-
HDFS
-
GlusterFS
1.2.5. 缓存服务器
比如Redis等,把一些热点数据直接放到Redis中.
- Redis
- Memcache
1.2.6. DB服务器
- MySQL
- MariDB
- PostgreSQL
- Oracle
- MongoDB
2. 常用集群解决方案
2.1. Web集群
-
Keepalived+lvs
-
heartbeat+nginx
-
haproxy
2.2. MySQL集群
-
mysql-proxy:mysql
3. 小型网站架构
3.1. 单机
LNMP
- UV:几百
- PV:几千
- 配置:1核1G
- UV:不过5000
- PV:几万
- 配置:4核4G
3.2. 双机
- UV:超过5000
- PV:10万
- 配置:
- Web:4核4G
- DB:4核8G
- UV:上万
- PV:几十万
- 配置:
- Web:8核8G
- DB:8核16G
3.2.1. 增加缓存
- UV:上万
- PV:几十万
- 配置:
- Web:8核8G
- Memcached或Redis等
- DB:8核16G
- Web:8核8G
3.3. Web集群+db主从
缓存放在Web服务器上.可以节省一些内网的带宽.
- UV:十万
- PV:过百万
- 配置
- 两台Web:8核8G
- NFS是用来共享存储,如用户图片等.
- Memcached或Redis存储Session
- 可以使用DNS轮训来实现负载均衡.
- 两台DB:16核32G
- 现在从可以用来备份
- 或者修改代码实现读写分离
- 两台Web:8核8G
3.3.1. 使用硬件来实现db读写分离
3.3.2. 负载均衡
主要是防止单点故障:
4. 中型网站架构
Web服务器是可以横向扩容的.
瓶颈可能在DB或存储上.
4.1. Web集群+一主多从
- UV:可能几十万
- PV:接近千万
- 配置:
- 基本都是8核8G或8核16G
- Web端可能需要跑Redis或Memcache
- 主数据库可能需要16甚至32核.
4.2. 使用SAN存储+多层从
这时需要引入SAN存储,单主从已经不能满足需求了
- UV:接近百万
- PV:几千万
- 配置:
- A从数据库1和主都是16或32核
注意:
- A从数据库1:不提供读服务,只用来给B层的从提供binlog复制服务.可以有多个.
4.3. 分库分表
数据库中可能有些表上亿条数据了.
- 当然缓存也是需要做集群
5. 大型网站架构
业务拆分
每一个业务就类似一个中型网站架构. 每一个业务一个域名或者子域名