Week05 学习心得 - 技术选型
分布式缓存架构
什么是缓存?
是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取时,用于加快读取的速度。
数据存储:Hash表
缓存命中率
是缓存的关键指标
影响命中率的主要指标:
缓存键集合大小
缓存可使用内存空间
缓存对象生存时间(TTL)
缓存的分类
通读缓存
代理缓存
反向代理缓存
CDN缓存
旁路缓存
浏览器对象缓存
本地对象缓存
远程分布式对象缓存
Memcached分布式对象缓存
缓存的优势
为什么缓存能显著提升性能
缓存数据通常来自于内存,比磁盘上的数据有更快的访问速度。
缓存存储数据的最终结果形态,不需要中间计算,减少CPU资源的消耗。
缓存降低数据库、磁盘、网络的负载压力,使这些I/O设备获得更好的响应特性。
优势
技术简单
性能提升显著
应用场景多
缓存可能会存在的典型问题
缓存雪崩
当缓存失效时,DB会因为不能承受如此大的压力而宕机。
与缓存击穿不同的是:缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查DB。
缓存击穿
当缓存失效时(但DB中有),这时并发读热点数据,缓存没读到数据,又同时去DB取数据,引起DB压力瞬间增大,造成过大压力。
缓存穿透
指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,这将导致这个不存在的数据每次请求都要到DB查询,失去了缓存的意义,量大时可能会造成DB宕机。
消息队列与异步架构
消息队列构建异步调用架构
组成:消息生产者、消息队列、消息消费者
常见的消息队列异步调用架构模型
点对点模型
发布订阅模型
消息队列的好处
实现异步处理,提升处理性能
更好的伸缩性
削峰填谷
失败隔离和自我修复
解耦
主要MQ产品比较
RabbitMQ
性能好,社区活跃
ActiveMQ
影响广泛,跨平台,Java友好
RocketMQ
Java开发,性能好,可靠性高
Kafka
分布式的伸缩性好
负载均衡架构
负载均衡的实现方案
HTTP重定向负载均衡
DNS负载均衡
反向代理负载均衡
IP负载均衡
数据链路层负载均衡
负载均衡算法
静态:轮询、加权轮询、随机、原地址散列
动态:最少链接、最快响应速度、观察模式
分布式数据库
MySQL分布式数据库架构
主从复制
一主多从复制
优点:
分摊负载
专机专用
便于冷备
高可用
主主复制
MySQL复制需注意:
主主复制的2个DB不能并发写入
复制只能增加数据的杜并发处理能力,没有增加写的并发能力和存储能力
更新表结构会导致巨大的同步延迟
版权声明: 本文为 InfoQ 作者【莹】的原创文章。
原文链接:【http://xie.infoq.cn/article/3746e655f64e7d0f6cce5ce32】。文章转载请联系作者。
评论