测试
全部博文(931)
分类: 架构设计与优化
2019-08-25 22:10:55
今天的文章来自我的同事平静静,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的粗浅认识和感受。如果您对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)之间沟通合作的文化、运动或惯例。透过自动化软件交付和架构变更的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码: