服务器的划分:
1) 文件服务器: 图片 文件
2) 代理服务器:LINUX + nginx作为反向代理,把客户的URL路径路由到不同的服务器
3) web服务器:IIS Nginx
4) 应用服务器:负责系统中各个业务逻辑的提供,比如用户中心,结算中心,支付中心
5) 缓存服务器:Memcached
6) 数据库服务器:
带宽的计算:PV = page view; 假设100万的PV,则每秒访问12次 1000000/3600*24=12;
假设每个页面100K,峰值流量为平均流量的5倍 12*100K*5*1000*8
架构的演变过程:
1起步: web服务器 + 数据库服务器
||
增加缓存,优化策略,减少HTTP请求,压缩CSS,JS,图片大小(将MicrosoftAjax.minifile 集成到VS2010)
增加页面缓存和增加数据缓存(cnblogs上的缓存全解析)对js,css压缩
自构服务器进行IDC托管
WEB服务器 + IIS缓存 + 数据库服务器
||
2 增加WEB服务器.
问题:如何确定URL保持不变? (使用代理服务器Ngnix)
如何保持状态信息同步,比如SESSION?(状态服务器?不常用,不稳定!SQL保存!)
如何保持数据缓存信息同步?
如何让上传文件这类似的功能继续正常?(创建FTP服务器,一段时间后,其它WEB服务器同步!创建文件服务器)
||
3 客户端 + 代理服务器Nginx + web1 web2 web3 + DB
||
分库,分表,分布式缓存
分表:五千万条记录一般要分表,使用一致性哈希算法
分库:一个数据库就一个DB文件,当文件太大时,或达到读写极限时,就要考虑分库
将数据库分到不同的磁盘中
按业务进行分库,减少IO的瓶颈,
Memcache redias 分布式缓存:引入缓存服务器
垂直分区:根据业务逻辑
水平分区:按哈希分N个库
1.数据库的集群
2.数据库的通讯-同义词和连接服务器
Memcache 在分布式系统架构中的应用:固定机器数量时,保证对相同KEY的访问会被发送到相同的服务器
||
4 IIS开WEB园,硬件负载,分布式文件系统,不停的增加WEBService
WEB园最多能开5个SVC.处理方式同增加5台服务器
客户浏览器 - DNS负载均衡 - 硬件负载(F5,bean)(稳定,冗量大,但是价格贵) - Nginx(软件负载平衡)-WEB1 WEB2 WEB3 WEB4 - DB1 DB2 DB3
||
5 当数据库读写资源非常激烈,导致系统变慢,则要进行读写分离,通过性能检测器分析
Master(W) => Stave1(r) || Stave2(r) || Stave3(r)
订阅和发布 两种方式:推 拉 ( 通知 查询)
解决:廉价存储方案 NO SQL(not only SQL)
非关系型的数据库
NO SQL 大量应用于微博系统等事务性不强的系统
Big Table
MongoDB
参考: http://tech.it168.com/topic/2011/10-1/nosql/app/index.html
||
大型分布式应用时代和廉价服务器