自定义程序
1 subscriber
73 photos
15 videos
5 files
251 links
自定义程序丰富生活
Download Telegram
Forwarded from Rust 视界
「博文」一个使用Rust节约成本的故事

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

该文章是《The Ruby Way》的作者[André Arko](https://github.com/indirect)写的,同时他也是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功能。

源码 : [kirby](https://github.com/rubytogether/kirby)

[Read More](https://andre.arko.net/2018/10/25/parsing-logs-230x-faster-with-rust/)
Forwarded from Solidot
King Arthur's Gold 开源

2D 物理和合作建造独立游戏《King Arthur's Gold》宣布免费并公开源代码,源代码托管在 GitHub 上。《King Arthur's Gold》混合了失落的维京人的合作元素,加上了百战天虫中可完全摧毁地形的能力以及合金弹头系列里的视觉效果和动作元素。免费玩家限制了定制性,但可以通过购买 DLC 或 patreon 捐款支持解锁所有定制选项。Media

https://www.solidot.org/story?sid=60315
Forwarded from Funny Job
我分享的书籍侧重 “数学 & 物理 & 金融” ,主打pdf&djvu格式。


电子书库 1)丛书系列 只读密钥:BQ36ZETYSW4SLJ2VMPIGXATAEMXYKXDHT

      截止20170212共82G,按出版丛书或某一个主题分类。

电子书库 2)主题分类 只读密钥:BZCTXN7QYCMXS5PINIEO3JU7C7YFI6GOR

      截止20170212共32.9G,按学科及其分支分类,但不包括“电子书库 1)丛书系列”已有的书籍。

电子书库 3)科普读物 只读密钥:B7ZJOFU5YGHTVQOT42JLGOULNTPTZ73FS
      截止20170212共6.24G,只收入科普读物,但不包括“电子书库 1)丛书系列”已有的书籍。


电子书库 4)学习书单 由于和前面三类有重复,我还是此类其删除了。 【放心,不会影响你们已经下载的书籍】

电子书库 5)网友荐书 只读密钥:BZ7VZSMPAORFQ2FP5PSJK4P2PAND6WD66
读写密钥:AVTCAYB5WIOHPFETX3UYQKL2EPPQAINTT
      可自由上传删除,我将尽可能及时进行分类转移。
Forwarded from Rust 视界
零成本抽象

官方核心团队无船同志的新博文,探讨了「零成本抽象」。

零成本抽象在C++跟Rust是一個很重要的概念

簡單來說就是:不希望有很大很重的runtime,並且可以在編譯時被優化。

作者覺得 rust 有幾個很棒的 零成本抽象

1. 所有權、借用

保證内存的正確使用

2. 迭代器、閉包函數

可以輕鬆的串接 map, filter 等函數做處理

3. await 异步函數

當前的await語法雖然還沒有確定,但使用pinning 做到零成本抽象是確定的

4. Unsafe 函數、模块邊界

由於rust的語法複雜性,有很多實作會需要Unsafe的底層實作

這些Unsafe函數實作了零成本抽象的底層

讓我們在上層能安全的使用這些模块

另外无船同志还表示:trait对象目前不是零成本抽象,他想花点时间(至少需要18个月)去研究这个问题,然而总是有更优先的事情。

- [Reddit 讨论](https://www.reddit.com/r/rust/comments/bpep6h/zero_cost_abstractions/)
- [Read More](https://boats.gitlab.io/blog/post/zero-cost-abstractions/)
Forwarded from Rust 视界
case-studies: Rust实例探究

#learning #study

该库展示了一些棘手的Rust代码示例,这些代码是dtolnay(syn作者,Rust宏的高手)在使用Rust(他自己和其他人)中的各种高级宏库时遇到的问题集合。该项目致力于对Rust宏开发的一个深刻洞察:擅长使用宏的人和宏专家之间的区别主要与他们擅长“宏”的程度是无关的。

这也许是学习Rust宏的一个非常好的案例。

[case-studies](https://github.com/dtolnay/case-studies)
Forwarded from Rust 视界
hors 0.3.0

一個類似 google search 找解答的工具

howdoi 的 rust 實作版本

比如你有個問題叫 "how to parse json in rust"

使用下列指令
hors "how to parse json in rust" -a


得到解答
-
Answer from https://stackoverflow.com/questions/30292752/how-do-i-parse-a-json-file

Solved by the many helpful members of the Rust community:

extern crate rustc_serialize;
use rustc_serialize::json::Json;
use std::fs::File;
use std::io::Read;

fn main() {
let mut file = File::open("text.json").unwrap();
let mut data = String::new();
file.read_to_string(&mut data).unwrap();

let json = Json::from_str(&data).unwrap();
println!("{}", json.find_path(&["Address", "Street"]).unwrap());
}

[Read more](https://www.reddit.com/r/rust/comments/bsg9w4/hors_030_is_released_it_supports_google_search/)
Forwarded from Rust 视界
遊戲排隊系統尋找外包

「台湾」找外包 預算6萬人民幣 有興趣的人請寄 t1238142000@gmail.com ,要求Rust实现。

[Read more](https://hackmd.io/k0-2wJ4fToC2LQ9hHqDLbg?view)
Forwarded from Rust 视界
「官方」Rust治理工作组即将公开

#official

Rust的治理工作组(The Governance WG)即将公开,可以在其工作仓库中看到详细的工作章程。

简单来说,治理工作组是「其他团队」,「Rust项目」和「整个社区」的推动者。它旨在改善社区中,团队和参与者之间,以及团队和参与者之间的流程和交互,以减少工作量和不必要的摩擦。在这样做的同时,它也试图取得平衡,以尽可能简化流程,尽可能透明。同时请记住,绝大多数人都是自愿参与项目的,因此解决方案必须切合实际,尽可能减轻负担。

(个人看法: Rust项目本身一直算是开源界的一个典范,治理工作组的诞生,及其流程规范,必将引领开源社区,对开源感兴趣的朋友可以关注)

- [Read More](https://blog.rust-lang.org/2019/06/03/governance-wg-announcement.html)
- [工作仓库](https://github.com/rust-lang/wg-governance/)
- [工作组具体章程](https://github.com/rust-lang/wg-governance/blob/master/CHARTER.md)