第五周学习心得

发布于: 2020 年 07 月 08 日

缓存

缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取时候,用于加快读取的速度。

缓存Cache和缓冲Buffer的区别:缓冲是用于平衡两个设备多谢不一致(如内存和硬盘),而缓存是用于多次多取

缓存的基本数据结构

通常采用Hash表,计算HashCode跟Hash表大小区余获取存储索引

缓存命中率

依赖于能多少次重用同一个缓存响应业务请求;

影响缓存命中率的因素包括:缓存键集合大小、缓存可使用内存空间、缓存对象生存时间。

  • 键集合空间是你能生成的键数量大小,越大,重用机会越小,命中率越低

  • 内存直接决定缓存对象的平均大小和数量

  • 生存时间TTL越长,命中率越高

缓存分类

通读缓存

  • 包括代理缓存(一般指本地)、反向代理缓存(一般在目标服务)、CDN缓存(一般在网络供应商)

  • 通读缓存给客户端返回缓存资源,并在请求未命中缓存时,代理连接获取实际数据

  • 客户端连接的是通读缓存而不是生成响应的原始服务器

旁路缓存

  • 应用代码通常询问对象缓存(旁路缓存)对象是否存在,如果不存在或过期,连接主数据源来组装对象,并将其保存会对象缓存中以便将来使用

  • 对象缓存是旁路缓存

  • 对象缓存包括本地对象缓存、浏览器对象缓存、远程分布式对象缓存(Mamcached是例子)

分布式缓存的一致性hash算法

一致性Hash是用来解决分布式缓存中扩容时数据存储不一致的问题。

一般建立2^32大小的首尾连接的Hash环,然后把K个服务器的建立虚拟节点放到环上。查找是,把目标数据的hash值顺时针找最近的服务器虚拟节点。

技术栈各个层次的缓存

客户端缓存(HTTP和对象缓存)-> HTTP反向代理/CDN->Web服务器本地缓存/分布式缓存->HTTP反向代理->WEB服务器(本地缓存,分布式缓存)->主数据存储

合理使用缓存

  • 频繁修改数据 数据的读写比2:1时,缓存才有意义

  • 遵循二八原则,20%的数据占有80%访问,如果大部分数据访问不是集中在小部分数据上,缓存没有意义

  • 数据不一致于脏读:一般会对缓存数据设置失效时间,超过失效时间,就重新加载。数据更新通知缓存失效时,删除缓存数据。

  • 缓存雪崩:当缓存服务器崩溃时,大量请求到数据库服务器,不能承受宕机。重启缓存服务器和数据库服务器解决

  • 缓存预热:热点数据启动时先加载缓存

  • 缓存击穿 恶意持续高并发的请求某个不存在数据,因为缓存不存在该数据,都落在数据库上,给数据库造成压力,甚至崩溃。简单的对策将不存在的数据缓存起来(set null),并设较短的失效时间

消息队列与异步架构

通过消息队列构建异步调用架构

消息队列架构分为:生产者、消息队列、消费者

  • 点对点模型

  • 消息订阅模型

消息队列的好处

  • 提升性能

  • 更好的伸缩性

  • 削峰填谷

  • 失败隔离和自我修复 生产者和消费者互相不受对方失败影响

  • 解耦

事件驱动架构EDA

负载均衡架构

负载均衡种类

  • HTTP重定向负载均衡

  • DNS负载均衡

  • 反向代理负载均衡

  • IP负载均衡

  • 数据链路负载均衡

负载均衡算法

  • 轮询

  • 加权轮询

  • 随机

  • 最小连接

  • 源地址散列(会导致会话粘滞,相同的来源落到相同机器,如果摸个机器出问题,落地该机器的请求就不能用了)

应用服务器Session管理

应用服务器高可用基于无状态。但实际业务总是有状态的,需要Session信息,分布式负载均衡session管理包括以下:

  • Session 复制(导致每个服务器都保存全量Session,达不到分布式的目的)

  • Session 绑定(类似于源地址散列,导致不高可用)

  • 利用Cookie记录Session (交互报文的数据量增多,有些客户端禁用Cookie)

  • Session服务器(Redis等)

分布式数据库

主从复制

解决分布式读的问题,读写分离

  • 分摊负载

  • 专机专用

  • 便于冷备

  • 高可用

主主复制

解决写的问题,防止主服务器宕机不能写

同一时间只能够有一个写,不然又问题

用户头像

子豪sirius

关注

还未添加个人签名 2018.05.03 加入

还未添加个人简介

评论

发布
暂无评论
第五周学习心得