• 《大型网站技术架构》笔记


    最近又把《大型网站技术架构》看了一遍.而中间读了一本《计算机操作系统》的教材后,感觉对大型网站的技术架构有更深的了解。在此结合对这两本书的理解做一些笔记

    传统的OS(Operator System)有四个基本的功能:

    1. 处理机管理:以进程为基本单位,对其创建和撤销

          a)         进程控制

          b)         进程同步

          c)         进程通信

          d)         调度

      2.存储器管理

          a)         内存分配

          b)         内存保护

          c)         地址映射

          d)         内存扩充

      3.设备管理:完成I/O请求.提高CPU和I/O设备的利用率,提高I/O速度.方便用户使用I/O设备

          a)         缓冲    如果在I/O和CPU之间引入缓冲区,则可有效的缓和它俩速度不匹配的矛盾,提高CPU的吞吐量,进而提高系统的吞吐量

          b)         设备分配

          c)         设备处理:设备处理器又被成为设备驱动程序

      4.文件管理

          a)         文件存储空间的管理

          b)         目录管理

          c)         文件的读/写管理和保护

    架构的演变过程

    一、起初的网站直接用LAMP(Linux+Apache+MySQL+PHP)部署在一台服务器上

    这样会造成:

    1. 用户所有的请求都由这台服务器的多线程处理
    2. 所有的内存都在此服务器上(内存的获取速度比磁盘读取快N倍.最好把经常需要读取的数据放在内存中)
    3. 请求的处理(数据的处理:mysql中的数据都是通过磁盘存取的,这时候务必会涉及I/O处理)
    4. 用户上传的所有文件都在此服务器上

    综上所述:

    1. 这台服务器必须要有足够多的CPU处理器来同事处理用户的请求
    2. 必须有足够大的内存存储空间
    3. 磁盘存取的速度必须够快(例如固态硬盘)
    4. 硬盘必须足够大来存储文件

     除此之外,还有一些其他的问题.例如网络宽带等

    如我的博客服务器上行100k/s ,10个人就没人10K,2M的图片就得20秒,如果100人的话..

    综上所述,需对单一服务器进行分开部署:

    1. 请求服务器(多处理器.专门处理用户的请求)
    2. 缓存服务器(内存足够大.用于存储经常访问的数据.如用redis)
    3. 数据库服务器(采用固态硬盘)
    4. 文件服务器(足够大的硬盘空间)

    通过分开部署.每台服务器都发挥自己的特长,大大提高了效率

     而衡量一个网站的优越性,经常会考虑到一下五点

    1. 高性能

        a)         加载页面时,将静态文件部署到CDN第三方供应商服务器.以减少向服务器请求资源.

        b)         使用缓存.命中资源便立即返回,减少数据库读取操作(磁盘读取数据的速度比缓存慢N倍)

        c)         采用分布式.不同业务采用单独的服务器分开(避免请求集中化)

        d)         进行分布式集群.通过负载均衡算法把请求分发到集群服务器中的某台(一般用nginx反向代理服务器进行集群)

        e)         分布式缓存.让所有的缓存集中在这些专门做缓存的服务器(如redis)

        f)          将数据库的读写分离.(后期业务做大还有分库的可能)

        g)         采用消息队列(也就是异步)把次要的事件加到消息队列不用等待返回结果立即响应用户.最典型的例子就是12306的订单邮件提醒,一般买到票后好一段时间后才收到.这就是把邮箱提醒功能加到消息队列中

      2.可用性

        a)         对于用户而言,网站7*24小时可用不间断.这个是理想状态,一般来说4个9(99.99%)就差不多了

        b)         任意一台服务器的宕机都不会造成网站不可用.并且集群服务器之间有互相备份的功能,任何一台服务器宕机后不会影响应用的整体可用或者导致数据丢失

      3.可拓展性

        a)         当增加功能时只是增加开放接口,而不会对原有的功能产生影响,达到松耦合的效果

        b)         增值性业务的拓展.也是不会影响到其他业务

        c)         网站可收缩性的主要手段是事件驱动架构和分布式服务

      4.可伸缩性

        a)         向集群中增加或减少服务器的时候可以平滑过渡.用户的请求依然可以高命中.

            所以缓存路由算法非常重要(一般来说会用nginx负载均衡.的用轮询算法.像哈希求余等效果不好)

      5.安全性

        a)         能够防御XSS攻击

        b)         脚本注入的方式

        c)         发无效的源地址tcp包

  • 相关阅读:
    javascript动态添加删除表格
    用C#使用HttpWebRequest Post数据时如何保持Session
    embed 元素的用法
    Ylmf Linux Y1.15(Ubuntu)发行版正式发布
    使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
    开3389后不能登录的六种原因
    ASP.NET无限级分类的实现
    深入理解JavaScript函数
    php 简明语法
    PainTwon:Linux开源的2D格斗游戏
  • 原文地址:https://www.cnblogs.com/zewen/p/5891340.html
Copyright © 2020-2023  润新知