大型网站技术架构 读书笔记

web 前端 优化

浏览器
  减少http请求  合并css js  图片
  浏览器缓存
    缓存更新 —  更新文件名
                         逐量更新  防止服务器压力突然增大
  启用压缩  gz
  页面渲染  css最上面  js最下面
  减少cookie    css js带cookie没意义   启用不同域名 这样请求静态资源就不会带上cookie


CDN加速  网络链路层优化


反向代理服务器  缓存



应用服务器
   分布式缓存  memcache
       缓存穿透   对取不到的值也缓存   防止攻击


磁盘
  机械磁盘  顺序读快   随机读慢
     数据库系统   2层索引B+树     3层
     Nosql   LSM树  N阶合并数  先操作内存中的树  超过阈值才与磁盘树合并


  RAID 廉价磁盘冗余列阵
   N块磁盘  
   RAID0   写入磁盘时  分成N份并发写入 读取, 读写快     无备份
   RAID1   同时写入2块磁盘  备份
   RAID10    RAID0  RAID1  结合  所有磁盘分成2份  并发写  同时备份
   RAID3  分成N-1份  写入N-1块磁盘  第N块记录效验数据  (第N块相当于备份所有数据)  N磁盘容易坏
   RAID5  和RAID3相似  但不是固定写入第N块  循环写入所有磁盘  备份数据平均分布到所有磁盘
   RAID6  和RAID5类似  但数据只写入N-2块磁盘  2块磁盘做备份 循环写


HDFS 服务器集群规模的备份


无状态服务
   session管理
      session复制    机器数量上去后   开销大
      session绑定stick     单点失败
      cookie 记录session     cookie大小限制  每次都要传输cookie  关闭cookie不正常
      session服务器       分布式缓存  数据库


服务 高可用
  分级管理       核心服务  非核心
  设置请求超时     请求会占用太长时间   占用连接资源
  异步调用  减少等待时间    有些业务没法异步 必须确认成功才能往下走
  服务降级  拒绝服务   关闭功能
  幂等设计    防止重复调用


高可用 数据 
   缓存高可用   缓存是不是必要  是提供缓存可用  还是  加强数据库

   CAP
    分区耐受性        P    数据不会丢失   分区
    可访问性           A    数据可用
    数据一致性       C    分区数据不一致
              数据强一致
              数据用户一致      分区不一致  但同一用户看的到一致
              数据最终一致


数据备份
    冷备   简单  廉价     不能保证数据最终一致     不能保证可用(恢复备份要花时间)

    热备    异步写入(一个写入就算成功)master slave   同步写入(全部写入才算成功)无主从



失效转移
   失效确认      心跳检测  访问失败报告
   访问转移
   数据恢复     恢复可用数据副本个数



软件质量保证
  网站发布       切掉流量  再部署     恢复流量
  自动化测试
  预发布验证  smoke test    外部用户无法访问      处理错误  fast failed
  vcs  
       主干开发 分支发布    主干反应整个应用状态   便于管理 控制 持续集成, 并行开发时, 发布周期不同,主干可能是半成品状态(一部分做完了,一部分没做完)
       分支开发 主干发布     分支独立  互不干扰
  自动化发布  train 模型
   灰度发布  用户测试  AB测试


运行监控
    用户行为日志收集
        服务器端日志   浏览器端js日志收集
    性能监控    CPU MEM IO
    运行数据报告    缓存命中率  响应时间   业务数据

监控管理
    系统报警
    失效转移
    自动优雅降级
   


  
伸缩性设计  scalability
    物理分离
       单一服务器-》数据库分离-》缓存分离-》静态资源分离

    分层分离
    业务分离


    单一功能服务器集群


服务器负载均衡
    http重定向负载均衡
    dns域名解析负载均衡
        Dns有缓存  生效要时间
        实践中作为第一级负载均衡
    反向代理负载均衡
        缺点  所有请求 响应的中转站   性能瓶颈
    IP负载均衡
         修改网络包IP地址
    数据链路层负载均衡
         修改mac地址,响应数据回去时不改IP不经过负载均衡服务器(进来时会经过) 代表产品 LVS

负载均衡算法
    轮询  round robin
    加权轮询  weighted round robin
    Random
    Least connections
    Source IP hashing



