架构师训练营 - 学习总结 第 5 周

发布于: 2020 年 07 月 08 日

缓存:

满足就近原则,关键指标是缓存命中率。影响缓存命中率的主要因素有缓存键集合大小,缓存可使用的内存空间,缓存对象的生存时间等。

代理缓存:分为正向代理和反向代理,其中反向代理又可设为多层,例如分发层和应用层。

缓存有两种处理模式:

通读缓存:例如代理缓存,反向代理缓存,CDN缓存等。

旁路缓存:例如浏览器对象缓存,本地对象缓存,远程分布式对象缓存等。

远程分布式对象缓存中,memcached使用客户端的一致性hash算法来选择特定服务器做存储;redis是服务器端采用CRC16计算得到hash值 mod 16384得到的节点索引来选择特定服务器(有一组节点列表)做存储。

注意技术栈各个层次的缓存,是互联网漏斗模型,越靠近客户侧节省的资源越多。

注意缓存的合理使用: 频繁修改的数据、没有热点的访问等不适合使用缓存;注意数据一致性问题,要么让业务接受有一定延迟的最终一致性方案,要么用开销较大的分布式锁保证强一致性。

缓存雪崩的预防:

1)事前:redis集群保证高可用性,双机房部署。

2)事中:redis cluster已经彻底崩溃 => 缓存服务实例启用ehcache本地缓存,对redis访问的资源隔离,对源服务访问的限流以及资源隔离。

3)事后:redis恢复后,用备份数据启动;数据丢失或过旧,则用快速缓存预热启动。缓存服务里,熔断策略,自动可以恢复,half-open,发现redis可以访问了,自动恢复了,自动就继续去访问redis了。

缓存穿透的解决:

如果这个数据不存在的话,往redis和ehcache等缓存中写入一个失效时间较短的空的数据。

消息队列:

作用有异步、解耦和削峰。

主要产品比较:

activemq适合小型项目,吞吐量不高,社区不活跃,不推荐在生产上使用。

rabbitmq主从架构,erlang语言开发,较难定制,单机万级。

rocketmq和kafka都是分布式架构,吞吐量比rabbitmq高,单机十万级。rocketmq的topic从几十到几千,性能只有小幅下降,MQ功能比较完备;

kafa支撑较少的topic数量即可,保证其超高吞吐量,主要支持较简单的MQ功能。

rocketmq和kafka都是java语言开发,相对容易定制。kafka相对适合大数据领域的实时计算和日志收集。

注意引入消息队列如何保证其高可用性,重复消费的幂等性问题,消息的可靠性传输问题,消息的积压问题处理等。

负载均衡:

相对简单,有HTTP重定向负载均衡、DNS负载均衡、反向代理负载均衡、IP负载均衡、数据链路层负载均衡等。

负载均衡算法:轮询、加权轮询、随机、加权随机、最少连接、源地址散列、目的地址散列等。

应用服务器的session管理:目前是基于redis做分布式的集中存储。

分布式数据库:

这里指关系型数据库,主从复制保证读的高并发,便于冷备和高可用。主主复制保证写的高可用,可以做失效转移和故障恢复。

其他: 待续。。。

发布于: 2020 年 07 月 08 日 阅读数: 4
用户头像

铁血杰克

关注

还未添加个人签名 2017.12.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 学习总结 第 5 周