使用 Rust 构建生产级微服务
这个由sanyi编写的博客系列 “在Rust中构建生产就绪微服务” 涵盖了Rust中构建生产就绪微服务的过程。以下是每篇博客的主要主题总结:
- 设置工作空间:
- 为Rust应用程序设置多包工作空间。
- 添加CLI子命令:
- 实现一种简单的模式,以向应用程序添加多个CLI子命令。
- 配置:
- 从文件或环境变量中加载配置。
- Web服务器:
- 基于Axum启动异步Web服务器。
- 应用程序状态:
- 向Rust应用程序添加共享状态。
- 连接到数据库:
- 使用sqlx和SeaORM连接到PostgreSQL数据库。
- 基本CRUD操作:
- 使用SeaORM实现基本的CRUD操作。
- 身份验证和授权:
- 实现简单的登录端点和基于JWT的身份验证和授权。
- JWT授权中间件:
- 添加JWT令牌验证和简单的错误处理方法。
- 改进错误处理:
- 改进错误处理,在JSON解析错误时返回JSON响应。
- OpenTelemetry:
- 使用OpenTelemetry将追踪数据转发到SigNoz。
该系列覆盖了从项目设置到数据库集成、身份验证、授权、错误处理和跟踪等一系列主题。每篇博客都提供实际见解和实际示例,指导在Rust中构建生产就绪微服务。
Arc<str>
和 String 性能对比
本文讨论了 Arc 和String之间的性能差异,以及在多线程情况下,为什么有时候String的性能可能超过Arc。
实验结果表明,在单线程情况下,Arc的克隆性能通常优于String。然而,在多线程情况下,Arc的性能可能受到原子引用计数的争用的影响,从而导致性能下降,而String则通过Jemalloc的线程本地内存池避免了这种问题。文章还通过strace命令和内存映射的分析,说明了在不释放String的情况下,Jemalloc可能会导致性能下降,因为它需要频繁地调用mmap系统调用。
总的来说,文章建议在大多数情况下,克隆Arc通常比String更快。但在高度争用的多线程情况下,由于原子引用计数的锁争用,性能可能下降。因此,作者建议在面临性能瓶颈时,不仅仅盲目地优化克隆操作,而是应该仔细测量和评估不同的优化策略。
通过Rust AWS SDK 探索API 设计
本文介绍了AWS SDK for Rust的设计概述和实际使用指南。主要内容包括SDK结构、配置和认证、三种SDK配置方法、使用AWS服务的基本步骤、Fallible操作和模块、方法命名和返回类型、异步操作和Builder模式的代价、Blob和Bytestream类型、Rust类型系统的有趣方面以及总结展望。
--
From 日报小组 BobQ, FBI小白
社区学习交流平台订阅:
评论区
写评论还没有评论