今天的文章来自我的同事平静静,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
DevOps in SAP Customer Engagement Center
关于DevOps理念在一个团队中如何落地,细分一下,大致有:
- 开发即维护:每个小伙伴都既是开发,也是维护,不分工;
- 开发和维护:团队中一部分小伙伴是开发,另一部分是维护,分工明确;
- 一半开发,一半维护:团队中的维护工作由开发小伙伴们来定期轮岗。
第一种策略最贴近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)方面。
再比如,如果团队处于开发阶段,未发版,那么来自于客户生命周期方面的任务不多,可以更多地关注CI/CD(持续集成 / 持续交付)以及监控等环节了。
在有更多的资源的情况下,DevOps同学就可以专注于偏dev方向的话题上,比如客户系统的自动化创建,cloud reporting等等。
从客户签单的那一刻起,就进入了客户生命周期管理:首先是客户系统的配置,测试,将系统交付给客户使用;其次是支持客户在使用系统过程中遇到的各种问题;再到客户系统的升级,以及可能的迁移等。这一系列活动都是直接跟客户生命周期管理相关的。
那么,怎样保障客户在使用云产品的过程中能够达到合同中所约定的服务品质(SLA:Service-Level Agreement)呢?是不是代码的质量足够好就可以了呢?当然,代码质量好肯定是产品的重要保证,但不同于On-Premise产品之处在于,云产品有更多的不确定性,也就更加需要监控工具的辅助。
首先,采用微服务架构的产品需要考虑部署在云上的服务是否可达。打个比方,如果部署在云上的服务处于stop的状态,那么客户的系统肯定是无法正常工作的。为了了解云上的服务是否还“活”着,可以使用availability check(SAP内部工具),每间隔一定的时间就对云上的服务发起请求。通过请求返回的响应值来判断云服务的状态,从而达到监控的目的。为了接近实时,间隔的时间可以尽可能的短,比如说每分钟发起一次请求。同时为了避免误判,也可以调整设置,当2或N次以上的请求都显示不可达时,才发出警告提示。这样,当有异常情况出现时,比如确实有服务“挂”了, availability check就可以第一时间通过邮件通知到相应的团队。或者如果还连接了SPC系统,还可以在SPC中创建ticket通知到一线的云支撑团队。
另一方面,云上的服务只要是live状态就可以了么?那么如果遇到服务响应时间下降或者错误率升高,会不会客户很生气,后果很严重呢?这个时候,就需要别的监控工具了。目前正在服役的工具是Dynatrace。每个团队可以根据自己的情况定制监控面板。此外在遇到具体问题时,可以跳转到具体的某个服务页面查看相应的指标,比如Response time, Failure rate, CPU consumption, Throughput,来分析问题可能的原因,以及相应的对策,比如是否需要增加服务的instance或者memory。如果调整之后的性能仍然不够满意,那么就需要深入看看代码层面是否有问题,检查是否存在可优化的地方。
除了以上提到的availability check以及Dynatrace,行业中还有很多其他的监控工具,具体使用哪种取决于公司或者每个团队的选择。
客户在使用系统的过程中,难免会出各种各样的问题,有的疑似bug,于是客户一封ticket就报了过来。DevOps或者开发团队想要重现一下问题,debug看看。额,debug对于云产品实在是种奢侈,只好求助于问题发生时留下来的蛛丝马迹。这个时候如果云平台自带的查看日志的命令不够用,比如说cf logs,那么就只好借助于Kibana这一类的可视化日志分析工具了。
如果说,监控是为了实现更好的服务质量,那么CI/CD就是为了在不影响产品质量的前提下更快地交付产品。将versioning,build,各种测试,代码扫描,以及deploy等步骤作为一个pipeline来整体考虑,这是现在更通用的做法。据了解,目前有的团队自己来负责从Jenkins服务器到pipeline的配置,有的团队则借助于SAP内部的CI/CD工具,比如目前在服役的codepipes,或者piper。使用工具的优势在于,节省了Jenkins或Bamboo服务器等维护成本,通过简单的少量配置代码就可以完成pipeline的构建。劣势在于,由于这类工具是多个开发团队使用,有资源上受限的可能性,以及当遇到服务器问题时使用上的不灵活性。
所以,在我看来,客户生命周期管理是核心,监控以及CI/CD其实也是为了更好的服务于客户生命周期。
DevOps Engineer的一天,大概是什么样的?
如同前面提到的,不同组的DevOps Engineer工作内容可能很不一样。举个例子,有时候会收到几个ticket,急着救火,有时候会耗在配demo上,捣鼓半天。有时候在发版的前期跟难用的pipeline工具死磕。DevOps Engineer不是最懂需求的,甚至也不精于测试和开发。但是会发现当有问题问了一圈无果时,也许问问DevOps Engineer,他/她或许是知道答案的那个人,或者能够帮您找到真正有能力解决问题的人。
感谢阅读,以及了解DevOps的那些事。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
sapui5-bas-cf-sample-app Business Application Studio 生成了示例应用程序,用于使用 ui5 管道测试、构建和部署到 Cloud Foundry。 此应用程序使用 karma 来运行测试。 为此,在节点容器旁边启动了一个运行无头 ...
DevOps 五大理念及其落地实践 研发运维一体化(DevOps)成熟度模型 中国DevOps现状调查报告及解读 构建企业DevOps的度量体系 DevOps实践指南精要 分布式敏捷和DevOps实践案例 AWS DevOps 助力爱乐奇大规模业务扩展 ...
DevOps 基础课程讲义 DevOps 是一种实践,旨在将开发和运维团队紧密合作,以提供高效、可靠的服务。它涵盖了从设计和开发过程一直到生产支持的整个服务生命周期。 DevOps 还要求运维人员在他们的系统工作中使用...
### DevOps 实践 #### 一、DevOps 的核心理念与价值 DevOps 是一种文化运动,强调开发(Development)与运维(Operations)之间的紧密合作与沟通,旨在提高组织交付应用程序和服务的能力,以更快的速度满足市场...
DEVOPS 概述 DEVOPS 的历史可以追溯到计算机刚刚出现的时期,当时软件开发还是少数人通过高学历才能够掌握的技能。那时只有程序(Program),但没有软件(Software),所以那个时候编写程序的人员被称为程序员...
DevOps是一种旨在促进开发(Development)和运维(Operations)团队之间协作与沟通的软件工程实践。随着敏捷开发的普及,DevOps应运而生,它强调快速交付高质量的软件产品,通过自动化流程来提高效率,确保软件在...
DEVOps成熟度模型是一系列旨在评估组织在软件开发和交付过程中实施DEVOps实践有效性的标准。本模型分为七个章节,每个章节关注DEVOps流程的一个方面,其主要目的是为组织提供一个明确的成熟度路径,帮助它们从初始级...
《DevOps Handbook》详细阐述了如何将这些概念付诸实践,提供了许多案例研究和实用建议,对于希望实施DevOps的企业和个人具有很高的参考价值。通过阅读这本书,读者可以深入了解DevOps的精髓,并为自己的组织制定...
devops主题系列演讲一共有14个部分,这是第11部分,每个部分里有10个大佬演讲的PPT,每个PPT都是独立的。 龙井-龙门阵之DevOps门外汉须知 罗伟-蘑菇街基于容器的全生命周期 DevOps 运营平台建设 牛晓玲&景韵-转型...
这次峰会上,与会者分享了最新的DevOps研究成果、实践经验以及成功案例,为参与者提供了丰富的学习资源。 其中包含的文件有: 1. **DORA-2018+State+of+DevOps_CN_V4.1.pdf**:这份文档是2018年度DevOps Research ...
在描述中,作者Jessica Deen,作为云开发倡导者,向读者传达了她对技术的热情和对于社区的关注,并特别指出了Linux、开源软件、DevOps以及容器化技术是她的重点研究领域。她通过引用Donovan Brown对DevOps的定义,...
中国DevOps发展趋势是当今IT行业关注的热点话题,该领域的研究和实践发展迅速,对中国乃至全球的软件开发与交付流程产生了深远的影响。从《中国DevOps现状调查报告(2019年)》中我们可以看出,DevOps在中国的发展...
DevOps Master认证考试是针对那些希望深入理解和实践DevOps理念的专业人士的一项专业资格认证。这份样题涵盖了DevOps的关键概念,包括精益管理、轻量级IT服务管理、知识体系以及团队多元性的价值。 1. 精益管理:在...
《DevOps成熟度规范》是指导企业提升DevOps能力的重要参考文档,旨在推动研发运维一体化的高效实践。这个规范涵盖了三个主要部分:总体架构、敏捷开发管理过程和持续交付过程,通过这些内容来构建和衡量企业的DevOps...
DevOps 统一研发体系建设方案 本文档旨在介绍 DevOps 统一研发体系建设方案的整体架构和实施过程。该方案的目标是构建一个统一的研发平台,实现敏捷和 DevOps 的转型,提高应急管理能力和业务响应速度。 在 DevOps...
DevOps是一种旨在促进开发(Development)和运维(Operations)团队之间协作与沟通的文化、实践和工具集合,以提高软件的发布速度和质量。"DevOps标准.zip"文件中包含的内容显然是关于DevOps的整体框架和实践指导,...
DevOps是一种文化和实践,目的在于提升软件开发和运维之间的沟通与合作效率。其目标是使企业的业务流程更加敏捷,从而快速适应市场变化,并在竞争中获得优势。DevOps的实践涵盖了从计划、开发、测试、部署到运维的...