架构师训练营第五周学习总结
分布式缓存——提高多次读取数据的效率
影响缓存命中率的指标有缓存键集合大小、缓存可用内存空间大小、缓存对象生存时间(TTL)
通读缓存(代理、反向代理、CDN)为客户端返回资源,并在请求未命中缓存时获取实际数据,旁路缓存(浏览器对象缓存、本地对象缓存、分布式对象缓存)的应用代码首先询问对象缓存需要的对象是否存在,如果存在则获取并使用缓存对象,如果不存在或已过期则从数据源获取对象并保存回对象缓存
频繁修改和没有热点的数据不适合缓存,读写比在 2:1 以上才有缓存的意义
缓存设计需要注意缓存雪崩、缓存穿透等问题,并且需要考虑缓存预热,而缓存预热加载的热点数据有 LRU 算法对不断访问的数据筛选淘汰而来
一致性 hash 算法使增加缓存服务器节点使只影响一小段 key 的查找,避免大部分 key 不能命中时给应用服务器和数据库造成巨大的压力。基于虚拟节点的一致性 hash 算法能均匀减小缓存服务器节点的压力
Redis 集群与之 16384 个桶,并维持物理节点与桶的映射关系,key 放入桶中,所有 Redis 节点彼此互联,客户端可以连接任一可用节点
消息队列——提升写性能,加快返回速度
消息队列常用模型有点对点模型和发布订阅模型
消息队列的优点:
能让系统对消费者更有针对性地进行伸缩
能削峰填谷,提高服务器计算能力地利用率
能实现失败隔离和自我修复
能解耦生产者和消费者
负载均衡
小型系统通常采用反向代理负载均衡,这种负载均衡性能较低,已于实现
大型系统可采用 DNS 和链路层多重负载均衡
常用的负载均衡算法有轮形、加权轮询、随机、最少连接、源地址散列等,其中源地址散列可保证同一来源请求在同一服务器上处理,可实现会话粘滞
Session 的管理方式有:
Session 复制,增加资源和性能压力
Session 绑定,不具高可用性
使用 Cookie,常用,不过 Cookie 大小有限,而且有些场景 Cookie 会被禁用
Session 服务器,能让应用服务器无状态化,更利于服务器的伸缩
版权声明: 本文为 InfoQ 作者【文智】的原创文章。
原文链接:【http://xie.infoq.cn/article/63a1edf1e5450869660711b2c】。未经作者许可,禁止转载。
评论