第一章:可靠性、可扩展性、可维护性-《数据密集型应用系统设计》读书笔记
1 可靠性Reliability
容忍硬件故障、软件失效、人为错误即使发生了错误,系统仍可用。针对可消除影响的故障类型。
- 硬件故障:硬件增加冗余;软件容错容忍多机失效;
- 软件失效:
- 特点:长期引而不发,特定条件触发。
- 方案:全面考虑,充分测试,反复评估,及时响应。
- 人为错误:简化人为操作;分离易错场景;充分测试;快速恢复机制;监控系统,及时报警;流程化与培训;
2 可扩展性Scalability
处理负载与性能、延迟概率、吞吐量系统应对负载增加的能力
- 描述负载:用负载参数的数字来描述,参数取决于系统的体系架构。例如:每秒处理请求数、数据库写入比例、同时在线用户数、缓存命中率
- 描述性能:
- 吞吐量throughput:每秒处理记录数或作业运行时间;
- 服务响应时间response time:客户端发送请求到收到响应的时间差,是一种数值分布;
- SLO服务质量目标Service Level Objective;
- SLA服务质量协议Service Level Agreements;
- 应对负载:
- 增加垂直扩展:升级到更高配的机器;
- 水平扩展:将负载平均分不到多个低配机器,无状态服务易采用此扩展;
- 弹性扩缩容方式,适用于负载高且不可预测,手动扩缩容可减少意外情况超大规模场景需进行定制化处理,难以形成通用方案
3 可维护性Maintainability
可操作性、简单性、可演化性
- 可操作性Operability(可运维性)让日常维护工作尽量简单,使运营团队专注于高附加值任务。数据系统设计阶段需考虑:
- 系统行为与内部逻辑可观测性(方便监控)
- 自动化、避免绑定特定机器或人员
- 完善文档
- 友好默认配置
- 自我修复
- 行为可预测
- 简单性Simplicity抽象,消除意外复杂性设计好的抽象,大型系统可拆分为定义明确、可重用的组件;
- 可演化性Evolvability,提高敏捷性,使其方便适应不断变化的需求,简单易懂的高抽象化系统更容易进行修改;
书籍基本信息:
- 《数据密集型应用系统设计》,英文名称是《Designing Data-Intensive Application》 ,也被简称为 DDIA
- 推荐指数:🌟🌟🌟🌟🌟
- 作者:Martin Kleppmann,译者 :赵军平、李三平、吕云松
- 内容简介:驾驭处理数据和存储数据的相关技术。探索经典数据系统的设计之道,梳理核心算法、设计理念、权衡之道,以便重新审视系统架构,在实际应用场景中选择最佳工具搭配。
- 数据密集型(data-intensive)应用基本模块
- 数据库:存储数据,应用可多次访问
- 高速缓存:缓存操作复杂或代价高昂的结果,加速访问速度
- 索引:支持关键字搜索与各种过滤
- 流处理:持续处理数据,并将结果发送至另一进程
- 批处理:定期处理大量累积数据
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签