<b>第3章</b>
轻量级自动化运维工具fabric详解
近期公司的业务系统代码发布频繁,笔者同时在几个项目组里面穿插工作,发现发布和运维的工作都相当机械,加上频率比较高,导致时间的浪费也比较多。很多测试工作,例如通过ssh登录到测试环境,推送代码,然后修改bug进行测试,这些操作都是非常机械并且具有重复性的。更让人郁闷的是,每次的操作都是相同的,命令基本上都是一样的,并且是在多台机器上执行,很难在本机上以一个脚本来搞定,主要时间都浪费在使用ssh登录和输入命令上了。这个时候需要一个轻量级的自动化运维工具,来帮助我们解决这些问题,fabric就顺应这个需求而出现了,它非常适合于这些简单的、重复性的远程操作。fabirc是基于python语言开发的,前文2.1节就提到过,python应用非常火爆,接下来看看python的应用领域及其流行的原因。
<b></b>
<b>3.1 python语言的应用领域</b>
1.云计算基础设施
云计算平台分为私有云和公有云。私有云平台如大名鼎鼎的openstack,就是以python语言编写的。公有云,无论是aws、azure、gce(google compute engine)、阿里云还是青云,都提供了python sdk,其中gce只提供了python和javascript的sdk,青云只提供了python sdk。由此可见各家云平台对python的重视。
软件开发工具包(software development kit,sdk)一般是一些开发工具的集合,用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件。
2. devops
devops,中文名译作开发型运维。在互联网时代,只有能够快速试验新想法,并在第一时间,安全、可靠地交付业务价值,才能保持竞争力。devops推崇的自动化构建、测试、部署及系统度量等技术实践,在互联网时代是尤其重要的。
自动化构建是因应用而异的,如果是python应用,因为有setuptools、pip、virtualenv、tox、flake8等工具的存在,所以自动化构建非常简单。而且,因为几乎所有的linux版本都内置了python解释器,所以用python做自动化,系统不需要预安装什么软件。
自动化测试方面,目前流行的自动化测试框架有robot framework、cucumber、lettuce三种。基于python的robot framework是企业级应用最喜欢的自动化测试框架,而且和语言无关。cucumber也有很多支持者。基于python的lettuce可以实现完全一样的功能。此外,locust(一个基于python开发的开源负载测试工具)也开始在自动化性能测试方面受到越来越多的关注。
自动化配置管理工具,老牌的如chef和puppet,是基于ruby语言开发设计的,目前仍保持着强劲的势头。不过,新生代ansible、saltstack,以及轻量级的自动化运维工具fabric,均为python语言开发。由于它们较前两者的设计更为轻量化,因此受到越来越多开发者的欢迎,并且已经给chef和puppet制造了不少的竞争压力。
3.网络爬虫
大数据的数据从哪里来?除了部分企业有能力自己产生大量的数据,大部分时候,是需要依靠网络爬虫来抓取互联网数据进行分析的。
网络爬虫是python的传统强势领域,最流行的爬虫框架scrapy、http工具包urlib2、html解析工具beautiful soup、xml解析器lxml等,都是能够独当一面的类库。笔者公司的分布式网络爬虫程序也是基于scrapy开发的。不过,网络爬虫并不仅仅是打开网页,解析html这么简单。高效的爬虫要能够支持大量灵活的并发操作,常常要能够同时抓取几千甚至上万个网页,使用传统的线程池方式资源浪费比较大,线程数上千之后系统资源基本上就全浪费在线程调度上了。由于python能够很好地支持协程(coroutine)操作,因此基于python发展了很多并发库,如gevent、eventlet,还有celery之类的分布式任务框架等。被认为是比amqp更高效的zeromq最早提供的也是python版本。有了对高并发的支持,网络爬虫才可以真正达到大数据规模。
4.数据处理
从统计理论,到数据挖掘、机器学习,再到最近几年提出来的深度学习理论,数据科学正处于百花齐放的时代。数据科学家们都用什么语言编程呢?python是数据科学家最喜欢的语言之一。和r语言不同,python本身就是一门工程性语言,数据科学家用python实现的算法,可以直接用在产品中,这对于初创的大数据公司来说,是非常有利于节省成本的。正是基于数据科学家对python和r的热爱,spark为了“讨好”数据科学家,对这两种语言都提供了非常好的支持。
python的数据处理相关类库非常多。比如,高性能的科学计算类库numpy和scipy,给其他高级算法打下了非常好的基础;matplotlib让python画图变得像matlab一样简单;scikit-learn和milk实现了很多机器学习算法,基于这两个库实现的pylearn2,是深度学习领域的重要成员;theano利用gpu加速,实现了高性能数学符号计算和多维矩阵计算。当然,还有pandas,一个在工程领域已被广泛使用的大数据处理类库,其dataframe的设计借鉴自r语言,后来又启发spark项目实现了类似机制。
除了这些领域以外,python还被广泛应用于web开发、游戏开发、手机开发、数据库开发等众多领域。