【Rust日报】2024-01-01 使用 Rust 构建生产级微服务

💡 原文中文,约1300字,阅读约需3分钟。
📝

内容提要

本文总结了使用Rust构建生产级微服务的过程,包括设置工作空间、添加CLI子命令、配置、Web服务器、应用程序状态、连接到数据库、基本CRUD操作、身份验证和授权、JWT授权中间件、改进错误处理和OpenTelemetry。另一篇文章讨论了Arc和String之间的性能差异,以及在多线程情况下String可能超过Arc的原因。第三篇文章介绍了AWS SDK for Rust的设计概述和实际使用指南。

🔎

延伸解读

微服务系列覆盖从开发到可观测性的完整链路

该系列博客并非零散技巧集合,而是按顺序覆盖了工作空间、CLI、配置、Web服务器、状态、数据库、CRUD、JWT鉴权、错误处理和OpenTelemetry追踪。这种结构适合作为构建生产级Rust微服务的路线图,读者可依次实践,避免遗漏关键环节。

Arc与String的性能选择需结合并发场景

文章实验表明,单线程下Arc克隆通常更快,但多线程高争用时,原子引用计数的争用可能拖慢Arc,而String借助Jemalloc线程本地内存池反而可能胜出。作者提醒不要盲目优化克隆,而应基于实际测量和评估选择策略。

AWS SDK for Rust的设计取舍值得关注

文章概述了SDK结构、配置认证、基本使用步骤,并特别讨论了异步操作和Builder模式的代价。这提示开发者在使用SDK时需权衡便利性与性能开销,理解其设计有助于更高效地集成AWS服务。

❓

Q&A

用Rust构建生产级微服务需要哪些主要步骤?

主要步骤包括:设置多包工作空间、添加CLI子命令、从文件或环境变量加载配置、基于Axum启动异步Web服务器、添加共享应用程序状态、使用sqlx和SeaORM连接PostgreSQL数据库、实现基本CRUD操作、实现基于JWT的身份验证和授权、添加JWT授权中间件、改进错误处理(如JSON解析错误时返回JSON响应)、使用OpenTelemetry将追踪数据转发到SigNoz。

在Rust微服务中如何连接和操作数据库?

使用sqlx和SeaORM连接到PostgreSQL数据库,并通过SeaORM实现基本的CRUD操作。

Rust微服务中如何实现身份验证和授权?

实现简单的登录端点,并基于JWT进行身份验证和授权。此外,添加JWT授权中间件来验证令牌,并包含简单的错误处理方法。

Arc<str>和String在性能上有什么差异?

在单线程情况下,Arc的克隆性能通常优于String。但在多线程高度争用的情况下,Arc的性能可能因原子引用计数的争用而下降,而String通过Jemalloc的线程本地内存池避免了这种问题,可能表现更好。

为什么多线程下String可能比Arc性能更好?

因为Arc的原子引用计数在多线程争用下会导致性能下降,而String利用Jemalloc的线程本地内存池避免了这种争用,从而可能表现更好。但需注意,不释放String时Jemalloc可能频繁调用mmap系统调用导致性能下降。

AWS SDK for Rust的设计有哪些特点?

AWS SDK for Rust的设计概述包括SDK结构、配置和认证、三种SDK配置方法、使用AWS服务的基本步骤、Fallible操作和模块、方法命名和返回类型、异步操作和Builder模式的代价、Blob和Bytestream类型,以及Rust类型系统的有趣方面。

🏷️

标签

➡️

继续阅读