DevOps 意识
简单来说,DevOps 意识就是“不只管生,还要管养”的责任感。
- 学生思维(缺乏 DevOps 意识): 代码写完,在我本地跑通了,输出了正确结果,我的任务结束了。
- 工程师思维(具备 DevOps 意识): 代码上线后,它要在服务器上 24 小时跑。如果它挂了怎么办?如果它慢了怎么查?如果用户量暴增怎么扩容?我写的代码能帮运维(Ops)同学省心吗?
可观测性 (Observability) —— 别让系统成为黑盒
这是我之前提到的重点。如果系统慢了,你能不能立刻知道是哪一步慢了?
- 没有意识的做法: 出了问题,你只能去服务器上
tail -f project.log,在一堆乱七八糟的文本里肉眼找报错。 - 有意识的做法(JSON Logs & Metrics): 你打出的日志是结构化的 JSON,可以直接被收集系统(如 ELK, Datadog)解析。 面试加分点: 面试官看到这个会想:“这孩子懂事,这日志都不用我重写就能直接做监控大盘。”
1
2
3
4
5
6
7
8
9
10
11# ❌ 普通日志
logger.info(f"处理了 {len(papers)} 篇论文,耗时 5秒")
# ✅ DevOps 意识日志 (JSON 结构)
logger.info(json.dumps({
"event": "batch_process_finished",
"paper_count": len(papers),
"duration_ms": 5000,
"success_rate": 0.98,
"token_cost": 1500 # 甚至记录花了多少钱
}))
2. 资源敬畏 (Resource Management) —— 别把服务器搞崩
生产环境的资源(CPU、内存、连接数)是有限的,且是昂贵的。
- 没有意识的做法:
- 数据库连接用完不关(你的代码里
conn.close()写得很勤,这很好)。 - 无限创建 HTTP Client(之前提到的
httpx连接池问题)。 - 把几百兆的 PDF 全部读进内存。
- 数据库连接用完不关(你的代码里
- 有意识的做法:
- 连接池复用:不用每次握手。
- **流式处理 (Streaming)**:读大文件用 chunk,而不是
read()。 - **优雅关闭 (Graceful Shutdown)**:服务停止时,先把手头的任务做完,再断开数据库连接,而不是直接杀进程。
3. 容错与自愈 (Resilience) —— 假设一切都会失败
网络会抖动,DeepSeek API 会 502,数据库会锁死。
- 没有意识的做法:
response = requests.get(...)。如果网络断了,程序直接抛异常崩溃,进程退出。 - 有意识的做法:
- **重试 (Retry)**:网络断了?等 1 秒再试一次(你加了
tenacity或者循环重试,这就是意识)。 - **熔断 (Circuit Breaker)**:DeepSeek 挂了?那我就暂停调用 1 分钟,直接返回缓存或降级服务,别一直报错刷屏。
- **超时控制 (Timeout)**:永远不要写没有 timeout 的网络请求(你的
timeout=60.0做得很好)。
- **重试 (Retry)**:网络断了?等 1 秒再试一次(你加了
4. 配置管理 (Configuration) —— 代码和环境分离
代码是通用的,但环境(开发、测试、生产)是不同的。
- 没有意识的做法: 把数据库密码
root:123456硬编码在代码里。 - 有意识的做法: 所有变化的量都放在
.env或环境变量里(我看你的项目里有.env和load_dotenv,这非常好!)。
总结:如何向面试官展示你的 DevOps 意识?
你不需要真的去部署 Kubernetes,只需要在回答问题时带上这几句话:
“为了方便后续的排查和监控,我把关键日志做成了结构化的…” “考虑到生产环境可能会有网络波动,我给外部 API 调用加了重试和超时…” “为了防止内存泄漏拖垮服务器,我限制了 Worker 进程处理完一定任务后自动重启…”
只要说出这些关键词,面试官就会认定:这是一个只要招进来,马上就能干活,而且不会给团队埋雷的靠谱工程师。
架构缺失:缺乏可观测性(Observability)
现状: 你有很多 logger.info,但散落在各个文件里。
面试官点评: “如果你的 score_papers_listwise 突然变慢了,或者是 PDF 下载成功率下降了,你现在只能去翻茫茫多的日志文件。没有 Metrics(指标监控),就没有生产环境的安全感。”
优化方案(加分项):
- 加一个简单的 Middleware,记录每个 API 的 Latency(耗时)。
- 在
llm_service.py里记录 Token Usage(花了多少钱)。 - 在
pdf.py里记录 解析成功率。 - 如果能把这些打印成结构化日志(JSON Log),面试官会觉得你非常有 DevOps 意识。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments


