架构师训练营第 1 期 - 第 5 周 - 学习总结
一、分布式缓存架构
缓存:存储在计算机上的一个原始数据复制集,以便于访问。---维基百科
缓存 cache --- 用于多次读取数据。读写比 2:1 才合适用缓存。
缓冲 buffer --- 读 : 数据由 低速设备 -->读入 缓冲(buffer)--> 读出
写: 数据先写入缓冲(buffer)中 --> 再写入低速设备
缓存数据存储 --- Hash 表
缓存的关键指标 -- 缓存命中率
影响缓存命中率的主要指标:
缓存键集合大小(集合越小越高)
缓存可使用内存大小(越大越高)
缓存对象生存时间(TTL Time To Live)(越长越高)
常见的缓存实现形式:
代理缓存(用户端)、反向代理缓存(数据中心)、多层反向代理缓存(数据中心)
以上 3 种都是 通读缓存。
通读缓存 (read-through): 客户端-->通读缓存 -->如果通读缓存未命中,代理连接到服务器获取实际数据。
旁路缓存 (cache-aside) : 对象缓存是一种旁路缓存,旁路缓存通常是一个独立的键值对(key-value)存储。
应用代码通常会询问对象缓存需要的对象是否存在,如果存在,它会获取并使用缓存的对象,
如果不存在或已过期, 应用会连接主数据源来组装对象,并将其保存回对象缓存中以便将来使用。
浏览器对象缓存
本地对象缓存 (缓存服务 与使用该缓存服务的应用服务 部署 在同一台物理服务器上)
本地对象缓存构建分布式集群
远程分布式对象缓存
Memcached 分布式对象缓存
=========================================================
一致性 Hash 算法 --- 针对分存式缓存集群的扩容问题。
======================================================
合理使用缓存:
数据不能频繁修改,读写比 2:1 以上.
有热点的访问(如微博,微信朋友圈 等)
数据不一致和脏读 (a.合理设置缓存失效时间 b.数据有更新时,删除该缓存)
防 缓存雪崩
缓存预热 -- 对于热点数据在应用服务启动时,先进行缓存预热。
防 缓存穿透
Redis
支持复杂的数据结构(String, Hash Tables, Linked Lists, Sets, Sorted Sets)
支持多路复用异步 I/O 高性能
支持主从复制高可用
Redis 原生集群 与 share nothing 集群模式
===============================================================
消息队列 --- 优化写性能
消息生产者-->消息队列-->消息消费者
点对点模型
发布订阅模型
好处:
实现异步处理,提升处理性能(写性能)
便好的伸缩性
削峰填谷
解耦
失败隔离 和 自我修复
实现案例 : 事件驱动架构 EDA --- 减少各应用服务间的耦合表面积。
产品:Kafka --- LinkedIn 出品, Scala 语言开发,专门针对分布式场景进行了优化,伸缩性比较好。
------------------------------------------------------------------------------------------------------
负载均衡架构 --- 1.请求何时分发 2.如何选择 web 应用服务器
HTTP 重定向负载均衡 (效率低,安全低)
DNS 负载均衡
反向代理负载均衡 (例如 Nginx ,适用于小规模集群--几台到几十台应用服务器的集群)
IP 负载均衡 (网络层--第 3 层)-- 缺点:响应数据包可能很大,便网络带宽成为瓶颈。
数据链路层 负载均衡 (数据链路层 -- 第 2 层)-- 修改 MAC 地址
也称 “三角模式”。
====================================================
负载均衡算法:
轮询
加权轮询
随机 --- 加权随机
最少边接
源地址散列(不利于高可用)
==========================================================
应用服务器集群的 Session 管理:
高可用架构设计 --- 基于服务无状态。
Session 复制 、 Session 绑定(不利于高可用)
利于 Cookie 记录 Session (实践中是可用的)
共享 Session 服务器(集群)-----目前最佳方案。
版权声明: 本文为 InfoQ 作者【wgl】的原创文章。
原文链接:【http://xie.infoq.cn/article/499b8b3c9e3e1114b341973da】。未经作者许可,禁止转载。
评论