V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
brucedone
V2EX  ›  程序员

框架点评 - Python 万能分布式函数调度框架 - 日志性能 windows 下提高 100 倍, Linux 提高 10 倍!

  •  
  •   brucedone · 2019-11-07 10:38:45 +08:00 · 1945 次点击
    这是一个创建于 1862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    地址

    https://github.com/ydf0509/distributed_framework

    描述

    python 万能分布式函数调度框架。适用场景范围超级广泛。 可以一行代码分布式并发调度起一切任何老代码的旧函数和新项目的新函数,并提供数十种函数控制功能。

    还是不懂框架能做什么是什么,就必须先去了解下 celery。如果连 celery 听都没听说, 那就不可能知道此框架的功能目的,对牛弹琴。

    功能

    分布式: 支持数十种最负盛名的消息中间件

    并发: 支持 threading gevent eventlet 三种并发模式 + 多进程

    控频限流: 例如十分精确的指定 1 秒钟运行 30 次函数(无论函数需要随机运行多久时间,都能精确控制到指定的消费频率; 此处不能做杠精,说让函数里面计算 1 加到 1 千万亿,然后指定框架一秒钟运行 30 次这样的函数

    任务持久化: 消息队列中间件天然支持

    断点接续运行: 无惧反复重启代码,造成任务丢失。消息队列的持久化 + 消费确认机制 做到不丢失一个消息

    定时: 需要结合 apschedual 定时框架,定时的推送消息,分布式函数调度框架就能立即消费这条消息了

    指定时间不运行: 例如,有些任务你不想在白天运行,可以只在晚上的时间段运行

    消费确认: 这是最为重要的一项功能之一,有了这才能肆无忌惮的任性反复重启代码也不会丢失一个任务

    立即重试指定次数: 当函数运行出错,会立即重试指定的次数,达到最大次重试数后就确认消费了

    重新入队: 在消费函数内部主动抛出一个特定类型的异常 ExceptionForRequeue 后,消息重新返回消息队列

    超时杀死: 例如在函数运行时间超过 10 秒时候,将此运行中的函数 kill

    计算消费次数速度: 实时计算单个进程 1 分钟的消费次数,在日志中显示;当开启函数状态持久化后可在 web 页面查看消费次数

    预估消费时间: 根据前 1 分钟的消费次数,按照队列剩余的消息数量来估算剩余的所需时间

    函数运行日志记录: 使用自己设计开发的 控制台五彩日志(根据日志严重级别显示成五种颜色;使用了可跳转点击日志模板) + 多进程安全切片的文件日志 + 可选的 kafka elastic 日志

    任务过滤: 例如求和的 add 函数,已经计算了 1 + 2,再次发布 1 + 2 的任务到消息中间件,可以让框架跳过执行此任务

    任务过期丢弃: 例如消息是 15 秒之前发布的,可以让框架丢弃此消息不执行,防止消息堆积, 在消息可靠性要求不高但实时性要求高的高并发互联网接口中使用

    函数状态和结果持久化: 可以分别选择函数状态和函数结果持久化到 mongodb,使用的是短时间内的离散 mongo 任务自动聚合成批量 任务后批量插入,尽可能的减少了插入次数

    消费状态实时可视化: 在页面上按时间倒序实时刷新函数消费状态,包括是否成功 出错的异常类型和异常提示 重试运行次数 执行函数的机器名字+进程 id+python 脚本名字 函数入参 函数结果 函数运行消耗时间等

    消费次数和速度生成统计表可视化: 生成 echarts 统计图,主要是统计最近 60 秒每秒的消费次数、最近 60 分钟每分钟的消费次数 最近 24 小时每小时的消费次数、最近 10 天每天的消费次数

    rpc: 生产端(或叫发布端)获取消费结果

    locoz
        1
    locoz  
       2019-11-07 16:10:34 +08:00
    你好骚啊
    brucedone
        2
    brucedone  
    OP
       2019-11-08 09:50:09 +08:00
    @locoz 23333,这是群友天天显摆的一个框架,我忍不住给他发这里来让大家鉴赏一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:49 · PVG 12:49 · LAX 20:49 · JFK 23:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.