跳转至

我理解的运维

学习的技术越来越多,Linux、数据库、容器、虚拟化,再到大模型,容易变成每个工具都知道一点,却说不清自己应该关注什么。

我现在理解,运维的出发点是:业务怎样稳定运行,发生故障后怎样恢复,以及系统怎样持续维护下去。 选型、安装、修改配置、调参数、高可用和排障,都围绕这件事展开。

从需求开始看技术

拿到一个组件,我会先弄清楚它解决什么问题、保存什么数据、谁在使用。然后问:有多少请求,数据会增长多快,能接受停多久,能接受丢多少数据,有多少预算和维护人手?

这些问题会影响后面的选择。单机能满足需求时,复杂集群可能只是增加维护成本;业务不能接受单机故障时,就需要把故障切换和恢复流程一起设计进去。

一套系统从上线到维护

阶段 我需要弄清楚的事情
需求与选型 为什么使用它,适不适合业务,成本和维护难度是否能接受
架构与容量 几台机器,CPU、内存、磁盘、网络怎么分配,单点在哪里,以后怎么扩容
安装与配置 怎样部署,配置文件在哪里,参数控制什么,数据和日志放在哪里
验证与上线 读写是否正常,配置是否生效,重启能否恢复,依赖失败时有什么表现
日常运行 监控什么,什么时候告警,容量增长是否正常,备份是否能恢复
性能优化 瓶颈在哪里,调整什么,收益是什么,会不会增加其他资源压力
稳定与高可用 节点挂了谁接管,应用能否重连,剩余资源能不能承受业务
故障处理 影响范围多大,先保存哪些证据,怎样恢复,根因是什么
变更与自动化 升级、迁移怎样验证和回滚,重复操作怎样标准化

这些阶段是连着的。安装时没有规划数据目录,后面可能撑满根分区;上线时没有验证备份,故障时才发现恢复不了;平时没有留下指标和日志,排障就容易靠猜。

修改参数,要能说清楚前后关系

我希望自己每次改配置都能回答:

为什么改 → 改哪里 → 影响什么 → 怎样验证 → 出问题怎样恢复。

比如扩大 Java 堆,可能缓解对象分配压力,也会减少留给堆外内存和其他进程的空间。增加服务并发,可能提高吞吐,也可能把数据库连接池或下游服务压满。

因此“参数已经修改”只是过程。还要确认真正运行的进程拿到了新值,并比较相同负载下的延迟、错误率和资源使用,才能知道调整有没有效果。

同一个 Redis,用途不同,运维方案也不同

保存的内容 丢失或淘汰后会怎样 我会重点考虑什么
商品查询缓存 可以重新查询数据库,但回源压力会上升 TTL、淘汰策略、命中率、数据库承受能力
登录会话 用户可能需要重新登录 会话有效期、容量、高可用与恢复行为
待处理任务 可能漏处理,重试也可能重复处理 持久化、确认机制、幂等、备份和对账

所以只知道“Redis 是内存数据库,用来做缓存”还不够。我需要理解业务为什么把数据放进去,才能判断内存、持久化和高可用配置是否合适。

数据类型和命令也有用:看到一个特别大的集合,就能想到全量读取的成本;知道应用用它计数,就能意识到超时重试可能重复增加。学原理,是为了能解释现场现象。

高可用和排障,最后都要回到业务

高可用不能只看副本数量。副本是否放在不同机器,入口能否绕开故障节点,应用能否发现新地址,下游有没有单点,都需要沿着请求路径检查。

排障时先确定影响范围和恢复优先级。在不延误必要恢复的前提下,保留日志、线程栈或资源快照,再通过切换、回滚等方式恢复业务。恢复后继续查原因,把缺失的监控、容量或流程补上。

我希望逐渐做到:看到一个告警,能知道先查哪一层;做一次变更,能解释预期收益和风险;遇到故障,能拿出恢复路径和验证依据。

以后怎样整理技术笔记

每个技术专题尽量沿着这条线展开:

用途与选型 → 架构 → 部署 → 配置参数 → 日常检查
  → 性能与容量 → 高可用与恢复 → 排障 → 升级回滚

基础概念穿插在需要理解它的地方。命令旁边写清作用、前提和预期结果,参数旁边写清资源影响,故障旁边留下证据与处理过程。这样再回来看时,能接得上实际工作。