DevOps和SRE工程师

AI 摘要: 这篇文章介绍了DevOps工程师和SRE工程师的职责、工作内容和技术栈。DevOps工程师关注应用全生命周期管理和流程优化,负责开发和管理开发、发布、监控、权限等系统。SRE工程师关注高扩展性和高可用性,负责选型、设计、开发、容量规划、故障处理等工作。两者的区别在于职责范围、文化以及技术要求。对于运维人员来说,转型成为DevOps或SRE工程师需要补充相关技术知识和经验。

相关术语补充

CALMS原则

  • Culture:团队思维(利益共享,风险共担)
  • Automation:自动化思维
  • Lean:精益思维
  • Measurement:数据可度量&可视化
  • Sharing:鼓励开发和运维直接互相分享

THE THREE WAYS原则

  • DEV->OPS,局部服务于全局,避免短板效应,系统性思考
  • DEV->OPS,OPS->DEV 反馈闭环,相互进步
  • DEVOPS文化,在反馈闭环中,持续学习和进步

精益思维

  • 最小可行性
  • 单一关键指标
  • 精益看板
  • 风险管理

CI/CD

  • 流水线操作
  • 软件版本管理
  • 软件依赖管理
  • 内建代码测试
  • 软件环境管理
  • 热发布/零停机发布
  • 灰度发布、蓝绿发布

构建Saas方法 - 12Factor

  • 一份基准代码
  • 声明软件依赖清单
  • 在环境中配置软件参数
  • 将后端服务作为附加资源
  • 软件构建、发布、运行,相互隔离(可以基于版本快速回滚比如从release->v100)
  • 基于一个或多个无状态进程运行应用(避免在进程中涉及有状态数据,比如粘性session)
  • 基于端口提供服务(服务消费者调用服务服务提供者,同时对于的服务地址、端口信息需要录入到配置中心)
  • 基于进程模型扩展(按需提供或者进程池模型),应用程序必须支持多机器跨进程工作,且推崇基于systemd进程、进程管理管控
  • 易处理,快速启动&优雅终止,最大化健壮性(比如消息回退nack、停止网络监听&消息队列完成后续处理)
  • 环境等价,软件版本、部署路径方式、日志生成目录等(开发可以基于vagrant、chef配置等无限接近生产环境)
  • 日志,把日志作为事件流的汇总(日志文件只是存储格式,每个进程输出由运行环境截获,一并发送给到日志收集进程处理)
  • 管理进程(后台管理进程环境同步,比如php artisanbundle exec rake db:migrate)

1. 工程师文化

  • 信任、透明、高效、互助的沟通文化
  • 交付速度=(功能特性x工程质量x交付风险)/交付时间

2. DevOps工程师(Development、Operations)

范围涉及:开发工具、版本管理工具、CI 持续交付工具、CD 持续发布工具、报警工具、故障处理。

2.1. 职责

  • 管理应用全生命周期(需求、设计、开发、QA、发布、运行)
  • 关注全流程效率提升,挖掘瓶颈点并将其解决
  • 自动化运维平台设计和研发工作(标准化、自动化、平台化)
  • 支持运维系统,包括 虚拟化技术、资源管理技术、监控技术、网络技术

2.2. 工作内容

  • 设定应用生命管理周期制度,扭转流程
  • 开发、管理 开发工程师/QA 工程师使用,开发平台系统
  • 开发、管理 发布系统
  • 开发、选型、管理 监控、报警系统
  • 开发、管理 权限系统
  • 开发、选型、管理 CMBD
  • 管理变更
  • 管理故障

3. SRE工程师(Site Reliability Engineering)

范围涉及:容量测量工具、Logging 日志工具、Tracing 调用链路跟踪工具、Metrics 性能度量工具、监控报警工具等。

3.1. 关注点

  • 高扩展性:高扩展性是指当服务用户数量暴增时,应用系统以及支撑其服务(服务器资源、网络系统、数据库资源)可以在不调整系统结构,不强化机器本身性能 ,仅仅增加实例数量方式进行扩容。
  • 高可用性:高可用性是指,应用架构中任何环节出现不可用时,比如应用服务、网关、数据库 等系统挂掉,整个系统可以在可预见时间内恢复并重新提供服务。

