1. 运维开发导论:运维发展史、DevOps理念、自动化运维与平台化思维
1.1 运维发展史:从“人肉运维”到“智能运维”
说起运维,我入行那会儿,大家管这叫“机房看门狗”。
真的,一点不夸张。服务器坏了,你得骑着自行车去机房。硬盘报警了,你得手动换盘。发布代码?ssh 连上去,git pull,然后重启。每次上线都像在赌博。
为什么会这样?因为那时候的运维,本质上是“人肉操作”。
我把运维发展史大致分为四个阶段:
- 石器时代(2000年前后):纯手工运维。服务器数量少,运维人员少。出了问题,全靠经验和体力。我记得有一次,凌晨三点被叫起来,原因是磁盘满了。我登录上去,du -sh * 一个个查,最后发现是日志没轮转。嗯,那时候连 logrotate 都没配。
- 青铜时代(2005-2010年):脚本化运维。大家开始写 shell、perl、python 脚本。批量操作、定时任务、监控告警开始普及。说白了,就是把重复劳动交给机器。我那时候写了个一键部署脚本,被组里当宝贝用了两年。
- 铁器时代(2010-2015年):工具化运维。puppet、chef、ansible、saltstack 这些配置管理工具开始流行。运维不再是“救火队员”,而是“工具制造者”。你想想看,几百台机器,一条命令就能完成配置同步,这在以前想都不敢想。
- 蒸汽时代(2015年至今):平台化与智能化运维。容器化、k8s、监控体系、日志平台、CMDB、自动化运维平台全面铺开。运维开始向“平台工程”转型。我个人习惯把这一阶段称为“运维的文艺复兴”。
核心观点:运维的发展史,本质上就是“人”不断被“工具”和“平台”替代的过程。但别担心,运维的价值并没有降低,反而在提升——只是你不再需要做那些低级的重复劳动了。
1.2 DevOps 理念:打破那堵墙
DevOps 这个词,我估计你耳朵都听出茧子了。但真正理解它的人,其实不多。
DevOps 不是工具,不是岗位,更不是某个部门。它是一种文化,一种协作方式。
我在项目中遇到过最典型的场景:开发说“我代码写好了,你部署一下”,运维说“你代码有问题,我部署不了”。两边互相甩锅,项目进度一拖再拖。为什么会这样?因为开发和运维之间有一堵墙。
DevOps 要做的,就是拆掉这堵墙。
它的核心原则有三条:
- 文化(人):打破部门壁垒,开发与运维共同为服务负责。说白了,代码是你写的,线上出问题你也得管。
- 流程(过程):持续集成、持续交付、持续部署。让每一次代码提交都能快速、安全地到达生产环境。
- 工具(技术):自动化一切。从代码提交到部署上线,中间的所有环节都应该自动化。
我的建议:不要一上来就搞什么 DevOps 平台。先从一个痛点开始。比如,先解决“发布流程太慢”的问题。用 Jenkins 搭个简单的 CI/CD 流水线,让开发能自助发布。效果立竿见影。
DevOps 的典型实践包括:
| 实践 | 说明 | 我的经验 |
|---|---|---|
| 持续集成(CI) | 每次代码提交都自动构建、测试 | 我曾经见过一个项目,CI 跑一次要 40 分钟。后来优化到 8 分钟,团队效率直接翻倍。 |
| 持续交付(CD) | 代码随时可以部署到生产环境 | 注意,是“可以部署”,不是“自动部署”。生产环境还是建议加个手动确认。 |
| 基础设施即代码(IaC) | 用代码管理服务器、网络、中间件 | 我习惯用 Terraform 管理云资源,Ansible 管理配置。代码即文档,再也不用担心“这台机器怎么配的”这种问题了。 |
| 监控与可观测性 | 日志、指标、链路追踪三位一体 | 别只盯着 CPU 和内存。我曾经因为没监控磁盘 IO,导致数据库慢查询查了一周才发现。 |
1.3 自动化运维:把“手动挡”变成“自动挡”
自动化运维,说白了就是让机器替你干活。
但这里有个误区:很多人以为自动化就是写脚本。其实不是。脚本只是自动化的基础,真正的自动化运维是一个体系。
自动化运维的层次:
- 脚本层:shell、python 脚本,解决单点问题。比如批量改密码、批量查日志。
- 工具层:ansible、saltstack、puppet,解决批量配置问题。比如一次给 100 台机器安装 agent。
- 平台层:自研或开源的运维平台,解决流程化、标准化问题。比如工单系统、发布系统、监控系统。
- 智能化层:基于 AI 的异常检测、故障自愈、容量预测。这是未来的方向,但别急,先把前三层做好。
避坑指南:我曾经犯过一个错误——上来就想搞“全自动化”。结果花了三个月,平台做出来了,但没人用。为什么?因为太复杂了,大家不会用。后来我学乖了:先做 80% 的自动化,留 20% 的手动操作。等大家习惯了,再慢慢把那 20% 也自动化掉。
一个典型的自动化运维场景:
# 场景:新服务器上线
# 传统方式:
1. 运维收到工单
2. 手动安装操作系统
3. 手动配置网络
4. 手动安装基础软件(nginx、php、mysql 等)
5. 手动配置监控
6. 手动加入负载均衡
7. 手动测试
# 耗时:2-4 小时
# 自动化方式:
1. 开发提交工单(或通过 API 自动触发)
2. CMDB 自动分配 IP 和主机名
3. PXE 自动安装系统
4. Ansible 自动执行初始化剧本
5. Zabbix/Prometheus 自动注册监控
6. Nginx/HAProxy 自动更新 upstream
7. 自动化测试通过后,自动加入生产
# 耗时:15-20 分钟
你想想看,这中间的效率差距有多大?
1.4 平台化思维:从“工具”到“生态”
平台化思维,是我这些年感触最深的一点。
很多团队做运维平台,做着做着就变成了“工具堆砌”。今天加个发布功能,明天加个监控面板,后天加个工单系统。最后搞出来一个四不像,谁都不爱用。
平台化思维的核心是什么?
- 标准化:所有操作都有标准流程。比如发布流程、变更流程、故障处理流程。没有标准,就没有自动化。
- 服务化:把运维能力封装成服务。开发想发布代码?不用找运维,自己在平台上点一下就行。想查日志?不用 ssh 登录,平台上有日志检索功能。
- 数据化:一切操作都有记录,一切指标都可量化。谁发布了多少次?哪个服务故障最多?哪个团队响应最快?数据会告诉你答案。
- 自助化:让开发能自己完成大部分运维操作。运维的角色从“执行者”变成“赋能者”。
我的经验:做平台,不要想着一步到位。先画一个“最小可行产品”的边界。比如,先只做“发布”和“监控”两个模块。等大家用起来了,再慢慢加“日志”、“配置中心”、“工单”等功能。记住:平台是长出来的,不是设计出来的。
平台化思维的最终目标是什么?
是让运维从“救火队员”变成“消防工程师”。
救火队员是哪里着火去哪里。消防工程师是提前检查消防设施、制定应急预案、定期演练。火还没着,就已经把风险排除了。
说白了,平台化思维就是让你从“被动响应”变成“主动预防”。
嗯,这一章的内容就到这里。下一章我们会深入聊聊“自动化运维的基石:脚本与工具链”。到时候我会分享一些我这些年积累的脚本技巧和工具选型经验,保证实用。