本书将向您介绍Rust的微服务开发。我在很久以前就开始使用Rust了,早在2015年。自版本1.0发布以来只有几个月了,当时我并不认为这个工具会引发一场会破坏的无声革命与系统编程相关的传统,在那个时候,它是乏味的,绝不是时髦的。
也许我夸大了一点,但我目睹了公司如何停止使用惯用工具并开始重写其部分产品或Rust中的一些服务,他们对结果非常满意,他们继续这样做时间和再次。如今,Rust是区块链计划的重要组成部分,是WebAssembly的旗舰产品,是开发利用所有可用服务器资源的快速可靠微服务的绝佳工具。因此,Rust已经从一个好奇的开发人员的业余爱好工具转变为现代产品的坚实基础。
在本书中,我们将学习如何使用Rust创建微服务。我们首先简要介绍微服务,并讨论为什么Rust是编写它们的好工具。然后,我们将使用超级软件包创建我们的第一个微服务,并学习如何配置微服务和日志活动。之后,我们将探讨如何使用serde crate支持不同格式的请求和响应。
这本书的目的是谁
本书专为两类读者经验丰富的Rust开发人员而设计,他们是微服务的新手,也是Rust新手的高级微服务开发人员。我试图覆盖今天Rust开发人员可用的有用工具和包装箱的生态系统。本书描述了微服务的创建,从高级框架到构建低级异步组合器,以最小的资源阻塞时间产生响应。本书旨在让您找到特定任务的解决方案。
为了能够理解本书中涉及的主题,您需要Rust编程语言的扎实背景(您应该能够使用Cargo 编写和编译应用程序,了解生命周期和借用概念,了解特征如何工作,并了解如何使用引用计数器,互斥锁,线程和通道)。如果您不熟悉Rust,请在阅读本书之前花些时间了解这些概念。
您还必须知道如何编写一个处理HTTP协议的最小后端。您必须了解REST是什么,以及如何将其用于应用程序。但是,您不必了解HTTP / 2的工作原理,因为我们将使用提供与特定传输无关的抽象的包。
这本书涵盖了什么
- 第1章,微服务简介,向您介绍微服务以及如何使用Rust创建它们。在本章中,我们还讨论了使用Rust创建微服务的好处。
- 第2章,使用Hyper Crate开发微服务,描述了如何使用超级板条创建微服务,从而允许我们创建一个紧凑的异步Web服务器,可以精确控制传入的请求(方法,路径,查询参数等)。
- 第3章,日志记录和配置微服务,包括有关使用命令行参数,环境变量和配置文件配置微服务的信息。您还将了解如何向项目添加日志记录,因为这是维护生产中微服务的最重要特性。
- 第4章,使用Serde Crate进行数据序列化和反序列化,解释了除了传统的HTTP请求之外,您的微服务还必须支持特定格式的正式请求和响应,例如JSON和CBOR,这对于API实现和组织微服务的相互作用的条款。
- 第5章,了解Futures Crate的异步操作,深入研究Rust的更深层次的异步概念,以及如何使用异步原语编写组合器来处理请求并为客户端准备响应。如果不清楚这些概念,就无法编写有效的微服务来利用服务器的所有可用资源,并避免阻塞执行异步活动的线程,并需要对执行运行时进行特殊处理。
- 第6章,反应式微服务 - 提高容量和性能,向您介绍一个不会立即响应传入请求的响应式微服务,并且在完成后处理请求和响应需要时间。您将熟悉Rust中的远程过程调用以及如何使用该语言,以便微服务可以相互调用。
- 第7章,与数据库的可靠集成,向您展示了如何使用Rust与数据库进行交互。您将了解提供与数据库交互的包,包括MySQL,PostgreSQL,Redis,MongoDB和DynamoDB。
- 第8章,使用对象关系映射与数据库交互,解释了为了有效地与SQL数据库交互并将数据库记录映射到本机Rust结构,您可以使用对象关系映射(ORM)。本章演示了如何使用需要夜间编译器版本且其功能用于生成表格绑定的柴油箱。
- 第9章,简单REST定义和使用框架的请求路由,解释了在某些情况下,您不需要编写严格的异步代码,并且使用简化微服务编写的框架就足够了。在本章中,您将熟悉四个这样的框架 - rouille,nickel,rocket和gotham。
- 第10章,微服务中的后台任务和线程池,讨论了微服务中的多线程以及如何使用线程池在后台执行任务,因为并非每个任务都可以异步执行并且需要高CPU负载。
- 第11章,涉及与Actors和Actix Crate的并发,向您介绍Actix框架,它使用actor的模型为您提供易于与Rust兼容的抽象。这包括性能的平衡,代码的可读性和任务分离。
- 第12章,可伸缩微服务架构,深入探讨了如何设计松散耦合微服务,这些微服务不需要了解兄弟微服务,并且使用消息队列和代理来相互交互。我们将编写一个如何使用RabbitMQ与其他微服务进行交互的示例。
- 第13章,测试和调试Rust微服务,解释了测试和调试如何成为准备微服务发布的关键组件。您将学习如何从单元测试中测试微服务,以涵盖具有集成测试的完整应用程序。然后,我们将讨论如何使用调试器和日志记录功能调试应用程序。此外,我们将创建一个使用基于OpenTrace API的分布式跟踪的示例 - 一种用于跟踪复杂应用程序活动的现代工具。
- 第14章,微服务优化,描述了如何优化微服务并尽可能提取最大性能。
- 第15章,将服务器打包到容器,解释了当微服务准备发布时,应该关注如何将微服务打包到容器,因为至少一些微服务需要额外的数据和环境才能工作,甚至只是为了获得优势快速交付容器在裸二进制文件上。
- 第16章,Rust微服务的开发 - 持续集成和交付,继续学习如何构建微服务的主题,并解释如何使用持续集成来自动化产品的构建和交付过程。
- 第17章,AWS Lambda的有界微服务,向您介绍无服务器架构,这是一种编写服务的替代方法。您将熟悉AWS Lambda,并且可以使用Rust编写作为无服务器应用程序的一部分工作的快速函数。此外,我们将使用无服务器框架以完全自动化的方式构建示例应用程序并将其部署到AWS基础架构。
为了充分利用这本书
您至少需要Rust版本1.31。 使用rustup安装它:https://rustup.rs/。 要编译某些章节中的示例,您需要安装每晚版本的编译器。 您还需要使用Docker Compose安装Docker来运行带有数据库和消息代理的容器,以简化本书中examplemicroservices的测试。
下载示例代码文件
您可以从www.packt.com上的帐户下载本书的示例代码文件。如果您在其他地方购买了本书,可以访问www.packt.com/support并注册以直接通过电子邮件将文件发送给您。
您可以按照以下步骤下载代码文件:
选择SUPPORT选项卡。
单击Code Downloads&Errata。
在“搜索”框中输入图书的名称,然后按照屏幕上的说明操作。
下载文件后,请确保使用最新版本解压缩或解压缩文件夹:
适用于Windows的WinRAR / 7-Zip
Zipeg / iZip / UnRarX for Mac
适用于Linux的7-Zip / PeaZip
该书的代码包也托管在GitHub上,网址为https://github.com/PacktPublishing/Hands-On-Microservices-with-= Rust。如果代码有更新,它将在=现有的GitHub存储库上更新。
我们还提供了丰富的书籍和视频目录中的其他代码包,网址为https://github.com/PacktPublishing/。去看一下!
下载彩色图像
我们还提供了一个PDF文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 您可以在此处下载:https://www.packtpub.com/sites/default/files/downloads/9781789342758_ColorImages.pdf。
使用的约定
本书中使用了许多文本约定。
CodeInText:表示文本,数据库表名,文件夹名,文件名,文件扩展名,路径名,虚拟URL,用户输入和Twitter句柄中的代码字。 下面是一个示例:“将下载的WebStorm-10 * .dmg磁盘映像文件作为系统中的另一个磁盘挂载。”
代码块设置如下:当我们希望引起您对代码块的特定部分的注意时,相关的行或项目以粗体显示:
let conn = Connection::connect("postgres://postgres@localhost:5432", TlsMode::None).unwrap();
当我们希望引起您对代码块的特定部分的注意时,相关的行或项目以粗体显示:
#[derive(Deserialize, Debug)]
struct User {
name: String,
email: String,
}
任何命令行输入或输出都写成如下:
cargo run -- add user-1 user-1@example.com
cargo run -- add user-2 user-2@example.com
cargo run -- add user-3 user-3@example.com
粗体:表示您在屏幕上看到的新术语,重要单词或单词。 例如,菜单或对话框中的单词会出现在文本中。 下面是一个示例:“从”管理“面板中选择”系统信息“。
保持联系
欢迎来自我们读者的反馈。
一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中提及书名,并发送电子邮件至customercare@packtpub.com。
勘误表:虽然我们已尽力确保内容的准确性,但确实会发生错误。 如果您在本书中发现错误,我们将非常感谢您向我们报告此事。 请访问www.packt.com/submit-errata,选择您的图书,点击勘误表提交表格链接,然后输入详细信息。
盗版:如果您在互联网上以任何形式发现我们作品的任何非法副本,如果您向我们提供位置地址或网站名称,我们将不胜感激。 请通过copyright@packt.com与我们联系,并提供相关材料的链接。 如果您有兴趣成为作者:如果您有专业知识的主题,并且您有兴趣撰写或撰写图书,请访问authors.packtpub.com。
评测
请留下评论。 阅读并使用本书后,为什么不在您购买的网站上留下评论? 潜在的读者可以查看并使用您的公正意见来做出购买决定,Packt可以了解您对我们产品的看法,我们的作者可以看到您对其图书的反馈。 谢谢! 有关Packt的更多信息,请访问packt.com。