SAP成都研究院DevOps那些事

今天的文章来自我的同事平静静,SAP成都研究院一位程序媛。平静静2010年加入SAP,熟悉她的人一般都叫她平静。在她待过的每个小组,平静静都不是最引人瞩目的开发人员,然而她总是能一如既往,保质保量地完成开发任务,为团队默默地做出自己的贡献。

Jerry和平静静曾经在同一开发小组里共事过三年多的时间。2013年时,我们所在的CRM开发团队曾一起努力,将Twitter, Facebook和新浪微博等社交媒体的支持添加到CRM呼叫中心中去。令Jerry至今记忆犹新的是 ,早在2013年9月,平静静就开始使用Selenium进行SAP CRM WebUI的自动化测试用例开发,并且是当时SAP成都研究院最早使用Git进行源码管理的同事之一,比2014年成都团队大规模从ABAP技术栈切换到Java技术栈上整整早了一年。Jerry对于Selenimu的学习最早也是从阅读平静静的代码开始的。当时的CRM团队也是SAP成都研究院最早开始实践探索性测试(Exploratory Test)的团队,而平静静就是当时的主要组织者。

下面是平静静的正文。


大家好,我是平静静,SAP成都研究院Customer Engagement Center团队的DevOps Engineer。您一定听说过Development Engineer (开发工程师),也听说过Operation Engineer (运维工程师),那DevOps Engineer是个什么工种?想回答这个问题,在我担任DevOps Engineer这短短的一年看来,其实既有只缘身在此山中的困惑,也有不足为外人道的窘迫。

文章目录

  • DevOps in SAP
  • DevOps in SAP Customer Engagement Center
  • DevOps Engineer到底要干些什么?
  • DevOps Engineer的一天,大概是什么样的?

现在就让我梳理一下自己对DevOps的粗浅认识和感受。如果您对DevOps的话题感兴趣,恰好身边也有DevOps小伙伴,不妨也跟他们聊聊。

DevOps in SAP

早些年SAP的产品大多是开发周期较长的On-Premise产品,比如ERP,CRM。SAP除了开发团队,还有一个专门负责产品维护的部门,名叫IMS。那时候的模式是开发团队完成开发之后,就可以妥妥地移交给IMS团队。一年之后新的版本发布,再继续移交。任何客户的问题如果SAP Primary Support解决不了,那么都是交给IMS团队处理,开发团队可以很大程度上心无旁骛地继续做下一阶段的开发。

2015年左右,随着公司的战略转型,一系列基于云的新产品推出,SAP开发团队也在不断追求没有最短只有更短的交付时间。1年,3个月,1个月,2周。。。试想一下,原来那套基于On-Premise的开发和维护的模式是不是就搞不定了?也许IMS团队的同学会跳出来说,容我们缓缓,上周移交给我们的东东我们还没处理完bug呢,这周又来这么多新功能,实在是Hold不住了。。。另一方面,SAP开发团队也想了解,产品做得到底怎么样,应该怎样迭代得更好呢?但是隔着SAP Primary Support以及IMS团队,离客户这么远,信息从何而来呢?

不只是SAP一家公司在思考。战略转型,也就意味着组织结构需要做出必要的调整。国内外的很多软件公司都在寻求新的产品开发和维护模式,使得各个团队之间减少时间损耗,从而更加高效地协同工作。如果开发和维护不再是界线分明的两个团队,而是由一个团队同时Hold住开发和维护,是否可行呢?

借用维基百科中关于DevOps的定义:

DevOps(Development和Operations的组合词)是一种重视软件开发人员(Dev)和IT运维技术人员(Ops)之间沟通合作的文化、运动或惯例。透过自动化软件交付和架构变更的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

https://zh.wikipedia.org/wiki/DevOps

1240

DevOps in SAP Customer Engagement Center

关于DevOps理念在一个团队中如何落地,细分一下,大致有:

  1. 开发即维护:每个小伙伴都既是开发,也是维护,不分工;
  2. 开发和维护:团队中一部分小伙伴是开发,另一部分是维护,分工明确;
  3. 一半开发,一半维护:团队中的维护工作由开发小伙伴们来定期轮岗。

第一种策略最贴近DevOps的理念。第二种策略最接近传统,第三种策略折衷。没有孰优孰劣,合适的才是最好的。要考虑的因素既要保证产品的交付,同时兼顾团队小伙伴们自己的职业兴趣点和专长,以及沟通成本。