3.2. 职责

  • 为应用、中间件、基础设施等提供 选型、设计、开发、容量规划、调优、故障处理
  • 为业务系统提供基于可用性、可扩展性考虑决策,参与业务系统设计和实施
  • 定位、处理、管理故障,优化导致故障发生相关部件
  • 提高各部件资源利用率

3.3. 工作内容

  • 管理变更
  • 管理故障
  • 制定 SLA 服务标准
  • 开发、选型、管理 各类中间件
  • 开发、管理 分布式监控系统
  • 开发、管理 分布式追踪系统
  • 开发、管理 性能监控、探测系统(dtrace、火焰图)
  • 开发、选型、培训 性能调优工具

4. DevOps和SRE差别

  • DevOps和SRE都会关心应用生命周期,特别是生命周期里面中变更和故障;
  • DevOps首先是一种文化,后期逐渐独立成一个职位,SRE一开始就明确是一个职位,公司不一定需要SRE工程师,但需要DevOps工程师通常;
  • 运维不等于DevOps,也不等于SRE,但后两者都需要较强的运维技能(一个误区就是运维=DevOps或者SRE);
  • SRE在一些专业领域的技能(计算机体系结构、高吞吐高并发、可扩展系统设计、复杂业务系统设计、性能优化等)要求要高于DevOps;
  • SRE强调分析问题、解决问题能力,面对挑战,可以迎难而上,自驱学习;
  • 从专业背景来看,无论是DevOps还是SRE,都需要研发背景,前者需要开发工具链,后者需要有较强架构设计经验。
  • 如果有运维工程师想转型成为DevOps或者SRE,那么需要补上相关技术知识。

毕竟,不是会搭建一套Jenkins+Kubernetes 就可以自称为DevOps/SRE 工程师。

4.1. DevOps技术栈

  • Dev:
    • 编程语言:Python、Golang、PHP、Java
    • 理论基础:软件生命周期(Application Life Cycle)、12 Factor、微服务、CICD思想
  • Ops:
    • Linux:基本命令、FHS、标准、发行版差异、历史
    • 脚本:Bash/Python
    • 基础服务:DHCP、NTP、DNS、SSH、iptables、systemd、LDAP、CMDB等
    • Web应用服务:Nginx、HAProxy、LVS、F5
    • 自动化:Fabric、Saltstack、Chef、Ansible
    • 虚拟化:KVM、XEN、vSphere、Docker、Kubernetes、Mesos
  • 基础设施:
    • 代码仓库(Gitlab、Github)
    • 日志收集(Logstash、Flume)
    • 服务监控(Zabbix、Nagios)
    • 配置管理(Etcd、Zk)
    • 私有包管理(Nexus、Pypi、JFrog、Satajs)
    • 权限管控(跳板机、堡垒机)、监控系统
    • CI/CD继续集成和发布:Jenkins、Pipeline、Git、Git Hooks

4.2. SRE技术栈

  • 理论基础:
    • 计算机科学:计算机组成、计算机网络、操作系统、数据结构和算法、软件工程、数据库知识、计算机编程
    • 精通Linux,熟悉Linux性能优化:stress、mpstat、iostat、netstat、sysstat、ps、top、atop、htop、vmstat等
    • 熟悉TCP/IP协议
    • 并发模型:并发、并行、多进程、多线程等
    • 分布式理论、CAP、PACELC、BASE、Paxos、MapReduce等
    • 资源模型:网络、内存、CPU、IO、扩展性设计
  • 工程实践:
    • 运维架构设计,运维资源评估,能够为场景决策合适方案
    • 故障分析和处理
    • 深入理解业务系统,包括业务团队使用的开发语言、框架、性能风险
    • 性能优化升级,Linux性能优化、DB性能优化、网络性能优化、系统架构升级等
  • 工具依赖:
    • Tracing 链路追踪
    • Metrics 度量工具
    • Logging 日志系统

5. 小结

研发除转产品、业务、管理、架构,对运维有了足够的了解后,转DevOps和SRE工程师,也是一条不错的职业发展道路(前提是对基本知识的掌握是有足够的要求)!!

另外,devops ci/cd工具参考:https://opensource.com/article/18/12/cicd-tools-sysadmins