技术选型(一)
本周是跟随李智慧老师学习架构师训练营的第五周,现将本周学习内容总结如下:
1.分布式缓存
缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加速数据的读取速度。
缓存(Cache)和缓冲(Buffer)的区别:
缓冲:用于低速与高速设备之间读写数据时用于缓冲数据的一种中间存储。例如写数据时,先将数据写入Buffer再通过Buffer将数据写入磁盘。
缓存类型:
操作系统缓存
CPU缓存
JVM缓存
应用缓存
分布式对象缓存
数据库缓存
CDN缓存
代理与反向代理缓存
前端缓存
缓存的关键指标就是缓存命中率。缓存命中率是指能多少次重用一个缓存来相应业务请求。
影响缓存命中率的主要指标:
1)缓存键集合大小:一个应用能够生成的所有键集合数量。键越多,重用机会就越小。
2)缓存可使用内存空间大小:物理上能缓存的对象越多,命中率就越高。
3)缓存对象生存时间:TTL(Time To Live)。对象缓存时间越长,命中率越高。
通读缓存(read-through):代理缓存、方向代理缓存,CDN缓存。请求未命中时获取实际数据。
旁路缓存(cache-aside):缓存对象不存在时,访问原数据并更新缓存。
分布式缓存一致性Hash算法:基于虚拟节点。
各种介质数据访问延时
一般来说数据的读写比在2:1缓存才有意义。
缓存常见问题:
缓存预热
缓存雪崩
缓存击穿
缓存穿透
redis预先分配16384个桶。
2.消息队列
点对点模式
发布订阅模式
消息队列的好处:
1)异步处理,提升处理性能
2)更好的伸缩
3)削峰填谷
4)失败隔离和自我修复
5)解耦
通过消息队列可以实现基于实践驱动的架构
主要MQ产品对比
RabbitMQ:性能好,社区活跃,erlang开发
ActiveMQ:可跨平台,java开发
RocketMQ:性能好,可靠性高,java开发
Kafka:针对分布式场景进行了优化,分布式伸缩性较好,Scala开发,LinkedIn出品。
3.负载均衡
1)http重定向负载均衡
2)DNS负载均衡
3)反向代理负载均衡
4)IP负载均衡
5)数据链路层负载均衡:同一虚拟ip,通过 MAC地址进行负载
常用负载均衡算法:
1)轮训
2)加权轮询
3)随机
4)最少连接
5)源地址散列
Session集群管理:
1)Session复制
2)Session绑定
3)利用Cookie记录Session
4)Session服务器
作业一(2 选 1):
用你熟悉的编程语言实现一致性 hash 算法。
编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性。
评论