架构的依据:
并发量和数据量
1.使用缓存技术,例如redis、memached
2、横向拓展(使用集群)
3、拆分高负荷服务、独立为单一模块,构建分布式
4、大表数据切片(分库、分区、分表)
5、使用搜索中间件(solr、elasticsearch)
架构解决之session跨域共享问题
1、负载使用hash(ip)简单说就是在当一个客户端进行访问的时候,负载在为其分配一个服务器的时候,生成一个ip与其绑定,这样当客户端再次发起访问的时候,访问的依旧是上一次访问的服务器,这样当然,这样是有问题的,这样就会导致特定的用户访问时一直是这台服务器,如果恰巧某台服务器的用户在同一天不停的访问,那么,这台服务器就承受不了
2、使用redis共享session
架构解决之缓存问题
一般来讲,缓存是这样进行的:
1、一个请求,先到缓存中进行查找,如果存在,直接返回
2、如果查询不到(缓存穿透、击穿),则调用接口或者直接查取数据库,并将此值放入缓存中
3、缓存中数据可能和数据库中的值不一致,使用过期时间调节
4、若缓存中数据在某一时刻大量同时失效,造成大量的对数据库或者接口请求操作,此刻即为缓存击穿(雪崩)
5、缓存穿透,当数据库和缓存中都没有此数据,但用户还在不停地发起请求,这样就会造成每次这个请求都要去存储层查询,失去缓存的意义
解决上面问题
1、不设置过期时间,数据永久有效
2、此时需要额外的机制来实现数据的同步
3、解决缓存穿透(使用布隆过滤器,或者在缓存中设置key-null键值对,后者设置的过期时间不能太久,因为可能会有很多的空值,这样会占用内存空间)