返回顶部
首页 > 资讯 > 精选 >为什么Rust不适合开发Web API
  • 719
分享到

为什么Rust不适合开发Web API

2023-06-15 18:06:21 719人浏览 薄情痞子
摘要

这篇文章主要讲解了“为什么Rust不适合开发WEB api”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么Rust不适合开发Web API”吧!Rust 是一门神奇的编程语言,有非常好的

这篇文章主要讲解了“为什么Rust不适合开发WEB api”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么Rust不适合开发Web API”吧!

Rust 是一门神奇的编程语言,有非常好的 CLI 工具,比如 ripgrep 和 exa。像 Cloudflare 这样的公司正在使用并 鼓励人们写  Rust 来运行微服务。Rust 编写的软件可能比 c++ 或 C 更安全、更小、更简洁。

如果我正在编写一个地理编码器、一个路由引擎、一个实时消息平台、一个数据库或一个 CLI 工具,Rust 最合适。

但去年,我试图用 Rust 写一个传统网站的纯 API 服务,Rust 就不合适了。

为什么Rust不适合开发Web API

缺失很多小功能

Rust 有大量的 Web 服务框架数据库连接器和解析器。但搭建身份验证服务方面只有非常低层次的组件。node.js 有  passport.js,Rails 有 devise,Django 有 开箱即用的身份验证模型,在 Rust 中,你需要学习如何将共享 Vec  转换到底层加密库才能构建这个系统。

译者注,Vec 是一个动态数组,只会自动增长而不会自动收缩。区别于 Array,Vec 具有动态的添加和删除元素的能力,并且能够以 O(1)  的效率进行随机访问。Vec 的所有内容项都是生成在堆空间上的,可以轻易的将 Vec 移出一个栈而不用担心内存拷贝影响执行效率,毕竟只是拷贝栈上的指针。

有些库试图解决这个问题,比如 libreauth,但它才刚刚开始开发。还有很多类似的 Web 框架问题。

SDK 呢?在主流编程语言中,你可以通过一个官方库来接入 Google 云服务、AWS 或 Stripe。这些官方库大都很棒。例如,aws-sdk-js  和 Stripe 库的设计和维护得非常好。

Rust 就不这样,只有少许第三方库,但以这些服务的开发速度,它们真的能够提供高质量的体验吗?

有人会说好吧,X 编程语言太好了,你可以在周末自己写一个 SDK!我必须回答,不。

Rust 的生态系统在其它领域非常丰富。用于构建 CLI、管理并发性、使用二进制数据和底层解析器的 crates 令人印象深刻,非常棒。

Rust 编译器比以前快,但仍然很慢

我一直在看 Nicholas Nethercote 的博客,描述了 Rust 团队如何优化编译器,让它更快!

但与其它编程语言相比,用它构建网站会很慢。它比编译型编程语言 Go 慢得多,也比解释型编程语言 javascript、Ruby 和 python  等慢得多。

一旦代码被编译,一切就变得非常棒了!但在我的情况下,甚至基本 API 功能都不完整,一个不复杂的系统——居然花了 10 多分钟来编译。Google  代码构建 的硬件配置很差,每次都会超时,我啥都编译不了。

只要不重建缓存依赖项,缓存就有意义。也许 减少依赖 会加快 Rust 项目编译。但就像 serde,几乎所有人都使用的 JSON 和其它序列化 /  反序列化程序占用了大量的编译时间。我们是否应该用编译速度更快但缺乏大量文档和生态系统支持的东西来取代 serde?这种取舍非常糟糕。

Rust 很复杂

Rust  让你从代码维度进行思考,这对系统编程来说非常重要。它让你思考如何共享或复制内存,思考真实但不太可能的小概率事件,并确保妥善处理它们,帮你编写各种各样的高效代码。

这些担忧都是合理的,但是对于大多数 Web 应用程序来说,它们并不是最重要的关注点,以流行的惯性思考会导致不正确的假设。

