写点什么

模块五总结

用户头像
竹林七贤
关注
发布于: 2021 年 06 月 01 日

一、多级缓存架构

1.缓存和缓冲

cache,速度相差较大的两种硬件之间,用于协调二者数据传输速度差异的结构。

CPU l1/l2/l3 cache; innodb buffer pool ;redis ;memcached

buffer,临时存储区域,保存从一个区域传输到另一个设备的数据。

java io; write cache ;消息队列缓存写请求


缓存技术本质:以空间换时间

2. 3W1H

内容;有效期;缓存方案(APP 缓存/HTTP 缓存/CDN/Nginx/memcached/redis...);更新机制(过期更新/定期更新/主动更新);

3. 多级缓存架构

4.缓存技术概要

APP 缓存:将数据缓存到本地,本地文件/本地图片/SQLITE 缓存

HTTP 缓存:标准协议缓存,HTTP 资源

CDN 缓存:内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获得所需内容,降低网络堵塞,提高用户访问响应速度和命中率。关键是内容存储和分发。

WEB 缓存:静态资源,图片,JS,css 等。配置 http 协议实现缓存。

应用缓存:应用在本地的缓存数据,进程内缓存 oscache ehcache,进程外缓存,本地磁盘 SSD 缓存

分布式缓存:由分布式系统提供缓存,redis memcached

5.redis 和 memcached

如果由较大的缓存对象读写就用 memcached,否做 redis

如果数据库+缓存,用 memcached 更简单;

如果缓存生成代价高,用 redis。


二、分布式缓存架构设计

1.分布式缓存 2 种行式

数据缓存:用什么缓存系统;如何应对数据一致性挑战。实时性要求高的场景,读多写少,微博浏览。


结果缓存:用什么缓存;缓存有效期与结果新鲜度平衡,计算量大但实时性要求不高的场景,热榜排行榜。


2.缓存设计思路


3.缓存数据一致性设计


容忍一致性;关系数据库本地表事务;消息队列异步删除


4.缓存架构三类问题

a.缓存穿透:缓存没有发挥做用,业务系统虽然缓存了查询数据,但缓存中没有数据,业务系统需要再次去系统查询数据。

空值缓存:读不到写入空值;缓存当前数据:分为历史数据和当前数据,只存当前数据

缓存预热:回复发布/预发布;随机失效:一个时间范围内的随机值,失效。

b.缓存雪崩:当缓存失效后,引起系统性能急剧下降的情况。系统存储无法支撑读写请求等;

解决方案:更新锁;后台更新

c.缓存热点:特别热点的数据,如有业务都请求同一份缓存,缓存服务器压力过大。解决方法:多副本缓存


三、负载均衡架构

1.多级负载均衡架构

性能需求和维护复杂度

2.技术分析

DNS:地理位置和机房级别的负载均衡,标准协议;能力有限不够灵活;DNS 劫持;DNS 缓存

HTTP-DNS:APP 客户端;


3.GSLB

全局负载均衡主要用于在多个地区拥有自己的服务器的站点,为全球用户以一个 IP 地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度。

适合超大规模业务,多地甚至全球业务部署。

功能强大,可实现就近访问,容灾切换、流量调节。

4.F5

性能高(700 万请求),价格贵(100 万 RMB)

5.LVS

内核级别的负载均衡,基本可以跑满千兆网卡带宽,性能 10~100 万请求。

6.F5/LVS/Nginx 三者对比


四、负载均衡技巧

1.通用负载均衡算法

a.轮询和随机

将请求依次发给服务器;将请求随机发给服务器

适用于无状态的负载均衡;缺点当一个点发送故障,负载系统无感知,依然会向故障点发送请求。

b.加权

按照预先设置的权重,将请求按比例发给不同服务器

适用于服务器能力有差异的场景;配置不合理,可能导致过载;

c.加权轮询算法

d.负载优先

负载均衡系统将任务分配给当前负载最低的服务器,这里的负载根据不同的额任务类型和业务场景,可以用不同的指标进行衡量。

LVS 为 4 层网络负载均衡设备;Nginx 为 7 层网络负载均衡系统。

e.性能优先

将任务分配给性能最好的服务器,主要以响应时间作为性能横量指标。

f.hash

基于某个参数计算 hash,将其映射到具体的服务器。


2.nginx--常用负载均衡算法


3.LVS--常用负载均衡算法

4. 业务级别负载均衡技巧

a.通用负载均衡算法基于请求,业务级别负载均衡算法基于业务内容,更灵活;

b.cookie 负载均衡信息

应用 session 保持,购物车下单等场景

5.自定义 http Header

6.query string:含负载均衡信息,但业务入侵大

7.服务器性能估算

接口性能:线上业务服务器接口处理时间分布 20~100ms;平均大概 50ms

服务器性能:线上单个服务器性能大概为 300~1000TPS/QPS

服务器数量=(总 TPS+QPS)/单个服务器性能


五、接口高可用

1.接口高可用整体框架

请求过多:限流/排队----防止雪崩

接口故障多:熔断/降级----防止链式效应

2.限流

请求端限流:发起请求的时候进行限流,被限流的请求实际上并没有发给后端服务器。

接入端限流:接收到业务请求的时候进行限流,避免业务请求进入实际业务处理流程

服务限流:单个服务自我保护措施,处理能力不够的时候,丢弃新的请求。

3.固定 &滑动时间窗口

固定窗口:统计固定时间周期内的请求量,超过阈值就限流

滑动时间窗:统计的滑动时间内的请求量,超过阈值限流

4.漏桶

请求放入“桶”,例如消息队列,业务处理单元(线程/进程/服务)从桶里拿请求处理,通满了就丢弃新的请求。可用于瞬时高并发,例如 0 点签到,秒杀

5.令牌桶

某个处理单元按照速率将令牌放入桶中,业务处理单元收到请求后,需要获取令牌,获取不到就丢弃请求。

6.排队

收到请求后,不同步处理,将请求放入队列,系统根据能力进行异步处理。

请求缓存+同步改异步+请求端轮询

常用:秒杀/抢购

7.排队示例

降级

建立独立操作系统,可以是独立降级系统,也可以是嵌入到其他系统的降级功能。降级核心业务。

9.熔断

下游接口故障时,一定时间内不再调用。框架或者 SDK 实现


用户头像

竹林七贤

关注

还未添加个人签名 2020.08.13 加入

还未添加个人简介

评论

发布
暂无评论
模块五总结