zoukankan      html  css  js  c++  java
  • 后台需要考虑问题

    1、Session机制

    →服务端Session被包含在Web容器里,存储在内存中
    →Web容器给每一个连接生成一个sessionid值
    →服务端Web容器把sesssionid值放置到http协议的cookie中
    →客户端接收响应,并把来自服务端的sessionid值保存到本地
    →客户端再次发送请求,把sessionid放在cookie中传递给服务端
    →服务端通过sessionid找到内存中存储的该用户

    2、如何保持不同服务器间的Session同步

    让服务器之间的Session不断复制和传递。

    3、是否服务器越多,支持的并发数也越多?

    不一定。web应用所能承载的并发数不是简单地随着服务器的增加而线性提升的,当服务器的数量达到一个临界值后,整个web应用的并发数还会下降。

    因为,不同服务器之间的Session传递和复制本身也消耗服务器资源,当服务器数量越多,消耗的资源也越多,当用户请求越多,系统消耗的资源也越大。

    4、独立缓存服务器

    将Session的数据保存在一台服务器上,如果一台服务器不安全,可以使用memcached这样的分布式缓存服务器。

    5、把Session存储到浏览器的Cookie中

    早起的淘宝用了这个策略,因为只是跟踪用户的状态。

    6、负载均衡硬件

    将用户的请求均匀分布到服务器集群。

    7、负载均衡软硬解决方案

    不仅可以将请求均匀分布,还可以根据sessionid值找到对应的后台服务器。虽然这种做法比不同服务器间拷贝传递Session高效,但比存cookie效率低下,如果某台服务器挂了,那连接到该服务器的用户会话都会失效。

    8、云平台的负载均衡和Session同步

    好的云服务器会帮助我们解决负载均衡和Session同步,但也要做好数据备份。

    9、何时使用SOA分布架构

    如果通过添加几台服务器就能解决问题,就不需要考虑分布式架构。

    10、网站按读写分类

    有些企业网站、专业类网站,操作的部分大于展示的部分,写大于读。而像百度这样的网站,读大于写。

    11、数据库读写分离

    一个数据库负责写,称为主库。一个数据库负责读,称为副库。副库的数据都是从主库导入的。浏览器数据的时候有点延迟。主库也有一个读的压力,就是主库和副库的数据同步。

    12、分布式缓存

    对读数据进行分离,把经常不变化的分类放到缓存里。

    13、对数据操作的合并

    facebook对数据的任何操作都是事先合并为批量操作,以减轻数据库压力。

    14、海量数据如何提高读的效率

    采用搜索技术,将数据库的数据导出到文件里,对文件建立索引,使用倒排序索引技术检索信息。

    15、分布式缓存的实现原理
     
    比如分布式缓存memcached,包含缓存集群,即多台服务器,缓存数据通过一定的算法均匀分布在不同的服务器上,如果用户A缓存服务器A上,那么服务器B上就没有用户A的缓存数据。
     
    有一种算法是:根据key值计算出一个hash值,这个hash值再除以缓存服务器的个数,得到的余数对应不同的服务器。这样的算法如果一台服务器挂掉,损失的缓存数据不少。
     
    还有一种算法是:一致性hash算法,可以让某台服务器宕机的时候对整个缓存数据影响最小。
     
    16、什么时候采用数据库读写分离方案
    当网站的读写比例严重失衡时候,采用读写分离方案。读写分离方案是一种低成本解决存储瓶颈的方案,但不是革命性方案。
     
    17、硬盘机制与读写
    大圆盘飞速旋转,有一个磁头不断扫描硬盘。
     
    写操作在高并发情况下变得稍复杂,高并发情况下可能会出现多个用户修改同一条数据,为了保证数据被唯一的用户修改,就需要把并行的操作转变城串行的操作,这时候用到一个锁机制。锁机制会消耗系统性能。
     
    读操作,读的性能也是硬盘顺序和速记读能力的体现。
     
    18、为什么要引入缓存?
    缓存将数据存在内存中,而内存的效率是硬盘效率的几万倍。
      
    19、为什么要引入搜索技术?
    当数据量很大的时候,模糊搜索用到了like操作,这时候like的效率极其低下,而搜索技术的随机访问性能更加高效。
     
    20、拆分主库数据,垂直拆分和水平拆分
    比如在电商系统里,商品表和交易表数据量会很大,这时候,可以把这两张表单独建在不同的数据库了,这就减轻了主库的压力,这种做法叫做数据库的垂直拆分。
     
    如果单库单表的数据又很大,还可以把一张表的数据分布到不同的数据库中,这叫水平拆分。
  • 相关阅读:
    css选择器解析规则
    swiper轮播图包含视频或图片
    css实现文字选中变色
    swiper鼠标滚轮事件
    C语言中,关于相除的问题
    输入测试字符型数据的组数,再输入字符型数据,排坑
    C语言中,字符型数字与常数型数字的加减实现
    C语言的指针用法:输入一堆字符,把非字母的删去。
    C语言中倒序输出你输入的数。
    C语言中,嵌套的if语句的一些经验...
  • 原文地址:https://www.cnblogs.com/HansZimmer/p/8968723.html
Copyright © 2011-2022 走看看