全国客服热线:4006-880844

深入理解网站开发与运维

- 编辑:admin -

运维的概念源于工业革命,因为当时工厂开始大规模制造商品。到了现在,运维是指在生产商品和服务的过程中所涉及的资源使用(包括资金、原材料、技术,以及人员技能及知识储备)。一方面,软件开发与制造过程也非常相似。系统管理员与软件工程师通常各自隶属于两大相互封闭、各自等级分明的部门中,而不像传统制造业样。

运维的概念源于工业革命,因为当时工厂开始大规模制造商品。到了现在,运维是指在生产商品和服务的过程中所涉及的资源使用(包括资金、原材料、技术,以及人员技能及知识储备)。一方面,软件开发与制造过程也非常相似。系统管理员与软件工程师通常各自隶属于两大相互封闭、各自等级分明的部门中,而不像传统制造业样。


 
在一个开展在线业务的单位中,软件开发部门负责开发应用程序,用于支持面向客户或开展业务的网站或服务。同时,运维团队负责监控和维护这些应用程序,使它们保持正常状态并服务于业务职能。在大多数情况下,只有在发布新版本或者出现需要Web开发人员和运维人员共同解决的问题时,他们双方才会发生交流。然而,随着开发的Web应用程序数量越来越多,加上市场竞争要求即刻将应用程序部署到生产环境供客户使用(而不像以前那样通过实体销售来交付应用程序),因此现在比以前更迫切要求两个团队必须掌握相同的技术。
 
从Web出现开始,这种变化就- -直在发生。Tim Berners-Lee在发明Web时就指出,它的主要目标是通过共享知识促进交流,而其中协作是一大推动力:“通过创建超文本Web,使各种规模的群体都可以轻松表达自己的观点,快速查询和传递知识,消除交流误差,减少重复劳动。”开发运维的思想即源于这些沿用至今的核心原则,但是更注重开发人员与运维人员的协作,以及使用自动化技术和工具推动文化转变,从而以更快的速度开发和改进软件。
 
介绍的大多数原则都可以应用到其他角色间的互动上,如运维工程师与销售人员之间的互动,或者开发人员与管理人员或质量保证人员之间的互动。为简单起见,我将主要关注运维团队和软件开发团队之间的互动。
 
在敏捷软件开发过程出现之后,现代Web应用也采用一一种快速迭代的开发过程,即先设计和发布代码,然后在出现问题时快速修复问题。敏捷过程已经扩展到开发团队之外,系统管理员和其他运维人员也要参与应用与代码相关问题的修复过程,他们与软件开发团队紧密协作,实际上也变得越来越像软件工程师了。系统管理员以前就只是负责监控系统,偶尔在需要时重启一下应用程序或Web服务器,但是这种日子已经-去不复返了。现代应用程序都是根据不断改变的业务趋势而持续开发和测试的,所以运维团队不仅需要知道如何编写代码,也需要知道如何接收开发团队转移过来的代码,以及如何部署与管理这些代码。运维团队必须与开发团队紧密协作,共同创建这些过程,使Web软件的开发、部署和管理等过程都能够顺利运转。开发人员与运维工程师都必须有同等水平的能力,不需要过于依赖其他人(像以前那样)就能够独立完成必要的任务,而且他们还必须提高工作效率,避免浪费时间。
 
开发团队与运维团队之间的壁垒也必然开始消失。现代软件的开发速度越来越快,许多大型软件组织可以每天发布新版本,有的甚至一天发布几个版本,当然大多数软件的发布周期仍然以一周或两周为时间单位。文化上的转变通常需要几年时间,而Web开发只有30年的历史。但是Web开发文化现在已经开始形成,这体现在工具的发展上,它们可以提高生产力,能够将传统上独立的团队融合为一个整体。Web开发人员的文化变革深受Web诞生于学术领域这个背景的影响。敏捷是下一组改变Web应用开发方式的重要“法则”,由于开发人员与运维工程师在目标和活动上有越来越多的相似点,所以开发运维将成为这种文化转变过程中的重要活动。
 
运维工程师一直都有涉足程序 员的部分工作,虽然他们并不像软件开发人员那样拥有正统的计算机科学教育背景。传统上,运维人员一直充当着学徒的角色,他们管理大型Web环境的大部分知识均来自一线的工作经历。
 
运维工程师现在越来越注意向软件开发人员靠近一这 也是必然的。如果运维工程师需要支持有竞争力的、外向型的软件开发文化,那么他必须理解开发工具和实践方法,如持续集成、测试和自行开发工具。当前的趋势是,软件工程师不太可能采用运维工程师在长期一线工作经历中积累的实践方法和过程。由于没有像运维人员那样的学徒经历,所以软件开发人员不太可能采纳运维工程师日常习惯使用的配置管理、自动化、监控和性能测试等实践方法。
 
软件工程师通常忙于开发软件,因此他们很难去学习运维工程师的做法。例如,一位软件工程师可能不愿意学习如何编写一个用于部署试发布新环境的脚本,因为他正在和团队成员一起全力开发些新功能。开发人员也几乎不可能去学习配置管理工具的领域专用语言。但是,现代的开发人员必须乐于学习-些新工具,如运维人员经常使用的配置管理工具。这样做不仅可能提高两个团队之间的协作效率,而且也可以帮助软件开发人员从另一个角度看待配置管理工具的作用,从而更好地理解它最终在特定环境软件架构上的实现结果。如果双方没有这些共识,则开发进展会十分缓慢。
 
显然,开发人员和运维工程师学到的对方领域的专业知识越多,他们就越有可能在需求和方法上达成共识。下面是开发人员通常应该学习的一些大的专业领域。
 
操作系统
网络架构
网络安全
Web应用安全
配置管理
自动化实践方法
 
反过来,如果想与Web开发人员建立更紧密的合作关系,那么运维工程师需要了解以下几方面,才能以更高的效率创建和维护一个复杂的网站。
 
交流方式
配置管理
程序设计
软件设计与架构
 
两个团队不太可能互换角色,最后真正精通对方的技术。Web开发人员喜爱编写代码,而网站建设运维人员则喜欢管理整个基础架构。但是可以肯定,知识将通过各种途径传输到对方,包括运维团队与开发团队的紧密合作和培训,甚至在某些情况下可以直接取消运维部门,将两种技术群体合并在一起(这可能更适合小型组织)。为了达到这个目标,两个团队都需要在技术和协作方面深人对方的领域,然后在实现知识和职责共享之后再一起协作。