SAP成都Customer Engagement Center团队最初在转型DevOps时,采用第三种方式,由开发的同学每两周轮一次岗。每位同学在轮岗的两个星期中,50%的精力用来做开发,另外的50%精力用来处理DevOps相关的任务。在运行一段时间之后,收到的反馈认为,虽然仍有50%精力做开发,但会影响大家做事的专注力,整体效率不是太高。同时,有时轮岗的交接做得不到位会导致后续要花更多的成本在了解问题的上下文和跟踪问题上。

成都团队在之后的运行中调整为了第二种方式,虽然更接近传统方式,但弥补了方式三的短板。

DevOps Engineer到底要干些什么?

DevOps Engineer是指DevOps的模式下,身兼开发和维护的Engineer。当然在现实生活中,DevOps Engineer并不一定跟Developer承担同样的开发工作。那么DevOps Engineer在他/她们的小角落里都在做些什么呢?

DevOps,就像这个词的构成方式,是Development和Operation的组合,那么一千个组就可能有一千种组合方式。这取决于DevOps Engineer的资源,以及团队目前所处的阶段。

就SAP成都Customer Engagement Center团队而言,团队目前处于已发版,有客户的状态。这意味着可能会有客户报过来的ticket,以及来自售前团队以及内部产品经理团队的demo 需求,也可能会有更多的内部ticket以及tenant setup的要求。因此DevOps同学会投入更多精力在Operation方面,其实也就是下图中的客户生命周期(Customer Life cycle)方面。

1240

再比如,如果团队处于开发阶段,未发版,那么来自于客户生命周期方面的任务不多,可以更多地关注CI/CD(持续集成 / 持续交付)以及监控等环节了。

在有更多的资源的情况下,DevOps同学就可以专注于偏dev方向的话题上,比如客户系统的自动化创建,cloud reporting等等。

从客户签单的那一刻起,就进入了客户生命周期管理:首先是客户系统的配置,测试,将系统交付给客户使用;其次是支持客户在使用系统过程中遇到的各种问题;再到客户系统的升级,以及可能的迁移等。这一系列活动都是直接跟客户生命周期管理相关的。

那么,怎样保障客户在使用云产品的过程中能够达到合同中所约定的服务品质(SLA:Service-Level Agreement)呢?是不是代码的质量足够好就可以了呢?当然,代码质量好肯定是产品的重要保证,但不同于On-Premise产品之处在于,云产品有更多的不确定性,也就更加需要监控工具的辅助。

首先,采用微服务架构的产品需要考虑部署在云上的服务是否可达。打个比方,如果部署在云上的服务处于stop的状态,那么客户的系统肯定是无法正常工作的。为了了解云上的服务是否还“活”着,可以使用availability check(SAP内部工具),每间隔一定的时间就对云上的服务发起请求。通过请求返回的响应值来判断云服务的状态,从而达到监控的目的。为了接近实时,间隔的时间可以尽可能的短,比如说每分钟发起一次请求。同时为了避免误判,也可以调整设置,当2或N次以上的请求都显示不可达时,才发出警告提示。这样,当有异常情况出现时,比如确实有服务“挂”了, availability check就可以第一时间通过邮件通知到相应的团队。或者如果还连接了SPC系统,还可以在SPC中创建ticket通知到一线的云支撑团队。

1240

另一方面,云上的服务只要是live状态就可以了么?那么如果遇到服务响应时间下降或者错误率升高,会不会客户很生气,后果很严重呢?这个时候,就需要别的监控工具了。目前正在服役的工具是Dynatrace。每个团队可以根据自己的情况定制监控面板。此外在遇到具体问题时,可以跳转到具体的某个服务页面查看相应的指标,比如Response time, Failure rate, CPU consumption, Throughput,来分析问题可能的原因,以及相应的对策,比如是否需要增加服务的instance或者memory。如果调整之后的性能仍然不够满意,那么就需要深入看看代码层面是否有问题,检查是否存在可优化的地方。

1240

除了以上提到的availability check以及Dynatrace,行业中还有很多其他的监控工具,具体使用哪种取决于公司或者每个团队的选择。

