高并发互联网架构
2023-12-18 10:13:22 1 举报
AI智能生成
高并发的互联网相关的理论
作者其他创作
大纲/内容
变迁
单应用单db
多应用单db-负载均衡
多应用单db+缓存
多应用读写分离db+缓存+文件/图片服务器
多应用读写分离+分库分表+缓存
多应用读写分离+分库分表+缓存+异步化
SOA
微服化
技术点
CAP原则
定义
Consistency(一致性)
等同于所有节点访问同一份最新的数据副本
在分布式系统中的所有数据备份,在同一时刻是否同样的值
Availability(可用性)
对数据更新具备高可用性
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。
Partition tolerance(分区容错性)
以实际效果而言,分区相当于对通信的时限要求。
系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择
CAP三者不可兼得
负载均衡
web服务无状态
API网关
ngix
业务网关
缓存
框架
redis
单点
分片
持久化
集群
memchaed
问题
故障分类
缓存穿透
场景
查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。
当用户使用这条不存在的数据疯狂发起查询请求的时候,对数据库造成的压力就非常大,甚至可能直接挂掉
方案
缓存空对象
布隆过滤器
缓存击穿
场景
当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过缓存,直接查询数据库。
这种情况会导致数据库压力瞬间骤增,造成大量请求阻塞,甚至直接挂掉。
方案
设置key永不过期
使用分布式锁,保证同一时刻只能有一个查询请求重新加载热点数据到缓存中。
这样,其他的线程只需等待该线程运行完毕,即可重新从Redis中获取数据。
这样,其他的线程只需等待该线程运行完毕,即可重新从Redis中获取数据。
缓存雪崩
场景
当缓存中有大量的key在同一时刻过期,或者Redis直接宕机了
导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。
方案
第一种大量key同时过期的情况,解决起来比较简单,只需要将每个key的过期时间打散即可,使它们的失效点尽可能均匀分布。
第二种redis发生故障的情况,部署redis时可以使用redis的几种高可用方案部署
缓存与数据库数据一致性
先取消再写再flush
canal
读写分离
数据库主从
定义不同的数据源,根据业务定位读/写库
分库分表(sharding)
分库
垂直分库/逻辑分库
按照业务,不同业务不同数据库
业务代码简单
容易产生热点数据-如不同用户订单数量不均匀
水平分库
按照某个业务字段,如saler_id分库
不常用
分表
取模(如按照saled_id 模64,可以分成64张表)
热点数据
中间表映射
数据均匀分布,中间表记录数据路由
一致性hash
异步化
AMQ
RabbitMQ
Rocketmq
kafka
redis
微服务
最小的业务单元做成服务
协议
http
基于tcp/ip的RMI协议
服务治理
服务网关
zuul
服务治理
Eureka
AP
Dubbo/Dubbox
CP
Service Mesh(服务网格)
Service Fabric
lstio
Linkerd
Conduit
服务配置
Spring cloud config
ctrip apollo
调用链
CAT
?
熔断
Hystrix
限流
0 条评论
下一页