zoukankan      html  css  js  c++  java
  • python数据处理(九)之自动化与规模化

    1 前沿

    1.1 适合自动化的任务

    每周二输出一些新的分析结果,编制一份报告,并发送给相关方

    其他部门或同事需要能够在没有你的指导和支持下运行报告工具和清洗工具

    每周进行一次数据下载、清洗和发送

    每次用户请求新报告,报告脚本需要运行,并且在报告生成后通知用户

    你需要每周清洗一次数据库里面的错误数据,并将其备份到其他地方

    1.2 不适合自动化的任务

    任务很少发生,并且非常复杂,自己做更好

    任务的成功输出很难确定

    任务需要与人交互来确定合适的完成方式

    任务是成功的当务之急

    2 自动化步骤

    文档化下面的问题

    a.任务开始时间

    b.任务是否有时间限制或最大长度?如果有,什么时候结束

    c.对任务,有哪些必要的输入

    d.对任务,什么是成功什么是部分成功

    e.任务失败,应该发生什么

    f.任务产生或提供什么?面向谁?以何种方式

    g.任务结束后应该发生什么

    自动化基本步骤

    a.定义你的问题集合,将其分解为更小的工作块

    b.精确地描述每一个子任务的输入是什么、输入做什么以及需要什么来确认任务完成

    c.确定哪里可以得到输入,以及何时运行任务

    d.开始编码你的任务,用真实或样例数据测试

    e.整理你的任务和脚本,添加文档

    f.添加日志,聚焦于调试错误和记录成功的任务

    g.提交你的代码到仓库中,手动测试它,按照需要作出修改

    h.通过将手动任务替换为自动化任务,为自动化准备脚本

    l.在任务开始自动化后,关注日志和警报。修正所有的错误和bug。更新你的测试和文档

    m.为日志中的错误检查频率制定一个长期计划

    一个运行良好的自动化任务集合需要一些时间来完成,但是结果通常比那些需要一直关注、修改和监控的一次性脚本要好

    3 出错点

    可能的错误

    a.数据库连接错误导致丢失或损坏数据

    b.脚本漏洞和错误,任务没有正确完成

    c.来自网站或API的超时错误或者过多的请求错误

    d.边界问题,报告的数据或一部分没有保证一直,导致脚本错误

    e.服务器负载问题或其他硬件问题

    f.时间不当,竞争条件

    构建弹性自动化系统的方式

    以特定的时间间隔重复失败的任务

    确保你的代码有很多try ... except 代码块,让它能够处理错误

    在处理到机器、数据库或API的连接的代码周围,构建特殊的异常代码块

    定期维护和监控你为自动化使用的机器

    使用测试数据定期测试你的任务和自动化程序,确保它们正常执行

    注意脚本中出现的依赖、竞争条件和API规则,根据这些知识编写代码

    使用类似requests和multiprocessing的库

    4.在哪里自动化

    5.自动化的特殊工具

    5.1 使用本地文件、参数及配置文件

    a.使用本地文集那作为输入和输出的时候,要确保脚本可以每天运行在相同的机器上,或者可以简单地与输入和输出文件一起迁移

    b.为敏感的信息创建本地配置文件

    通常情况下,我们在仓库内的一个独立文件夹存储配置文件

    c.在自动化程序中传递命令行参数。这些参数传递关于脚本应该如何运行的信息

    5.2 使用云

    云这个名词通常用来代表一个资源共享池,例如服务器

    如果数据太大,不能在自己的计算机上执行,或者程序需要很长的时间执行,云都是一个很好的处理方式

    a.使用Git部署Python

    5.3 使用并行处理

    并行处理对脚本自动化来说是一个很棒的工具,让你可以在一个脚本中运行多个并发进程。

    5.4 使用分布式处理

    分布式处理,它分发进程到多台机器上(不同于发生在一台机器上的并行处理) 
    5.5 简单的自动化

    如果你可以轻松地使用一个定时任务(corn job)自动化工作,绝不要浪费时间过度工程化它,或者让它变得更加复杂。

    6.1 CronJobs

    Cron(http://en.wikipedia.org/wiki/Cron)是一个基于 Unix 系统的任务调度工具,用来使用服务器日志和管理工具运行脚本
    6.2 Web接口

    如果你需要脚本、爬虫或者报告任务按需执行,一个简单的解决方案是直接构建一个 Web接口,人们可以登录进去并点击按钮执行任务。
    6.3 Jupyter notebook

    7 大规模自动化

    如果系统需要多台机器或者服务器来处理,或者报告是关于一个分布式系统或者其他事件驱动系统的,很可能你会需要比 Web 接口、notebook 和 corn 更加健壮的工具。
    7.1Celery:基于队列的自动化

    7.2 Ansible:操作自动化
    如果你当前的规模需要 Celery 帮助管理任务,很可能你同样需要一些帮助,来管理其他的服务和操作。

    8 监控自动化程序

    花费时间监控自动化程序是必需的。如果你不知道任务是否完成了,或者不知道任务成功还是失败了,你最好还是不要运行它们了。因此,监控你的脚本和运行它们的机器是过程中非常重要的一部分。
    8.1 Python日志
    8.2 添加自动化信息
    发送报告、跟踪脚本、通知自己错误的一个简单方式是使用邮件或者其他直接从脚本发送的信息

    它会产生一个报告,并将报告发送到特定的收件人列表。
    它有一个清晰的成功 / 失败信息。
    它与其他的合作者或同事相关。
    它提供了不易在网站或快速指示板上查看的结果

    8.2.1. 邮件

    8.2.2. 短消息服务(SMS)和语音

    8.2.3. 集成聊天

    如果你想要集成聊天室到警报系统中,或者你的团队或合作者普遍使用聊天室,有很多Python 聊天室工具可用

    8.3 上传和其他报告

    如果你需要上传报告或图片到独立的服务或文件分享作为自动化的一部分,有很多很棒的
    工具。如果这是一种在线的形式,或者一个需要与之交互的网站,建议使用
    Selenium 爬取技巧。如果这是一个 FTP 服务器,Python 有一个标准 FTP 库(https://docs.
    python.org/2/library/ftplib.html)。如果需要发送报告给一个 API,或者通过 Web 协议发送,
    你可以使用 requests 库,如果需要发送 XML,你可以
    使用 LXML

    8.4 日志和监控服务

    如果一个脚本满足不了需求,或者你想将自动化程序合并到一个大型的组织框架中,你可
    能需要研究将日志和监控作为一个服务的技术。有很多公司通过创建工具和系统来跟踪日
    志,致力于让数据分析师和开发者的生活更简单。这些工具通常有非常简单的 Python 库,
    将日志和监控信息发送到它们的平台。

    8.4.1. 日志和异常
    基于 Python 的日志服务提供了打印日志到一个中心服务的能力,同时让你的脚本在一系列不同的机器上运行,无论是本地机器还是远程机器。

    Abrake(https://airbrake.io/languages/python_bug_tracker)和 Rollbar(https://rollbar.com)。Airbrake 最开始是一个基于 Ruby 的异常跟踪器,现在开始支持 Python

    还有拉取和解析日志的服务,例如 Loggly(https://www.loggly.com/)和 Logstash(https://www.elastic.co/products/logstash)。这些服务允许你在聚合的日志级别上监控它们,同样也
    可以解析、搜索以及在日志中寻找问题

     8.4.2. 日志和监控

    如果你有分布式机器或者正在集成脚本到公司或大学的基于 Python 的服务器环境,你可能
    想要更健壮的监控,不仅仅是针对 Python,而是整个系统。有很多服务提供了系统数据库负载监控、Web 应用程序的监控,同样也有自动化任务的监控。

    New Relic(http://newrelic.com/)是这方面最流行的服务之一,它可以监控服务器和系统进程,也可以监控 Web 应用程序。

    另外一个系统和应用监控服务是 Datadog(https://www.datadoghq.com/)。Datadog 允许你整合许多服务(https://www.datadoghq.com/product/integrations/)到一个报告板中。

    无论你使用什么监控器,也无论你是决定构建自己的监控器还是使用一个服务,拥有规律的警报、深入了解你使用的服务、理解代码和自动化系统的完整性是非常重要的。

    9 没有万无一失的系统

  • 相关阅读:
    Test-Driven Development
    单元测试之道(使用NUnit)
    IoC--structuremap
    web.config的configSections节点
    【转】理解POCO
    js的call(obj,arg)学习笔记
    css隐藏滚动条方法
    regexp学习
    asp后台拼接百度ueditor编辑器过程
    php关键词construct和static
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12629470.html
Copyright © 2011-2022 走看看