客户在使用系统的过程中,难免会出各种各样的问题,有的疑似bug,于是客户一封ticket就报了过来。DevOps或者开发团队想要重现一下问题,debug看看。额,debug对于云产品实在是种奢侈,只好求助于问题发生时留下来的蛛丝马迹。这个时候如果云平台自带的查看日志的命令不够用,比如说cf logs,那么就只好借助于Kibana这一类的可视化日志分析工具了。

1240

1240

1240

如果说,监控是为了实现更好的服务质量,那么CI/CD就是为了在不影响产品质量的前提下更快地交付产品。将versioning,build,各种测试,代码扫描,以及deploy等步骤作为一个pipeline来整体考虑,这是现在更通用的做法。据了解,目前有的团队自己来负责从Jenkins服务器到pipeline的配置,有的团队则借助于SAP内部的CI/CD工具,比如目前在服役的codepipes,或者piper。使用工具的优势在于,节省了Jenkins或Bamboo服务器等维护成本,通过简单的少量配置代码就可以完成pipeline的构建。劣势在于,由于这类工具是多个开发团队使用,有资源上受限的可能性,以及当遇到服务器问题时使用上的不灵活性。

1240

所以,在我看来,客户生命周期管理是核心,监控以及CI/CD其实也是为了更好的服务于客户生命周期。

DevOps Engineer的一天,大概是什么样的?

如同前面提到的,不同组的DevOps Engineer工作内容可能很不一样。举个例子,有时候会收到几个ticket,急着救火,有时候会耗在配demo上,捣鼓半天。有时候在发版的前期跟难用的pipeline工具死磕。DevOps Engineer不是最懂需求的,甚至也不精于测试和开发。但是会发现当有问题问了一圈无果时,也许问问DevOps Engineer,他/她或许是知道答案的那个人,或者能够帮您找到真正有能力解决问题的人。

感谢阅读,以及了解DevOps的那些事。

1240
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

1240

1240

转载于:https://www.cnblogs.com/sap-jerry/p/9810250.html

