存储架构设计三个步骤
1.估算性能需求
【任务】
基于具体的业务场景来估算性能需求,包括存储量、读写性能等。
【挑战】
1. 不知道如何估算;2. 担心估算不准。
2.选择存储系统
【任务】
根据技术储备、方案优缺点选择合适的存储系统。
【挑战】
1. 不知道有哪些存储系统;2. 知道但是不知道怎么选。
3.设计存储方案
【任务】
基于选择的存储系统,设计其具体的存储方案,如果发现不行,回到步骤2再换一个。
【挑战】
1. 不知道如何设计存储方案
性能估算步骤
用户量预估
规划:根据成本、预算、目标等确定
推算:基于已有数据推算
对比:跟已有标杆进行对比
用户行为建模
行为:用户的典型行为
数量:采取某种行为的用户数量
频率:用户某种行为的频率
案例:
1. 预计每个月使用钱包付款码的用户有100万,付款笔数达到500万笔;
2. 每天使用扫码乘车的用户有500万,平均扫码次数4.6次。
存储性能需求计算
数据量:需要存储数据总量
请求量:对数据的读写请求量(TPS/QPS)
预留量:预留的增长空间
存储性能需求计算案例
【案例】
用户行为模型:每天使用扫码乘车的用户有500万,平均扫码次数4.6次。
【部分分析和计算过程示例】
1. 假设总用户数1000万,则用户数据存储量是1000万;
2. 每次扫码乘车,都需要访问一次用户数据,则用户数据读取次数:每天500万 * 4.6 = 2300 万;
3. 每次扫码乘车,都会生成一条乘车记录,则单日乘车记录数:500 万 * 4.6 = 2300万;
4. 乘车记录要保存2年,则总数据量为 2300 万 * 800 ≈ 200亿;
5. 每条乘车记录对应一条支付记录,单日支付记录数 2300万,总数据量为 200 亿;
6. 地铁乘车60%集中在早晚高峰的2个小时内,因此乘车记录写入的峰值 TPS 平均大约为 2300万 * 60% / (2*3600) ≈ 2000。
存储架构选择逻辑
常见存储系统分类
如何选择合适的存储系统
-
技术本质:挑选应用场景和系统本质契合的系统。
-
技术储备:挑选熟悉的
-
综合考虑:可维护性、成本、成熟度等。
存储方案设计三个步骤
1.设计数据结构:选择或者设计具体的数据结构,例如如何设计具体的表,选择 Redis 的哪个数据结构。
2.验证读写场景:将数据结构放到具体的场景进行验证,设计读写具体如何执行(Rule)。
3.评估读写性能:评估具体场景下的数据结构设计是否满足性能需求,不满足则重新设计。
存储方案设计案例 – Redis 存储粉丝列表
方案1:
1.设计数据结构
选择 List,List 是有序的,可以重复。
2.验证读写场景
1. 新增关注:需要扫描 List 判断是否重复,不重复则尾部追加;
2. 取消关注:需要扫描 List 找到粉丝 ID 然后删除;
3. 拉黑:和取消关注一样
3.评估读写性能
1. 新增关注和取消关注都需要扫描整个List,性能较低,某些爆红的账户会有性能问题,因此需要再迭代看看是否有其它更合适的方案。
方案2:
1.设计数据结构
选择 Sorted set,有序但不能重复。
2.验证读写场景
1. 新增关注:使用关注时的 timestamp 作为 score来排序,无需扫描,Redis 会判
断粉丝ID是否重复;
2. 取消关注:直接删除;
3. 拉黑:和取消关注一样。
3.评估读写性能
1. 无论是性能还是实现复杂度,都比 List要更优。
原文始发于微信公众号(二进制跳动):存储架构应该怎么设计?有哪些需要考虑的维度
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/167051.html