互联网时代,只有能够快速试验新想法,并在第一时间,安全、可靠的交付业务价值,才能保持竞争力。DevOps推崇的自动化构建/测试/部署,以及系统度量等技术实践,是互联网时代必不可少的。

抚琴煮酒,一名高级DevOps

大家好,我是余洪春,当然很多人更熟悉的是我的网名“抚琴煮酒”。

我在电子商务网站和大型CDN系统运维已工作10多年,在Linux集群、自动化运维、系统安全及高并发高流量网站架构设计等方面进行了深入的研究,在大量一线实践中积累了丰富的经验。

同时,我坚持文档记录,是51CTO和ChinaUnix等知名社区的特邀专家,51CTO系统网络频道的专栏作家,ChinaUnix论坛“集群和高可用”及“监控及自动化运维”版版主,在社区内发表了大量技术文章,深受网友好评。 哈哈,介绍自己还挺不好意思。

Python在DevOps中的应用

自动化构建(即持续集成CI)是因应用而易的,如果是Python应用,因为有setuptools、 pip、 virtualenv及tox等工具的存在,自动化构建非常简单。而且,因为几乎所有Linux版本都内置Python解释器,所以用Python做自动化,不需要系统预安装什么软件。

自动化测试方面,基于Python的Robot Framework企业级应用最喜欢的自动化测试框架,而且和语言无关。Cucumber也有很多支持者,Python对应的Lettuce可以做到完全一样的事情。Locust(Locust 是一个基于Python开发的开源负载测试工具)在自动化性能测试方面也开始受到越来越多的关注。此外,后起之秀Selenium,现在最火的Web自动化测试的轻量级框架现在已经被越来越多的公司应用。Selenium的主要特点是其开源性、跨平台性以及众多的编程语言支持,我们除了可以用Python编写测试用例,也可以用Java、PHP甚至Shell来编写测试用例。

自动化运维(自动化配置管理)工具,新生代Ansible、SaltStack,以及轻量级的自动化运维工具Fabric,均为Python开发。Fabric较前两者设计更为轻量化和模块化,所以深受研发同事及大数据同事喜爱。另外,这些Python自动化运维工具很容易就能二次开发,所以受到越来越多开发者的欢迎,很多公司同时用它们来完成自动化运维工作。

大家比较熟悉的Pythone的Web框架,例如Django和Flask,均能快速设计出符合后端开发需求的Restful API,尤其是轻量级的Flask,我们在很多大数据对外的API封装中均会选择用Flask,感觉非常轻便和简捷。另外,Python对现在的AWS及Docker均提供了较丰富的支持,比如大名鼎鼎的Boto3及docker-py,均能帮助大家高效的进行DevOps工作。

我们选择Python的原因

对于研发工程师而言,Python的优雅和简洁无疑是最大的吸引力,在Python交互式环境中,执行import this,读一读Python之禅,你就明白Python为什么如此吸引人。Python社区一直非常有活力,和Node.js社区软件包爆炸式增长不同,Python的软件包增长速度一直比较稳定,同时软件包的质量也相对较高。有很多人诟病Python对于空格的要求过于苛刻,但正是因为这个要求,才使得Python在做大型项目时比其他语言有优势。OpenStack项目总共超过200万行代码,也证明了这一点。

对于运维工程师而言,Python的最大优势在于,几乎所有Linux发行版都内置了Python解释器。Shell虽然功能强大,但缺点很多:语法不够优雅,不支持面向对象、没有丰富的第三方库支持,写复杂的系统任务(尤其涉及到网络HTTP和并发任务方面)会很痛苦。用Python替代Shell,做一些Shell实现不了的复杂任务,对于运维工程师、运维开发来说,是一次解放。

对于运维开发人员(大家习惯称之为DevOps)而言,Python的优势在于它是一门强大的胶水语言,特别适合用于Web后端、服务器开发,其优点如下:

  1. Python的代码风格简洁易懂易于维护,包括语法优势不用写大括号,代码注释风格统一,强调做一个事情只有一种方法
  2. 有着丰富的Web开源框架,主流的包括Web2py、web.py、Zope2、Pyramid、Django、CherryPy,还有轻量级框架Flask等。
  3. 跨平台能力,支持Mac,Linux,Windows等。
  4. Python可用第三方库和模块比较多,适合各种工作场景需求,使用起来非常方便。
  5. Python社区非常活跃,在其社区里面基本上能够找到一切你所需要的答案。

我们在工作中所运用到的Python实例,包括以下几个方面:

  • 编写服务器运维脚本,完成平时运维中的脚本需求
  • 使用python完成自动化运维工具部署,测试,以自动化运维视角为出发点,自动化功能、监控告警、性能调优,结合saltstack,ansible实现自动化配置管理等
  • 使用python开发任务调度系统,监控系统,cmdb等,完成运维开发工作、
  • 使用python完成大数据相关的应用
  • 开源软件的二次开发

大家可以看看,Python脚本能够涵盖我们在DevOps开发工作中的各个方面。基于以上原因,我们还有什么理由不选择Python呢?

实战技巧和经验分享

笔者也希望在自己的DevOps工作实践中提炼出实战技巧和经验,借此专栏的机会跟大家分享,希望大家能学习之后,能够掌握Python的实战技巧和经验,提升职业技能,更加高效的从事DevOps工作。

此专栏目前包括三面方的内容:
一、Python在运维工作中的实战技巧;
二、Python自动化运维配置工具在工作中的实战;
三、Python与Docker的结合。

全部内容都均出自于工作总结和实战,主要是帮助大家迅速提升,所学即所用,学到的知识技能点能迅速用于工作实践,帮助大家提升工作效率的同时,希望能让大家对Python产生浓厚的兴趣, 更进一步花时间和精力来学好它。