软件工程:Devops到底是什么

传统的运维模式以及面临的挑战

在传统的瀑布模型开发中,软件生命周期中的运行维护这部分工作通常是交给运维工程师来完成的。

当开发人员完成编码,测试人员测试验收通过后,到了要发布的时候,就会将程序交给运维人员部署发布到生产环境。

在这里插入图片描述
除了程序的部署更新,传统运维工程师最重要的职责就是保障线上服务的稳定运行。对服务器34小时监控,有意外发生时需要及时处理和解决。

除此之外,还有日常的更新维护,比如说安装升级操作系统、安装更新应用软件、更新数据库、配置文件等。

早些年这种运维方式很好,但是随着互联网的发展,有两个主要的因素对传统的运维模式产生了巨大的挑战。

(1)服务器规模快速增加和虚拟化的高速发展

  • 随着技术发展,大型互联网公司的服务器数量越来也大,而中小公司都开始往云服务器上迁移,基于docker这样的虚拟化技术来搭建在线服务的基础架构
  • 服务器规模的增加和虚拟化技术的使用,就意味着以前的手动方式或者半自动的方式难以为继,需要更多的自动化和基于容器技术或者相关工具的二次开发。对于运维人员来说,也需要更多的开发能力

(2)高频的部署发布

  • 随着敏捷开发和持续交付的概率兴起之后,更新的频率也越来越高,每周甚至每天都会有若干次更新部署
  • 高频部署带来的挑战,首先会引起开发和运维之间的冲突,因为开发想要快速更新部署,而对于运维来说,每次更新部署都会导致系统不稳定,最好是不更新,可以让系统维护在稳定的状态。另一个挑战就是想要快速的部署发布,也意味着运维要有更高的自动化能力。

为了解决这些挑战,DevOps出现了,它帮助解决开发和运维之间的协作问题,提升了运维开发和自动化能力。

什么是DevOps

DevOps 可以理解为一种开发(Development)和运维(Operations)一起紧密协作的工作方式,从而可以更快跟可靠的构建、测试和发布软件

DevOps并不意味着开发一定要懂运维技术,运维要懂开发技术,而是说两个工种要紧密协作,有共同的目标:更快更可靠的构建、测试和发布软件。

这就意味着,对于运维来说,不再抵触开发的频繁更新部署,会帮助搭建自动化部署平台,提供自动化部署工具;对于开发来说,不再认为运维的工作和开发没有关系,开发人员会邀请运维人员参与架构设计,帮助运维实现自动化脚本开发。

那么采用 DevOps 的方式工作的话,会带来哪些好处呢?

(1)整个软件的构建、测试和发布过程高度自动化

  • DevOps一个很重要的基础就是自动化,通过对自动化的应用,是最简单有效的打破开发和运维之间壁垒的方式
  • 因为应用自动化之后,对于运维人员来说,自动化的交付流程,减少了繁重的手工操作;自动化测试可以有效的对产品质量提供很好的保证。对于开发人员来说,可以方便高频率的进入部署
  • 如果你的团队还没有开始实施自动化,可以先从持续交付开始

(2)信息更加透明和易于测量

  • 在传统的开发和运维合作模式中,开发和运维之间的信息不是那么透明。对于开发来说,不了解程序在服务器上运行的情况,对于运维来说,程序就是个黑盒子,无法对程序内部进行监控,出现问题只能重启或者回滚
  • 当采用debvops的工作方式,信息更加透明,通过日志和工具,数据也可以被更好测量。比如说:
    • 可以直观看到开发到部署需要多少时间,哪个环节可以改进
    • 当前服务运行情况如何,每分钟访问数量多少,API出错率多少
    • 当前用户数多少,有多少新增用户
  • 这些数据,不仅可以帮助运维更好地预警,或者是帮助开发更好地优化程序,还可以帮助业务团队更好地了解服务的运营情况

(3)培养跨职能协作的文化

DevOps 原则:自动化、信息透明可测量、构建协作文化。也就是说,实现devops,必须:

  • 构建自动化部署的系统,从构建、测试到部署实现高度的自动化;
  • 建立数据监控的系统,让信息透明可测量;
  • 最后要形成跨职能协作的文化。

基于 DevOps 的实践

(1)首先,DevOps 工程师要帮助团队建立基于持续集成和持续交付工作流程

  • 关于持续集成和持续交付,不仅仅是工具的使用,同时还是基于工具之上的一整套的交付工作流程。
  • 这套工作流程已经是业界公认的好的实践,但在很多中小团队普及率还不高,主要的难点之一是搭建比较复杂,可能还涉及二次开发;另一个是不知道该怎么建立这样的流程。
  • 对于这样的工具和流程的建设,最初的时候,就是需要有专门的人,专门的时间去建立,也是 DevOps 工程师首先要去解决的问题。

(2)其次,要建立一套基于日志的监控报警的系统,以及故障响应的流程

  • 对于线上系统,应急响应非常重要,要在故障发生后,第一时间作出响应,及时恢复生产,避免更大损失。而要做到这一点,同样离不开工具和流程的支持。
  • 需要能建立一套基于日志的监控报警的系统,将应用程序还有运行环境的各项数据监控起来,设置报警的阈值。当数据异常,超出阈值,就马上触发报警,然后进入应急响应的流程。
  • 对于应急响应流程,首先应该能第一时间通知最合适的人去处理,比如负责这个服务值班的开发人员,然后对于怎么第一时间恢复应该有准备,涉及跨部门协作也应该有相应的配合流程;最后对于故障应该有总结,避免类似情况再次发生。

(3)构建基于云计算和虚拟化技术的基础设施

  • 虽然并非每一个软件项目都是基于云计算或虚拟化技术来搭建的,但云计算和虚拟化技术方面的技术,其实是横跨开发和运维的,可能对于大部分开发和运维来说,都只了解其中一部分知识,这就需要有人能同时懂软件开发和云计算或虚拟化技术,或者一起协作,才能搭建出真正适合云计算或虚拟化技术的架构。
  • 构建出来基于云计算和虚拟化技术的基础设施后,对于开发人员来说,只要通过 API 或脚本即可搭建应用,对于运维来说,也只要通过脚本和工具即可管理。
  • 这其实也是 DevOps 中的“基础设施即代码”的概念

(4)最后,要形成 DevOps 的文化。

  • DevOps 最核心本质的就是工作方式和协作的文化
  • DevOps 工程师要帮助开发和运维相互理解对方的工作,帮助开发和运维在一起协作时多沟通,相互学习。出现问题不指责,而是分析原因,共同承担责任,找出改进的方案

问题:推荐简易部署使用的devOps的工具

如果你要部署持续集成环境,可以先试试Jenkins或者Gitlab CI。如果你要部署日志和监控系统,可以试试ELK,也就是Elasticsearch、Logstash、Kibana三者的结合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值