• 哪里可以看到?

  • 你需要联系我吗?

  • 早鸟票路过必须支持一下!

  • DHH 有没有相关的博客或文章讲到这一点?

  • 哈哈,谢谢谢谢

  • 感谢楼主整理分享,Paybase 上也有很多类似的帖子,你可以看看 https://paybase.cn/

    另外,我可以把这篇帖子转发到 Paybase 上吗?这样也能帮助到其他人 :)

  • 使用 Rust 将解析日志的速度提高了 230 倍

    该文章是《The Ruby Way》的作者 André Arko 写的,同时他也是 Ruby 包管理器 Bunlder 的 No.1 贡献者,以及 Rubygems.org 的维护者。

    所以,他在维护 Rubygems.org 的过程中,遇到最让他头疼的事情就是对日志的处理。Rubygems 每天有 4000 到 25000 个请求,磁盘每天可以产生 500GiB 的日志。他们尝试了一些日志的托管产品,但是这些产品也只能为他们保留 1 个小时以内的日志数据。

    大概一年前,他把完整的日志进行了压缩,放到了 s3 上面,存储成本大概是每个月 3.5 美刀。但是有很多他感兴趣的统计数据被「埋葬」在了 S3 上面。因为 S3 的 gzipped JSON 流很难查询数据。这些统计数据有利于提供 Ruby 生态系统状态的重要信息。

    后来利用 aws 的 Glue 功能,可以运行基于 spark 脚本的 hadoop 集群,他写了一个统计脚本,但是费用上升到了每月 1000 刀。

    后来,也不知道是什么原因,让他想到了 Rust。

    事实证明,Rust 满足了他的需求。 Serde Json 库,让他可以在 2 秒内将 1GB 的 JSON 反序列化为 Rust 数据类型。并且使用 nom 来解析日志,可以在 3 分钟内解析 1GB 的日志文件,作者说,用 Python 和 Glue 在 30 分钟内解析完日志,他就觉得了不起了。

    但是作者又仔细阅读了 nom 的文档,发现了一句「有时候,nom 几乎和 regex 一样快」,这句话给了他灵感,他又用 regex 重写了解析代码,性能又提高了 3 倍。至少比 spark 中使用 python 解析快 30 倍。但是他把这个 Rust 程序的性能又多牛逼的事情告诉 @ReinH (他的朋友,Rust 的贡献者之一,比他更了解 Rust)的时候,ReinH 说,怎么这么慢?你这个程序必须得优化。

    他不清楚他的朋友是不是跟他开玩笑,但是他继续对 Rust 进行研究,然后他发现了—release 模式,在使用 release 模式编译代码之后,突然发现:他可以在 8 秒内把 1GB 的文件解析完。以下是处理速度的一个对比记录:

    ~525 records/second/cpu in Python on AWS Glue 50,534 records/second/cpu in Rust with nom 121,153 records/second/cpu in Rust with regex + release

    但他没满足,继续使用 rayon 对程序并行化处理日志,最终的程序,在 8 核机器上快了 100 倍,在单核上跑,快 230 倍。现在的 1GB 的日志文件处理需要 6.4s。

    151,441 records/second/cpu in Rust with regex + release+ rayon

    最后如何部署是个问题。

    他尝试了一些方案之后,最后发现了 aws Lambda,它有一个免费策略:每个月 400,000s。而作者处理 500GB 日志,只需要 3000 多 s。于是他就快乐地使用了 aws Lambda 功能。

    源码 : https://github.com/rubytogether/kirby

    原文:https://andre.arko.net/2018/10/25/parsing-logs-230x-faster-with-rust/


    转载自:Rust 每日新闻

  • 哈哈抱歉,搞错了😂

  • 谢谢,长知识了。果然优秀的人到哪都会一直优秀,原来那些我听过甚至用过的工具都由这个哥们开发或参与开发,确实让人敬佩。

    哈哈哈,Anyshortcut 确实是一款比较小众极客的产品,一般人用不到,采用订阅制收费仅仅是一种对 SaaS 的尝试,并没有刻意在乎多少人会用。

  • 支持一下