缓存服务器集群
    memcache
        客户端API hash 分布
         缺点 扩容的时候缓存需要重新计算offset 大部分会miss   解决办法 访问量少的时候扩容  模仿访问来预热缓存

   
    一致性hash算法
         有2的32次方个节点的环,集群服务器分布在环上,根据key算出对应的hash,看环上离此hash值最近的节点,放置数据。  当新加入服务器节点时,影响的只是一部分(key hash上次最近节点的数据),原有节点在环上分布越多,影响越少。
         缺点是新加入的节点只分散了离它最近服务器的压力,解决办法是把一个物理节点虚拟成N个节点,分布到环上。这样新加入的机器可以分担N个节点的压力
         通常使用二叉树查找


数据缓存服务器集群
    关系数据库
        主从读写分离
        业务数据分库(跨库不能join)
        数据多分片
            扩容时数据需要迁移,一致性,可访问性。 解决办法,每个mysql实例上有多个子表, 新加服务器时,对一部分子表做同步复制,复制完成后,修改路由

    invalid notification


    nosql
        hbase  由若干HRegion组成,每个HRegion存储一段key range的数据,当数据多时,key range分裂,分布到不同服务器做数据迁移



扩展性  extensibility
    开闭原则
    低耦合系统

    降低耦合的方式   分布式队列    分布式服务

    分布式队列
        事件驱动

    分布式服务
        巨无霸系统
            编译部署困难
            代码分支管理困难
            新增业务困难

        纵向拆分
             新业务为一个独立的web app
       横向拆分
             复用的业务拆分出来  部署为分布式服务

       分布式服务特点
           负载均衡
           失效转移
           高效远程通信
           对应用最少侵入
           版本管理
           实时监控
     



网站安全
    xss攻击   cross site script
        危险字符转义
    sql注入
        参数消毒, sql预编译和参数绑定
    csrf攻击  cross site request forgery
        token  页面请求参数中嵌入随机数, 服务器端验证随机数
        验证码
        referer check

    error code
    html注释
    文件上传执行
    路径遍历


web 应用防火墙
网站安全漏洞扫描
信息加密技术 密钥安全管理
    单向散列加密   md5 sha  加盐
    对称加密算法  DES  RC
    非对称加密   RSA  信息安全传输(公钥加密,私钥解密)  数字签名(私钥加密,公钥解密)


密钥安全管理
   密钥 算法  放在独立服务器
   解密算法在应用系统, 密钥在独立服务器


信息过滤 反垃圾
    文本匹配    trie算法   多级hash表   降噪处理
    分类算法   Bayes算法
    黑名单


电子商务风险控制
    账户风险    黑客盗用  恶意注册账号
    买家风险    恶意下单  抢购低价商品  欺诈退款
    卖家风险   虚假发货 炒作信用    侵权品
    交易风险   信用卡盗刷  支付欺诈


风控



分布式存储系统故障
    瞬时故障 - 网络不好,GC,线程忙,  可自行恢复
           自行重试
    临时故障 - 网卡松动,系统升级,停机维护,内存坏,cpu过热,   人工干预恢复
           读 - 路由到正常服务器, 写 - 临时存储服务器
    永久故障 - 硬盘损坏,数据丢失
            备份服务器做替换



秒杀系统架构
    设计部署专门的秒杀系统

     技术挑战
            现有业务的冲击,高并发下数据库负载,网络带宽增加,直接访问下单的url
            独立部署,            秒杀页面静态化,      临时租借带宽,CDN,        页面url加入随机数

             页面购买按钮变亮,静态化页面里加入js控制, 静态页面刷新会动态请求js(文件小)


              秒杀商品只有一个,保证只有一个用户买到。
                      放少量用户进入系统,其余直接显示秒杀结束页面





前端架构
    CDN  动静分离 图片服务  反向代理  DNS

应用层架构
    开发框架 页面渲染 负载均衡 session管理 动态页面静态化 业务拆分 虚拟化服务器

服务层架构
    分布式消息 分布式服务 分布式缓存 分布式配置

存储层架构
    分布式文件 关系数据库 nosql 数据同步

后台架构
    搜索引擎 数据仓库  推荐系统

数据采集与监控
    浏览器数据采集 服务器业务数据采集 服务器性能数据采集 系统监控 系统报警

安全架构
    web攻击 数据保护

数据中心机房架构
    机房架构 机柜架构 服务器架构

猜你喜欢

转载自renxiangzyq.iteye.com/blog/2401237
今日推荐