服务器架构 分布式架构


服务器的划分:


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=