分布式系统
一种独立的基础系统软件或服务程序,处于操作系统软件和用户的应用软件中间
特点
-
内聚性、透明性
建立在网络上
-
可扩展
动态扩展,提高系统整体的处理能力
垂直扩展:优化性能、升级硬件
水平扩展:增加服务器
-
可用和可靠性
可用性:给定周期内系统无故障运行的总时间
可靠性:给定周期内系统无故障运行的平均时间
-
高性能
高并发:单位时间内处理的任务越多越好
低延迟:每个任务处理的时间越少越好
-
一致性
保证多个节点在给定的时间内,操作的数据只有一份
由来
由业务量和用户量增加而诞生,并推动相关技术发展
如何理解
程序A和程序B分别运行在两台计算机,相互协作完成同一个功能
发展历程
-
单点集中式Web应用系统架构
数据库、应用的War包、文件的上传存储,都部署在同一台服务器上
优点:发布便捷
缺点:服务器宕机,整个应用无法访问;数据库和文件数据量越来越大,服务器容量有限
-
应用服务、文件服务、数据库服务拆分
三个服务独立部署,服务器宕机后,其他服务仍可使用
缺点:并发量上升,单台服务器性能有限
-
引入缓存和集群
缓存:热点数据放入缓存(Redis),减少数据库访问压力,提高用户并发请求性能
集群:减少单台服务器的压力
-
数据库读写分离、反向代理、CDN加速
读写分离:提高数据库存储性能
反向代理、CDN:提高系统访问速度
-
分布式文件系统和分布式数据库
系统大量请求某些表,根据业务拆分数据库
常见问题
-
网络问题
网络延时、丢包
-
节点故障
需要保证某个节点故障后,该节点负责的计算和存储任务转移到其他节点上
分布式中间件
缓存中间件—Redis
基于内存、采用key-value结构化存储的NoSQL(非关系型)数据库,支持字符串String、列表List、集合Set、有序集合SortedSet、哈希Hash
应用场景
- 热点数据存储、展示
- 最近访问的数据
- 并发访问
- 排名
常用命令
-- 进入redis的命令行
./redis-cli -p 6380
-- 查找所有的key
keys *
-- 新增或更新conf:123的值为123
set conf:123 123
-- 获取conf:123的值
get conf:123
-- 删除conf:123
del conf:123
常见问题
-
缓存穿透
频繁访问数据库中不存在的key,导致每次都要查询数据库
解决方案:数据库中没有查询到数据时,返回Null,同时塞入缓存,指定过期时间
-
缓存雪崩
在某个时间点,缓存的数据失效,大量查询请求涌入数据库,导致压力暴增
解决方案:设置不同的、随机的过期时间,错开失效时间点
-
缓存击穿
在某个时间点,热点Key过期失效,持续的高并发请求直接涌入数据库,导致压力暴增
解决方案:热点Key设置为永不过期
end