<think>好的,我现在需要给用户介绍一下DevOps。用户之前已经问过DBA,现在转向DevOps,可能是在技术领域继续深入,或者对IT运维和开发流程感兴趣。首先,我要确保自己对DevOps有全面的理解,包括它的定义、核心原则、常用工具链、文化理念以及与相关概念的对比。 用户可能想知道DevOps是什么,为什么重要,以及如何实施。考虑到用户之前询问的是DBA,可能有一定的技术背景,所以需要适当深入技术细节,但也要保持解释的易懂性。需要分结构回答,可能包括定义、核心原则、工具链、实施步骤、优势与挑战、相关职位等部分。 需要确认是否存在其他可能的“DevOps”解释,但通常来说,DevOps主要指软件开发与运维的结合。因此,应专注于这一领域。同时,要避免使用过于专业的术语,或者在必要时进行解释。例如,CI/CD、自动化部署等概念需要简要说明。 另外,用户可能希望了解DevOps如何影响企业或团队的工作流程,以及学习DevOps需要哪些技能。可能需要推荐一些工具或学习资源,比如Jenkins、Docker、Kubernetes等,但要注意不过度展开,保持回答的简洁性。 需要检查是否有常见的误区需要澄清,比如DevOps不仅仅是工具的使用,更是一种文化和流程的转变。还要提到它与敏捷开发的关系,以及如何促进团队协作。 最后,确保回答结构清晰,使用标题和列表来组织内容,便于用户快速浏览。同时,保持口语化,避免过于生硬的技术描述。可能需要用例子来说明,比如自动化测试如何提升效率,或者持续集成如何减少集成问题。 总结步骤:定义、核心原则、工具链、实施步骤、优势挑战、相关职位、学习资源。每个部分需要简明扼要,重点突出。同时,考虑到用户可能有进一步的问题,最后可以邀请用户提出更具体的问题。</think>以下是关于 **DevOps** 的详细介绍,涵盖核心理念、技术栈、实践场景及发展趋势: --- ### 一、定义与核心理念 **DevOps** = **Dev**(开发) + **Ops**(运维) 通过**自动化工具**与**协作文化**,打破开发与运维的壁垒,实现软件**快速交付**与**高质量运行**。 #### 核心原则(CAMS模型): 1. **Culture**(文化) - 强调跨团队协作(如每日站会同步进度) - 责任共担(开发需关注线上日志,运维参与架构设计) 2. **Automation**(自动化) - CI/CD流水线(从代码提交到生产部署全自动) - 基础设施即代码(Infrastructure as Code, IaC) 3. **Measurement**(度量) - 监控关键指标(如部署频率、故障恢复时间 MTTR) - 使用仪表盘可视化(如 Grafana 展示服务健康状态) 4. **Sharing**(共享) - 知识库文档化(Confluence 记录故障处理手册) - 工具链标准化(团队统一使用 Jenkins 而非多个构建工具) --- ### 二、技术栈与工具链 #### 典型工具分类: | 功能领域 | 代表工具 | 应用场景示例 | |-------------------|-------------------------------------|---------------------------------| | **版本控制** | Git, GitHub, GitLab | 代码协作与分支管理 | | **持续集成** | Jenkins, CircleCI, Travis CI | 自动运行单元测试(如 JUnit) | | **配置管理** | Ansible, Chef, Puppet | 批量服务器环境标准化部署 | | **容器化** | Docker, containerd | 打包应用及其依赖为镜像(Dockerfile)| | **编排调度** | Kubernetes, Docker Swarm | 自动扩缩容(HPA 根据 CPU 负载调整) | | **监控告警** | Prometheus, ELK Stack, Zabbix | 实时检测微服务延迟(如 P99 指标) | | **云平台** | AWS, Azure, GCP | 弹性部署 Serverless 函数(AWS Lambda)| #### 技术演进示例: ```bash # 传统部署 vs DevOps 部署对比 传统流程: 手工上传 WAR 包 → 手动修改 Tomcat 配置 → 逐台服务器重启 DevOps 流程: git push → 触发 Jenkins 构建 → 运行 SonarQube 代码扫描 → 生成 Docker 镜像 → Kubernetes 滚动更新 → 自动回滚(若健康检查失败) ``` --- ### 三、关键实践场景 #### 1. 持续交付流水线(CI/CD Pipeline) - **开发阶段**: 代码提交触发自动化测试(单元测试覆盖率需 >80%) 代码质量门禁(SonarQube 检测代码异味) - **预发环境**: 蓝绿部署(新旧版本并存,逐步切流) 混沌工程测试(模拟网络分区验证系统容错性) - **生产环境**: 金丝雀发布(先对 5% 用户开放新功能) 实时监控反馈(如 New Relic 追踪 API 错误率) #### 2. 基础设施即代码(IaC) - 使用 Terraform 定义 AWS 资源: ```hcl resource "aws_instance" "web" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t3.micro" tags = { Name = "DevOps-Demo" } } ``` - 版本化基础设施变更(Git 记录每次架构调整) #### 3. 云原生转型 - 微服务架构(Spring Cloud/Dubbo) - 服务网格(Istio 实现流量控制与链路追踪) - 无服务器计算(AWS Lambda 处理突发流量) --- ### 四、实施 DevOps 的挑战 1. **组织阻力** - 传统运维团队担心被自动化取代 - 开发人员需适应 On-Call 轮值制度 2. **技术债务** - 遗留系统难以容器化(如老旧 Cobol 程序) - 多环境配置差异导致部署失败 3. **安全合规** - CI/CD 管道中需嵌入安全扫描(如 Trivy 检测镜像漏洞) - 审计流水线操作记录(满足 GDPR 等法规要求) --- ### 五、相关职位与技能要求 | 职位类型 | 核心技能要求 | 典型工作任务 | |------------------|--------------------------------------|--------------------------------| | DevOps 工程师 | CI/CD 设计、Kubernetes 集群运维 | 优化构建耗时(从 30 分钟缩短到 5 分钟) | | 云架构师 | 多云架构设计、成本优化 | 设计高可用跨区域容灾方案 | | SRE(站点可靠性工程师) | 制定 SLA/SLO、容量规划 | 通过错误预算(Error Budget)平衡稳定性与迭代速度 | --- ### 六、学习路径建议 1. **基础阶段** - 掌握 Linux 基础(Shell 脚本编写) - 学习 Git 分支管理策略(Git Flow) 2. **中级阶段** - 实践 Jenkins Pipeline 脚本(Groovy 语法) - 部署 Kubernetes 集群(kubeadm 或 Minikube) 3. **高阶方向** - 研究 Service Mesh(如 Istio 流量镜像) - 构建全链路监控体系(OpenTelemetry 标准化埋点) --- 如果需要了解 DevOps 在特定场景的应用(如金融行业合规性实践),或某工具(如 ArgoCD)的深度用法,欢迎进一步提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值