架构师训练营 第五周 总结

用户头像
Poplar
关注
发布于: 2020 年 07 月 07 日

缓存

缓存是一种介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,缓存用来加快读取速度。

缓存分为旁路缓存和通读缓存两种。使用者去读缓存,如果发现没有,再去数据源读,读完之后写入缓存,这种叫旁路缓存。使用者只读缓存,如果缓存没有数据,缓存本身会自己去数据源读取,这种方式叫通读缓存。

缓存有代理缓存、反向代理缓存、CDN、分布式缓存等等,缓存越前命中,就越能节省带宽资源。

如果缓存使用的是到期自动失效,而不数据更新时由应用删除,那就有可能会发生脏读,如果接受不了脏读,则需要在数据更新的同时将缓存删除,这时就需要使用者针对不同场景去选择对应的方式。

持续访问一些不存在的key就会造成缓存穿透,解决方案是将不存在的key也缓存,或者使用布隆过滤器。某一些key在失效之后,又碰到大量的请求访问这个key,此时就会造成缓存击穿,解决方案是为写入增加一个锁。大量key同时失效就可能造成很多个请求到达数据库,从而造成数据库不可用,这是缓存雪崩,缓存雪崩的解决方案是尽量不对key设置相同的失效时间,如果允许脏读,可以先延长缓存时长,再更新缓存。

缓存集群的一致性hash算法使用一个hash环,将由真实节点虚拟出来的虚拟节点分布在环上,在存key的时候,算出key的哈希值,沿着环查找,找到等于key或者比key小的一个最大节点,将数据放在对应节点上。这个算法主要目的是在增减节点时,缩小受到影响的范围。



队列

消息队列可以用来解耦,让不同的应用之间不再相互依赖,而是通过发布消息达到通知业务发生的目的。消息队列也可以用来削峰填谷,在访问高峰期时,应用接收到请求之后,会将数据方到队列中,从而增加应用的吞吐量,让应用不会因为高峰期而崩溃。

使用消息队列的时候,也需要注意,因为消费者消费消息可能成功也可能会失败,所以应用在将数据写入队列之后,返回通知用户时,不要返回操作结果,而是要告诉用户类似“请求正在处理”这样的信息,避免因为消息消费失败而造成用户投诉等问题。



负载均衡

HTTP重定向负载在用户第一次访问时,返回一个302,让用户重定向,这种方式不安全,真实服务器都暴露给用户,并且重定向给用户体验也不好。

DNS负载,根据用户地址,dns解析的时候返回不同的ip,使用DNS负载的时候,最好返回的是负载均衡服务器,因为DNS更新很慢,应用服务器会经常更新,甚至可能会宕机,如果DNS负载给的是应用服务器地址,那么当这些事情发生的时候,就会给用户带来不好的体验。

反向代理负载,用户访问反向代理服务器,由反向代理服务器访问应用服务器,应用服务器将数据返回给反向代理服务器,由反向代理服务器返回给用户,这种方式瓶颈会在反向代理服务器上。

ip负载,请求到达负载服务器上,服务器修改ip数据包的请求和目标ip,从而将请求转发到应用服务器,应用服务器将数据返回给代理服务器,代理服务器返回给用户,这种方式比反向代理好处在于这个是在ip层,效率更高,但是瓶颈也在负载服务器上。

数据链路层负载,请求到达负载服务器,负载服务器修改mac地址,从而将请求转发到应用服务器,应用服务器处理完成之后,将请求发回给客户,这是最高效的一种方式。

负载均衡算法:轮询、加权轮询、随机、最少连接、ip hash。

负载下的会话状态管理:session同步、session绑定(ip hash或者读请求头的cookie,这种方式被淘汰的原因是因为业务快速发展,会话绑定会影响系统升级,因为被绑定的那个机器可能会升级,这样会话就丢失了,系统不可用)、cookie上保存用户信息(cookie消耗带宽,用户也可能禁用cookie)、分布式session。

负载均衡服务器本身的高可用可以通过vip实现。



数据库集群

mysql可以通过binlog和relaylog实现从主服务器复制到从服务器上,这种方式下写只写主服务器,读可以读主从服务器,一般来说主从复制只复制对数据的增删改,不会同步表修改,因为表修改的同步时间很长,那么这段时间内的数据就不会被同步,从而造成很长一段时间内数据不一致。一主多从可以分摊负载,方便备份。

如果想要保证mysql主服务器的高可用,则需要使用双主策略,双主策略会同步对方的写操作,每个主服务器都有自己的从服务器,但是双主策略最好只选择一个服务器进行数据写入,因为双写有可能会造成数据冲突,双主是为了解决高可用的问题,不是解决写性能的问题。双主策略下的主服务器切换可以使用vip或者zookeeper之类的实现。

修改数据库的时候,如果加字段,需要先改数据库再上应用,删字段的时候,需要先上应用,再改数据库。

用户头像

Poplar

关注

还未添加个人签名 2018.04.23 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第五周 总结