【专栏】Python在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的原因

在平时的DevOps开发工作中,虽然我会用Shell来处理很多工作流程,但很多时候Shell还是有力不从心的时候,这个时候Python的优势就发挥出来了,比如在这些方面:自动化运维、设计后端RestFul API、复杂的监控脚本、Web应用项目等。Python用得越多,我们也越来越喜欢用它。

基于以上原因,我们还有什么理由不选择Python呢?

实战技巧和经验分享

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

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

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

专栏链接地址:http://blog.51cto.com/cloumn/detail/13
我的专属优惠券:http://blog.51cto.com/coupon/get/CoumNcvmCcK7COZUNfJ7y7h5NBJ5Zu2

原文地址:http://blog.51cto.com/yuhongchun/2157345

时间: 2024-10-08 00:47:05

【专栏】Python在DevOps中的应用的相关文章

《基于Python的DevOps实战》专栏目录明细

<基于Python的DevOps实战>专栏目录明细如下所示:一.效率神器之Python隔离工具VirtulEnv在项目中的应用二.用Gunicorn部署高性能Python WSGI服务器三.利用 Django REST framework 编写 RESTful API四.Flask之RESTful API介绍与实战五.Python 在 Docker-Compose 上的应用六.Web 全双工通信 -- WebSocket 协议详解七.批量运维管理器之Paramiko介绍八.自动化运维工具Fab

Python统计列表中的重复项出现的次数的方法

前言 在实际工作和学习中,经常会遇到很多重复的数据,但是我们又必须进行统计,所及这里简单介绍一下统计列表中重复项的出现次数的简单方法. 实例 本文实例展示了Python统计列表中的重复项出现的次数的方法,是一个很实用的功能,适合Python初学者学习借鉴.具体方法如下: #方法1: mylist = [1,2,2,2,2,3,3,3,4,4,4,4] myset = set(mylist)  #myset是另外一个列表,里面的内容是mylist里面的无重复 项 for item in myset

[Docker]在Python和IPython中使用Docker

现在Docker是地球上最炙手可热的项目之一,就意味着人民实际上不仅仅是因为这个才喜欢它. 话虽如此,我非常喜欢使用容器,服务发现以及所有被创造出的新趣的点子和领域来切换工作作为范例. 这个文章中我会简要介绍使用python中的docker-py模块来操作Docker 容器,这里会使用我喜爱的编程工具IPython. 安装docker-py 首先需要docker-py.注意这里的案例中我将会使用Ubuntu Trusty 14.04版本. $ pip install docker-py IPyh

Python 可视化Twitter中指定话题中Tweet的词汇频率

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-8 @author: guaguastd @name: plot_frequencies_words.py ''' if __name__ == '__main__': #import json # import Counter from collections import Counter # import search from search impor

Python 查找Twitter中最流行(转载最多)的10个Tweet

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-4 @author: guaguastd @name: find_popular_retweets.py ''' # Finding the most popular retweets def popular_retweets(statuses): retweets = [ # Store out a tuple of these three values.

Python进阶-继承中的MRO与super

摘要本文讲述Python继承关系中如何通过super()调用"父类"方法,super(Type, CurrentClass)返回CurrentClass的MRO中Type的下一个类的代理:以及如何设计Python类以便正确初始化. 1. 单继承中父类方法调用 在继承中,调用父类方法是很有必要的.调用父类方法的场景有很多: 比如必须调用父类的构造方法__init__才能正确初始化父类实例属性,使得子类实例对象能够继承到父类实例对象的实例属性: 再如需要重写父类方法时,有时候没有必要完全摒

Python 对Twitter中指定话题的Tweet基本元素的频谱分析

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-9 @author: guaguastd @name: entities_frequency_map.py ''' if __name__ == '__main__': # import Counter from collections import Counter # import visualize from visualize import visua

【python】win10中python3.5.2输入pip出现Fatal error in launcher: Unable to create process using &#39;&quot;&#39;

系统:windows 10 python版本:3.5.2 出现的错误如下: C:\Users\zhuxy>pip list Fatal error in launcher: Unable to create process using '"' 尝试的解决办法: C:\Users\zhuxy>python -m pip install package Collecting package Downloading package-0.1.1.tar.gz Complete output

Python 3.x中使用print函数出现语法错误(SyntaxError: invalid syntax)的原因

在安装了最新版本的Python 3.x版本之后, 去参考别人的代码(基于Python 2.x写的教程),去利用print函数,打印输出内容时,结果却遇到print函数的语法错误: SyntaxError: invalid syntax 这是因为Python 2.x升级到Python 3.x,print函数的语法变化了,所以用Python 2.x的print函数的代码,放在Python 3.x中运行,结果就出现了print函数的"SyntaxError: invalid syntax"了