就拿 Rust 的安全性来说吧。这是它宣传语中的重要部分,这是绝对正确的:Rust  的承诺安全和底层两者兼而有之——它可以在没有垃圾收集器的情况下工作,同时防止基于内存的漏洞。当你读到“安全”的时候,想想 Rust 的竞争对手 C 吧。C  语言中的代码可以引用任意内存,很容易溢出和出错。Rust 代码可以和 C 代码一样快,但是可以保护内存访问,而不需要垃圾收集器或某种运行时检查。

但是 Rust 的内存规则并不比 node.js 或 Python 更安全,用 Rust 编写的 Web 应用程序在系统上不会比 Python 或  Ruby 应用程序安全。带有垃圾收集器的高级编程语言通常为避免这类漏洞利用和错误而付出性能损失。不能在 JavaScript 中引用未初始化的内存,因为  JavaScript 中不进行内存间的引用。

旁注:这是在描述 Node.js 和其它系统的设计目标——它们确实偶尔会有 bug。Node.js 的缓存对象,就值得读一读。

你要是 问一些人,他们会说如果使用不安全的代码,Rust 相比带有内存回收的编程语言是不安全的——包括最流行的 Web 框架  Actix(译者注,Actix 是 Rust 的 Actor 异步并发框架,基于 Tokio 和 Future,开箱具有异步非阻塞事件驱动并发能力,其实现低层级  Actor 模型来提供无并发模型,而且同时提供同步 Actor,具有快速、可靠,易可扩展 https://actix.rs/),因为  不安全代码允许原始指针的延迟。

如果你正在写一个视频游戏,暂停执行垃圾收集是不好的。如果你在编写微控制器代码,任何内存“开销”或浪费都是非常糟糕的。但是大多数 Web  应用程序可以节省一点内存开销来换取生产性能。

Rust  的其它属性面对的争议几乎一样。它的并发特性是太神奇了,如果你在做一些复杂的事情,需要快速响应,这当然很棒。但如果情况不是这样呢?至少可以说,Rust  的异步生态系统面临着很大挑战:各种不相关的领域中有着不同的异步实现,比如 tokio。

相比较之下,Python 的 Tornado 和 Twisted 异步实现的很奇怪,Node.js 异步实现的很好,但语法都很丑陋。

我确信,Rust 的异步将会稳定和统一,未来会更容易操作,但我现在就要用啊。

Rust 生态系统不是以 Web 为中心的

很多人正在学 Rust,用 Rust 编写 CLI 应用程序或底层代码,并且玩得非常开心。使用 Rust  编写普通 Web 应用程序的人明显少很多。

这是技术选择中的重要部分:是否有人在使用该工具?他们大致在同一个领域吗?不幸的是,Rust 生态系统中许多令人难以置信的令人兴奋的工作与 Web  应用服务器无关。的确存在一些很有前途的 Web 框架——甚至更高层次的框架,但毫无疑问,它们市场很小。即使是主要的 Web 框架 Actix  也只有几个顶尖贡献者。

如果 Rust 以目前的速度增长,那么社区中的 Web 部分将达到一个临界值,但我认为没有足够多的人使用 Rust  作为网站的实用工具。与其它社区相比,有很多公司致力于使用现有的工具来构建 Web 应用程序,这些工具不是最前沿的,但足够将成熟技术与新技术区分开来。

Juniper 的 N+1 次查询

这一部分不仅仅是 Rust,它还涉及 GraphQL 生态系统,Rust 参与这个生态系统就是一个例子。

N+1 问题 是每个构建 Web  应用程序的人都应该知道的。要点是:你有一页照片(一次查询),你要显示每张照片的作者,会有多少次查询:1,合并照片和作者,或者在检索照片后对每张照片进行查询以获取作者?或者两次,第二次查询  ids 中的 user.id,一次获取所有作者,然后重新设置他们的照片属性。

N+1 查询通常优先使用数据库解决:比如将 N+1 查询改为单个查询,会带来明显的性能优化。我们有很多方法来尝试和解决这些问题:你可以编写  sql,并尝试使用 CTE 和 JOIN 在单个查询中完成大量工作,就像我们在 Observable 中所做的那样,或者使用像 ActiveRecord 这样的  ORM 层将 N+1 查询转换为可预测查询的快速方法。

Juniper 是一个用于 Rust 应用程序的 GraphQL 服务。GraphQL  基本上都是由前端应用程序定义查询,而不是后端。给它一系列可以查询的东西,然后应用程序(React 或其它)将任意查询发送到后端。

这会让后端变得复杂。任何 SQL 级别的优化都不可能做到——你的服务器正在编写动态 SQL,优化只能依赖 GraphQL  服务,但它不会总是有效。例如:Juniper 默认情况下执行的是 N+1 查询,解决方案 dataloader  还比较粗糙且需要单独维护。因此,最终您将拥有一个非常快的应用程序层,但它所有的时间都花在了极其低效的数据库查询上。

总之,GraphQL 与 NoSQL 数据库配合使用效果非常好,它可以快速为这些类型的请求提供服务。我确信 Facebook 内部有一些特定的数据库与  GraphQL 结合在一起使用效果非常棒,但业内其他企业则非常依赖 Postgres 和同类产品。

感谢各位的阅读,以上就是“为什么Rust不适合开发Web API”的内容了,经过本文的学习后,相信大家对为什么Rust不适合开发Web API这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 为什么Rust不适合开发Web API

本文链接: https://lsjlt.com/news/281212.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 为什么Rust不适合开发Web API
    这篇文章主要讲解了“为什么Rust不适合开发Web API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么Rust不适合开发Web API”吧!Rust 是一门神奇的编程语言,有非常好的...
    99+
    2023-06-15
  • redis适合什么开发
    redis适合的开发场景:1.用于存储热点数据。2.用于高并发的秒杀活动、分布式序列号的生成等计算相关的场景。3.用于消息队列。redis适合的开发场景:redis速度快、支持的数据类型比较丰富,因此redis适合用来存储热点数据。redi...
    99+
    2024-04-02
  • golang适合开发什么
    go 语言尤其适合开发分布式系统、网络应用程序、云计算和人工智能,因为它的高并发性、网络编程库、云计算兼容性和人工智能支持使之成为这些领域的首选。 Go 语言适合开发什么 Go 语言是...
    99+
    2024-04-02
  • 为什么go语言适合并发
    本篇文章为大家展示了为什么go语言适合并发,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。操作环境:windows10系统、GO 1.11.2、thinkpad t480电脑。go语言适合并发的原因G...
    99+
    2023-06-14
  • Python 和 JavaScript:哪个更适合 Web 开发?
    随着互联网的不断发展,Web 开发已经成为了一个非常重要的领域。而在 Web 开发中,Python 和 JavaScript 这两门语言都有着非常广泛的应用。那么,究竟哪个更适合 Web 开发呢?本文将从语言特性、应用场景以及开发工具等方...
    99+
    2023-08-30
    javascript unix http
  • Java和JavaScript:哪个更适合Web开发?
    Java和JavaScript是两种非常流行的编程语言,它们在Web开发领域都有广泛的应用。在选择哪种语言来进行Web开发时,很多人都会面临这个问题。本文将探讨Java和JavaScript各自的优势和不足,以及它们在Web开发中的应用情况...
    99+
    2023-09-10
    javascript shell linux
  • 深入探讨vue适合web开发吗
    Vue.js 是当下最火热的 JavaScript 前端框架之一,它提供了一种简单的方式来构建用户界面。Vue.js 非常容易学习,而且在构建单页面应用程序时非常有用。但是,对于 Web 开发来说,Vue.js 是否适合呢?我们来深入探讨一...
    99+
    2023-05-14
  • Java、Laravel、Django,哪个更适合开发RESTful API?
    RESTful API已经成为了现代Web应用程序的标准。对于开发人员来说,选择一个合适的框架来开发RESTful API是非常重要的,因为这将直接影响到应用程序的性能、可扩展性和易用性。在本文中,我们将讨论Java、Laravel和Dj...
    99+
    2023-06-16
    load laravel django
  • web开发中为什么一定要闭合HTML标签
    这篇文章给大家分享的是有关web开发中为什么一定要闭合HTML标签的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一定要闭合HTML标签在以往的页面源代码里,经常看到这样的语句:<li>Some&nbs...
    99+
    2023-06-27
  • Django和Laravel:谁更适合你的Web开发?
    随着Web应用程序的日益普及,Web开发框架也不断涌现。Django和Laravel是两个备受关注的Web开发框架,它们分别基于Python和PHP编程语言,都拥有广泛的用户群体。那么,对于Web开发者来说,Django和Laravel哪...
    99+
    2023-09-14
    django git laravel
  • ASP、Shell、NumPy、Django:哪个更适合Web开发?
    Web开发是一个众所周知的领域,它已经在我们的生活中扮演着越来越重要的角色。在Web开发的过程中,选择正确的工具和框架可以帮助您更快地实现您的目标,提高开发效率。ASP、Shell、NumPy和Django都是流行的Web开发工具和框架,...
    99+
    2023-08-23
    shell numy django
  • 为什么node.js不适合大型项目
    目录前言1. 应用的组成2. 应用的种类3. 应用服务的过程4. 应用的瓶颈5. 分布式应用6. 多进程的 Node.js前言 首先要明确什么是大型应用,其实这是仁者见仁、智者见智的...
    99+
    2024-04-02
  • 微信小程序开发为什么适合餐饮行业
    小编给大家分享一下微信小程序开发为什么适合餐饮行业,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!  微信小程序开发为什么适合餐饮行业  ▋首先,从餐饮方面上讲,比如说你开一家餐馆,在门口放上一个餐厅小程序入口的二维码。当有...
    99+
    2023-06-26
  • go语言比较适合开发什么
    这篇文章主要介绍go语言比较适合开发什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应...
    99+
    2023-06-15
  • Spring框架 vs. Python:哪个更适合Web开发?
    Spring框架和Python都是非常受欢迎的Web开发工具。但是,在选择一个开发工具时,您需要考虑许多因素。在本文中,我们将比较Spring框架和Python,并讨论它们在Web开发方面的优缺点。 Spring框架是一个Java开发框架,...
    99+
    2023-09-16
    bash spring load
  • PHP、Spring、Unix 和 JavaScript:哪个最适合 Web 开发?
    Web 开发是一项广泛的工作,需要使用多种编程语言和技术。在本文中,我们将探讨四种广泛使用的编程语言和技术,以确定哪种最适合 Web 开发。 PHP PHP 是一种开源的服务器端脚本语言,专门用于 Web 开发。它是一种非常流行的编程...
    99+
    2023-09-11
    spring unix javascript
  • numpy和django:哪一个更适合Python Web开发?
    Python是一种非常流行的编程语言,它因其易学易用的特性而备受欢迎。Python在Web开发中也很常见,有许多框架可供选择。在本文中,我们将比较两个流行的Python库:NumPy和Django,并探讨它们在Web开发中的应用。 NumP...
    99+
    2023-11-01
    numpy django numy
  • 为什么Java IDE和JavaScript是Web开发中的绝佳组合?
    在现代Web开发中,Java IDE和JavaScript已经成为了一个绝佳的组合。Java IDE是Java Integrated Development Environment的缩写,是一种集成开发环境,用于编写、测试和调试Java应用...
    99+
    2023-06-17
    ide bash javascript
  • 适合web前端开发的Sublime Text包有哪些
    这篇文章主要介绍“适合web前端开发的Sublime Text包有哪些”,在日常操作中,相信很多人在适合web前端开发的Sublime Text包有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2024-04-02
  • Laravel vs. NumPy:哪一个更适合开发 Web 应用?
    Laravel 和 NumPy 都是非常流行的开源框架,它们分别用于 Web 应用开发和科学计算。这两个框架分别在不同的领域具有很强的优势,那么哪一个更适合开发 Web 应用呢?本文将深入探讨 Laravel 和 NumPy 的优缺点,为读...
    99+
    2023-06-14
    numpy laravel bash
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作