从压测 actix v2/v3 (Rust) 和 Http4k, Ktor(Kotlin) 微服务上所学到的
作者分别使用 Kotlin 和 Rust 的不同框架写了同样的微服务, 并且对其进行了压测对比.
之所有没有直接引用别人的压测结果(例如著名的 techempower: Web Framework Benchmarks
),
而且是选择自己完全手写项目来测试,是因为:
- 作者想用接近
生产
级别的代码进行对比, 这些代码包括了合理的错误处理, HTTP状态码, JSON序列化, 参数处理等. - 除了
req/s
和延迟指标,作者想要更多的维度指标的对比.例如 CPU, 内存 等等. - 使用正式环境压测,例如在 k8s中, 内存和 CPU 都是有限制的.
- 自己的存储, 例如例子中使用自己的 Elasticsearch.
原文中有大量的指标图
对比,感兴趣的同学可以查看原文.
作者甚至粗略地计算了他们各自的成本
:
Http4k | Ktor | Actix | |
---|---|---|---|
CPU time per request | 560 µs | 460 µs | 170 µs |
Cost per billion requests | $4.3 | $3.5 | $1.3 |
在这个一切皆为资源的云时代, Rust
可以帮你节省不少成本呢!
techempower: Web Framework Benchmarks
Actix-web 3.0 正式发布
Actix-web 3.0 正式发布了!
是目前为止最为稳定的版本,强烈建议大家升级到最新版本.
Bunt,一个简便易用的命令行颜色库
使用起来非常简单.
// Style tags will color/format text between the tags.
bunt::println!("I really like {$yellow}lemons{/$}! Like, {$blue+italic}a lot{/$}.");
// To style a single argument, you can also use the `{[style]...}` syntax. This
// can be combined with style tags.
let v = vec![1, 2, 3];
bunt::println!("Here is some data: {[green]:?}. {$bold}Length: {[cyan]}{/$}", v, v.len());
效果图
移植 PineTime Watch Face(C to Rust)
该文介绍了如果一步一步把一个基于 LGVL 的 PineTime (一款 linux 智能手表) app 从 C 移植到 Rust 上(RIOT系统上). 详细程度到代码级别, 采用 C 代码和 Rust 左右对比的模式,让你清清楚楚,从头到尾的了解他是如何从 C 移植到 Rust 上.
多达 30 步:
- Function Declaration
- Variable Declaration
- Null Pointers
- Import C Functions into Rust
- Numeric Types
- Pass Strings from Rust to C
- Pointer Dereferencing
- Return Value
- C to Rust Conversion: First Version
省略...
- What's Next
- References
每一步都会列出原始代码和转换后的代码:
原始的 C 代码:
lv_obj_t *screen_time_create(home_time_widget_t *ht) {
// Create a label for time (00:00)
lv_obj_t *scr = lv_obj_create(NULL, NULL);
lv_obj_t *label1 = lv_label_create(scr, NULL);
lv_label_set_text(label1, "00:00");
lv_obj_set_width(label1, 240);
lv_obj_set_height(label1, 200);
ht->lv_time = label1;
...
return scr;
}
转换后的 Rust 代码:
fn create_widgets(widgets: &mut WatchFaceWidgets) ->LvglResult<()> {
// Create a label for time (00:00)
let scr = widgets.screen;
let label1 = label::create(scr, ptr::null()) ? ;
label::set_text(label1, strn!("00:00")) ? ;
obj::set_width(label1, 240) ? ;
obj::set_height(label1, 200) ? ;
widgets.time_label = label1;
...
Ok(())
}
--
From 日报小组 BobQin,FBI小白
社区学习交流平台订阅:
评论区
写评论毕竟被放弃了
--
👇
c5soft: Actix-Web 3.0有哪些新特点,看这里:https://www.oschina.net/news/118578/actix-web-3-0-released?utm_source=tuicool
实测Actix-Web 3.0用于搭建https服务器仍然不如warp稳定,ApacheBench压力测试并发加到2K就蹦了,warp能稳稳地跑10K并发。
Actix-Web 3.0有哪些新特点,看这里:https://www.oschina.net/news/118578/actix-web-3-0-released?utm_source=tuicool
实测Actix-Web 3.0用于搭建https服务器仍然不如warp稳定,ApacheBench压力测试并发加到2K就蹦了,warp能稳稳地跑10K并发。