第3章

轻量级自动化运维工具Fabric详解

近期公司的业务系统代码发布频繁,笔者同时在几个项目组里面穿插工作,发现发布和运维的工作都相当机械,加上频率比较高,导致时间的浪费也比较多。很多测试工作,例如通过SSH登录到测试环境,推送代码,然后修改Bug进行测试,这些操作都是非常机械并且具有重复性的。更让人郁闷的是,每次的操作都是相同的,命令基本上都是一样的,并且是在多台机器上执行,很难在本机上以一个脚本来搞定,主要时间都浪费在使用SSH登录和输入命令上了。这个时候需要一个轻量级的自动化运维工具,来帮助我们解决这些问题,Fabric就顺应这个需求而出现了,它非常适合于这些简单的、重复性的远程操作。Fabirc是基于Python语言开发的,前文2.1节就提到过,Python应用非常火爆,接下来看看Python的应用领域及其流行的原因。


3.1 Python语言的应用领域

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开发、游戏开发、手机开发、数据库开发等众多领域。

Linux集群和自动化维3.1 Python语言的应用领域相关推荐

  1. Linux集群和自动化维1.3 如何根据服务器应用选购服务器

    1.3 如何根据服务器应用选购服务器 无论物理服务器是选用IDC托管还是AWS EC2云主机(以下为了简略说明,将它们统称为服务器),我们都要面临一个问题,那就是选择服务器的硬件配置,选购硬件配置时要 ...

  2. Linux集群和自动化维1.5.1 服务器物理硬件的优化

    1.5.1 服务器物理硬件的优化 在对MySQL服务器进行硬件挑选时,应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 磁盘寻道能力(磁盘I/O) ...

  3. Linux集群和自动化维1.4.2 优化Linux下的内核TCP参数以提高系统性能

    1.4.2 优化Linux下的内核TCP参数以提高系统性能 内核的优化跟服务器的优化一样,应本着稳定安全的原则.下面以Squid服务器为例来说明,待客户端与服务器端建立TCP/IP连接后就会关闭Soc ...

  4. Linux集群和自动化运维

    Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...

  5. linux集群自动化脚本和增量复制

    linux集群自动化脚本和增量复制 Linux集群shell自动化脚本和集群增量增量复制 xcall.sh代码: xcall.sh脚本解释: xsync.sh代码: xsync.sh脚本解释: 自定义 ...

  6. 多角度展现 Linux 集群之美

    在很长一段时间内,开发和运维的工作泾渭分明.互不干涉,只有在系统出现故障时,双方才会认真地打个照面,长此以往,摩擦和误会必然存在. 此时,有经验的运维工程师会考虑将一部分手动工作脚本化,以减少人为操作 ...

  7. 搭建Cockpit服务器,Linux集群管理工具,DevOps开发运维一体化集群系统/持续集成

    Cockpit平台演示 # 打开浏览器,访问 http://ip-address:9090 ip-address为搭建cockpit服务器的IPAddress #进入管理界面 可以参考 CPU MEM ...

  8. 10 Kafka集群与运维

    Kafka集群与运维 10.1 集群应用场景 10.1.1 消息传递 Kafka可以很好地替代传统邮件代理.消息代理的使用有多种原因(将处理与数据生产者分离,缓冲未处理的消息等).与大多数邮件系统相比 ...

  9. 4.2.5 Kafka集群与运维(集群的搭建、监控工具 Kafka Eagle)

    Kafka集群与运维 文章目录 Kafka集群与运维 1.集群的搭建 1.1 搭建zookeeper集群 1.1.1 上传JDK到linux,安装并配置JDK 1.1.2. Linux 安装Zooke ...

最新文章

  1. 【点云论文速读】6D位姿估计
  2. php upload ctf,强网杯CTF防御赛ez_upload Writeup
  3. 5道面试题,拿捏String底层原理
  4. 一个有趣的数学问题:万有覆叠问题
  5. 7张图了解2018物联网产业发展新趋势
  6. 智能车竞赛技术报告 | 电磁越野组 - 哈尔滨工业大学 - 紫丁香三队
  7. 图像配准代码(包含matlab/opencv C++)
  8. gitlab上传文件到group_gitlab恢复备份数据
  9. 学会用好 Visual Studio Code
  10. vim 的substitute
  11. oracle中实现continue,break .
  12. 垃圾回收算法以及垃圾回收器_什么是垃圾回收?
  13. 处理IE6下PNG图片透明背景问题
  14. 手写深浅拷贝(js)
  15. 最大矩形面积(C++实现)
  16. python django restful_利用Django实现RESTful API(一)
  17. css基础--border属性
  18. 数学中的 argmax 和 argmin 什么意思
  19. 计算机编程学英语词汇,计算机编程常用英语词汇
  20. 布雷默曼极限 (Bremermann‘s limit)

热门文章

  1. 1028. List Sorting (25)
  2. 使用DBUtils编写通用的DAO
  3. 【Java8】@FunctionalInterface
  4. 自动化运维之SaltStack实践
  5. CI框架 守护进程nohup让PHP以常驻内存的形式执行订阅消息
  6. github使用个人总结
  7. JAVA的内存模型及结构
  8. ASP.NET2.0 - ASP.net MVC和ASP.net Web Forms
  9. 用nero刻录视频文件的时候不能添加文件
  10. 我的4条产品设计工作观