我理解的运维¶
学习的技术越来越多,Linux、数据库、容器、虚拟化,再到大模型,容易变成每个工具都知道一点,却说不清自己应该关注什么。
我现在理解,运维的出发点是:业务怎样稳定运行,发生故障后怎样恢复,以及系统怎样持续维护下去。 选型、安装、修改配置、调参数、高可用和排障,都围绕这件事展开。
从需求开始看技术¶
拿到一个组件,我会先弄清楚它解决什么问题、保存什么数据、谁在使用。然后问:有多少请求,数据会增长多快,能接受停多久,能接受丢多少数据,有多少预算和维护人手?
这些问题会影响后面的选择。单机能满足需求时,复杂集群可能只是增加维护成本;业务不能接受单机故障时,就需要把故障切换和恢复流程一起设计进去。
一套系统从上线到维护¶
| 阶段 | 我需要弄清楚的事情 |
|---|---|
| 需求与选型 | 为什么使用它,适不适合业务,成本和维护难度是否能接受 |
| 架构与容量 | 几台机器,CPU、内存、磁盘、网络怎么分配,单点在哪里,以后怎么扩容 |
| 安装与配置 | 怎样部署,配置文件在哪里,参数控制什么,数据和日志放在哪里 |
| 验证与上线 | 读写是否正常,配置是否生效,重启能否恢复,依赖失败时有什么表现 |
| 日常运行 | 监控什么,什么时候告警,容量增长是否正常,备份是否能恢复 |
| 性能优化 | 瓶颈在哪里,调整什么,收益是什么,会不会增加其他资源压力 |
| 稳定与高可用 | 节点挂了谁接管,应用能否重连,剩余资源能不能承受业务 |
| 故障处理 | 影响范围多大,先保存哪些证据,怎样恢复,根因是什么 |
| 变更与自动化 | 升级、迁移怎样验证和回滚,重复操作怎样标准化 |
这些阶段是连着的。安装时没有规划数据目录,后面可能撑满根分区;上线时没有验证备份,故障时才发现恢复不了;平时没有留下指标和日志,排障就容易靠猜。
修改参数,要能说清楚前后关系¶
我希望自己每次改配置都能回答:
为什么改 → 改哪里 → 影响什么 → 怎样验证 → 出问题怎样恢复。
比如扩大 Java 堆,可能缓解对象分配压力,也会减少留给堆外内存和其他进程的空间。增加服务并发,可能提高吞吐,也可能把数据库连接池或下游服务压满。
因此“参数已经修改”只是过程。还要确认真正运行的进程拿到了新值,并比较相同负载下的延迟、错误率和资源使用,才能知道调整有没有效果。
同一个 Redis,用途不同,运维方案也不同¶
| 保存的内容 | 丢失或淘汰后会怎样 | 我会重点考虑什么 |
|---|---|---|
| 商品查询缓存 | 可以重新查询数据库,但回源压力会上升 | TTL、淘汰策略、命中率、数据库承受能力 |
| 登录会话 | 用户可能需要重新登录 | 会话有效期、容量、高可用与恢复行为 |
| 待处理任务 | 可能漏处理,重试也可能重复处理 | 持久化、确认机制、幂等、备份和对账 |
所以只知道“Redis 是内存数据库,用来做缓存”还不够。我需要理解业务为什么把数据放进去,才能判断内存、持久化和高可用配置是否合适。
数据类型和命令也有用:看到一个特别大的集合,就能想到全量读取的成本;知道应用用它计数,就能意识到超时重试可能重复增加。学原理,是为了能解释现场现象。
高可用和排障,最后都要回到业务¶
高可用不能只看副本数量。副本是否放在不同机器,入口能否绕开故障节点,应用能否发现新地址,下游有没有单点,都需要沿着请求路径检查。
排障时先确定影响范围和恢复优先级。在不延误必要恢复的前提下,保留日志、线程栈或资源快照,再通过切换、回滚等方式恢复业务。恢复后继续查原因,把缺失的监控、容量或流程补上。
我希望逐渐做到:看到一个告警,能知道先查哪一层;做一次变更,能解释预期收益和风险;遇到故障,能拿出恢复路径和验证依据。
以后怎样整理技术笔记¶
每个技术专题尽量沿着这条线展开:
基础概念穿插在需要理解它的地方。命令旁边写清作用、前提和预期结果,参数旁边写清资源影响,故障旁边留下证据与处理过程。这样再回来看时,能接得上实际工作。