写点什么

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

用户头像
wgl
关注
发布于: 2020 年 10 月 25 日
架构师训练营第 1 期 - 第 5 周 - 学习总结

一、分布式缓存架构

缓存:存储在计算机上的一个原始数据复制集,以便于访问。---维基百科

缓存 cache --- 用于多次读取数据。读写比 2:1 才合适用缓存。

缓冲 buffer --- 读 : 数据由 低速设备 -->读入 缓冲(buffer)--> 读出

写: 数据先写入缓冲(buffer)中 --> 再写入低速设备

缓存数据存储 --- Hash 表

缓存的关键指标 -- 缓存命中率

影响缓存命中率的主要指标:

缓存键集合大小(集合越小越高)

缓存可使用内存大小(越大越高)

缓存对象生存时间(TTL Time To Live)(越长越高)

常见的缓存实现形式:

代理缓存(用户端)、反向代理缓存(数据中心)、多层反向代理缓存(数据中心)

以上 3 种都是 通读缓存

通读缓存 (read-through): 客户端-->通读缓存 -->如果通读缓存未命中,代理连接到服务器获取实际数据。

旁路缓存 (cache-aside) : 对象缓存是一种旁路缓存,旁路缓存通常是一个独立的键值对(key-value)存储。

应用代码通常会询问对象缓存需要的对象是否存在,如果存在,它会获取并使用缓存的对象,

如果不存在或已过期, 应用会连接主数据源来组装对象,并将其保存回对象缓存中以便将来使用。

浏览器对象缓存

本地对象缓存 (缓存服务 与使用该缓存服务的应用服务 部署 在同一台物理服务器上)

本地对象缓存构建分布式集群

远程分布式对象缓存

Memcached 分布式对象缓存

=========================================================

一致性 Hash 算法 --- 针对分存式缓存集群的扩容问题。

======================================================

合理使用缓存:

  1. 数据不能频繁修改,读写比 2:1 以上.

  2. 有热点的访问(如微博,微信朋友圈 等)

  3. 数据不一致和脏读 (a.合理设置缓存失效时间 b.数据有更新时,删除该缓存)

  4. 防 缓存雪崩

  5. 缓存预热 -- 对于热点数据在应用服务启动时,先进行缓存预热。

  6. 防 缓存穿透


Redis

  1. 支持复杂的数据结构(String, Hash Tables, Linked Lists, Sets, Sorted Sets)

  2. 支持多路复用异步 I/O 高性能

  3. 支持主从复制高可用

  4. Redis 原生集群 与 share nothing 集群模式

===============================================================

消息队列 --- 优化写性能

消息生产者-->消息队列-->消息消费者

点对点模型

发布订阅模型

好处:

  1. 实现异步处理,提升处理性能(写性能)

  2. 便好的伸缩性

  3. 削峰填谷

  4. 解耦

  5. 失败隔离 和 自我修复

实现案例 : 事件驱动架构 EDA --- 减少各应用服务间的耦合表面积。

产品:Kafka --- LinkedIn 出品, Scala 语言开发,专门针对分布式场景进行了优化,伸缩性比较好。

------------------------------------------------------------------------------------------------------

负载均衡架构 --- 1.请求何时分发 2.如何选择 web 应用服务器

HTTP 重定向负载均衡 (效率低,安全低)

DNS 负载均衡

反向代理负载均衡 (例如 Nginx ,适用于小规模集群--几台到几十台应用服务器的集群)

IP 负载均衡 (网络层--第 3 层)-- 缺点:响应数据包可能很大,便网络带宽成为瓶颈。

数据链路层 负载均衡 (数据链路层 -- 第 2 层)-- 修改 MAC 地址

也称 “三角模式”。

====================================================

负载均衡算法:

  1. 轮询

  2. 加权轮询

  3. 随机 --- 加权随机

  4. 最少边接

  5. 源地址散列(不利于高可用)

==========================================================

应用服务器集群的 Session 管理:

高可用架构设计 --- 基于服务无状态。

Session 复制 、 Session 绑定(不利于高可用)

利于 Cookie 记录 Session (实践中是可用的)

共享 Session 服务器(集群)-----目前最佳方案。


发布于: 2020 年 10 月 25 日阅读数: 31
用户头像

wgl

关注

正走在系统架构设计师路上的程序员。 2017.12.07 加入

还未添加个人简介

评论

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