DevOps——打破开发与运维的"柏林墙"
你有没有遇到过这种情况?
生活场景:甲乙方的扯皮
场景:系统上线出问题了
运维(乙方)打电话给开发(甲方): 运维:"你们系统又挂了!" 开发:"不可能,我本地测试好好的。" 运维:"那是你们代码问题。" 开发:"是你们服务器配置问题。" 运维:"是你们代码吃内存太大。" 开发:"是你们服务器内存不够。" 运维:"..."
双方各执一词,互相甩锅。
根本原因:开发和运维是分离的,谁都不了解对方的工作。
技术故事:DevOps的起源
传统模式(Silo Model)
┌─────────────────────────────────────────────────────┐
│ 开发团队 │
│ │
│ 写代码 → 写代码 → 写代码 → 提交代码 │
└─────────────────────────────────────────────────────┘
│
▼ 测试通过
┌─────────────────────────────────────────────────────┐
│ 运维团队 │
│ │
│ 部署 → 部署 → 部署 → 又出问题了 → 回滚 │
└─────────────────────────────────────────────────────┘
问题:
- 开发不知道运维怎么部署
- 运维不懂代码逻辑
- 出问题互相推诿
- 部署周期长,效率低
DevOps模式
┌─────────────────────────────────────────────────────┐
│ DevOps团队 │
│ │
│ 写代码 → 测试 → 部署 → 监控 → 改进 → 写代码 │
│ │
│ 开发和运维融为一体 │
└─────────────────────────────────────────────────────┘
DevOps是什么?
DevOps = Development + Operations
一种文化、实践和工具的集合,让开发团队和运维团队更好地协作,缩短交付周期,提高质量和可靠性。
核心理念
1. CAMS
| 理念 | 说明 | 实践 |
|---|---|---|
| Culture(文化) | 打破壁垒,协作共赢 | 共同目标,共享责任 |
| Automation(自动化) | 用工具减少人工操作 | CI/CD,基础设施即代码 |
| Measurement(度量) | 用数据说话 | 监控、指标、分析 |
| Sharing(分享) | 知识共享,共同进步 | 技术分享,内部培训 |
2. CALMS
在CAMS基础上加上:
- Lean(精益):消除浪费,持续改进
DevOps工具链
规划阶段
| 工具 | 用途 |
|---|---|
| Jira | 需求管理、任务跟踪 |
| Trello | 看板管理 |
| GitHub Projects | 项目管理 |
开发阶段
| 工具 | 用途 |
|---|---|
| Git | 版本控制 |
| GitHub/GitLab | 代码托管 |
| SonarQube | 代码质量分析 |
构建阶段
| 工具 | 用途 |
|---|---|
| Maven/Gradle | 构建工具 |
| Docker | 容器化 |
| Jenkins/GitLab CI | 持续集成 |
测试阶段
| 工具 | 用途 |
|---|---|
| JUnit/TestNG | 单元测试 |
| Selenium | UI自动化测试 |
| JMeter | 性能测试 |
部署阶段
| 工具 | 用途 |
|---|---|
| Kubernetes | 容器编排 |
| Helm | 包管理 |
| ArgoCD | GitOps部署 |
监控阶段
| 工具 | 用途 |
|---|---|
| Prometheus | 指标收集 |
| Grafana | 可视化 |
| ELK | 日志分析 |
| Jaeger | 链路追踪 |
实践:基础设施即代码
Terraform:定义基础设施
# main.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "web-server"
Environment = "production"
}
}
resource "aws_security_group" "web" {
name = "web-sg"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
Ansible:配置管理
# playbook.yml
- hosts: webservers
become: yes
tasks:
- name: 安装 Nginx
apt:
name: nginx
state: present
- name: 启动 Nginx
service:
name: nginx
state: started
enabled: yes
- name: 复制配置文件
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
三步工作法
1. 流动原则(Flow)
加快从开发到运维的流动
- 缩短预演时间
- 减少批量大小
- 减少交接点
2. 反馈原则(Feedback)
建立从运维到开发的快速反馈
- 监控和告警
- 代码审查
- 快速恢复
3. 持续学习原则(Continuous Learning)
营造持续实验和学习的文化
- blameless postmortem(无责复盘)
- 技术债务管理
- 知识共享
总结:消除壁垒
DevOps的核心价值:
打破开发和运维的壁垒,让整个团队对交付负责。
就像球队:前锋和后卫要配合,不能各踢各的。进球了大家一起庆祝,丢球了大家一起找原因。
下期预告:你知道什么是GitOps吗?