1.海量数据 2.用户多 3.高并发 4.大流量 5.需求变更快 6.安全环境恶劣 7.渐进式发展
初级网站的发展过程:
一台服务器->(随着数据的增加)分成应用服务器与数据服务器->(增加数据)产生缓存(存在应用服务器与dbserver之间)->数据逐渐增大(产生集群)
缓存是把数据存储相对I/O操作较快的介质中
CDN内容分发网络(目的优化)
布属在网络运营商的机房里,本质是缓存
优点:提高效率,提高了用户体验度
缺点:增加了费用
缓存的意义:不经常改变,高读写比的热点
劣势:脏读 缓存预热 缓存穿透
八二原则 (80%的访问量落在了20%的页面)
分布式缓存:
代表:memcache的优点
1.简单的通信协议
2.丰富的客户端程序
3.高性能的网络协议libevent支持事件触发的网络通信程序库
4.高效的内存管理
六种负载均衡算法
1、轮询法
2、随机法
3、源地址哈希法
4、加权轮询法
5、加权随机法
6、最小连接数法
互不通信的服务器集群架构
缓存穿透:一般的缓存穿透是按照Key去查找对应的value,如果对应的value不存在的话,那么就去数据库进行查找,但是这个对应的 value一定不存在的话,那么key并发量很大的话,就会直接访问数据库,这就叫缓存穿透。
解决的方法:
对查询的结果也进行缓存,缓存的时间设置的短一点,或者放到一个大的Bitmap中,查询时通过bitmap过滤。
缓存雪崩:
当缓存服务器重启或者大量缓存集中在一个时间段失效,这样在失效的时候,也会给后端系统带来很大的压力。
解决方法:
1.在缓存失效后,通过加锁或者队列来控制数据库写缓存的数量。
2.不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀点。
脏读,不可重复读,幻读:
脏读:当一个事务在进行对数据库的修改,但是修改还没有提交到数据库,这时另一个事务也访问这个数据,然后使用了这个数据。
不可重复读:当一个事务之内多次读取同一个数据,在这个事务还没有结束时,另外一个事务也访问同一数据,那么在第一事务在两次访问数据中,第二事务的修改,那么第一事务两次读到的东西是不一样的,因此成为不可重复读。
幻读:第一个事务对一个表中的数据进行了修改,这种修改涉及到全部数据,但是在修改的过程中,第二个事务在中插入了一条新数据,那么就会发现这条数据没有被修改,就好像发生了幻觉一样,称之为幻读。