无服务器到单体应用 – 无服务器爱好者应该担心吗?

亚马逊的Prime Video Tech博客最近发布了一篇文章,引起了一些互联网的关注。本文探讨了一个团队,该团队能够通过从无服务器迁移到“单体应用式”架构,将其基础架构成本降低多达 90%。

并非每天都会听到从无服务器迁移到单体应用式架构的消息。所以理所当然地,这篇文章已经得到了不少第二眼。不过,有些观点充其量是可疑的,声称“看,即使是亚马逊也说无服务器很糟糕!

那是。。。。不是他们所说的一切,也不应该成为你的主要收获。因此,让我们深入研究这篇文章,了解为什么它会大惊小怪。

在这篇文章中,我们将研究:

  1. 团队试图解决的问题以及最初的基于无服务器的方法
  2. 采用“单体应用式”架构的第二次迭代。
  3. 为什么在这种情况下从无服务器到“单体应用式”是正确的举动

Zig的 “Colorblind” Async/Await是什么?

Zig 是一种新的通用编程语言,它正在从头开始重新思考语言和相关工具的工作方式。我已经讨论了编译时代码执行,现在我将介绍该语言的另一个创新概念:async/await。

但是等一下,async/await 不是也存在于其他语言中吗?

嗯,是的,但是Zig中的async/await与编译时执行相结合,允许函数隐式变为异步,并且整个库在阻塞和事件 I/O 模式下透明地工作,这是Zig独有的。

让我们看看这意味着什么

Deno KV 完整指南

Deno KV是一个基于键值的数据库,从Deno 1.32.0开始作为不稳定的API内置到Deno运行时中。Deno Deploy 现在整合了 Deno KV(目前作为仅限邀请的测试版),并在全球范围内分发 KV 数据。这意味着,当 Web 应用程序置于 Deploy 上时,现在每个服务器实例附近都有一个数据库。Deno KV还提供ACID事务来维护数据一致性。

本文将通过简单易懂的示例涵盖Deno KV的所有方面。由于有关Deno KV的信息在Deno文档中的多个位置,因此请将这篇文章视为KV的一站式指南。

请注意,已经创建了十几个工作代码示例来支持此博客文章。它们可以在此存储库文件夹中找到。您还将在本文的相关部分找到链接的每个示例。

🤖 使用 Next Js、GPT 4 和 Vercel AI SDK 构建 AI 聊天机器人的超级简单方法

随着自然语言处理(NLP)模型的改进和变得更容易访问,人工智能聊天机器人正变得越来越流行和强大。但是,从头开始构建聊天机器人可能具有挑战性且耗时,尤其是在您想要创建支持流式文本响应的丰富交互式用户界面时。

幸运的是,有一个新工具可以帮助您在几分钟内创建AI聊天机器人:Vercel AI SDK。Vercel AI SDK是一个开源库,可帮助您在JavaScript和TypeScript中构建对话,流式处理和聊天用户界面。它支持 React/Next.js、Svelte/SvelteKit,即将支持 Nuxt/Vue。

Vercel AI SDK还集成了流行的开源和云LLM(大型语言模型),如OpenAI,Hugging Face和LangChain。这意味着您可以利用 GPT-4 等最先进的 NLP 模型的强大功能为您的用户生成逼真且引人入胜的聊天响应。

在这里,我们将学习如何使用 Next Js、GPT 4 和 Vercel AI SDK 创建一个简单的 AI 聊天机器人。

Next Level AI 开发:深入了解 Vercel AI SDK

各位AI粉丝大家好!今天,我想与您分享人工智能驱动的Web开发领域的一个令人兴奋的发展。我一直在探索Vercel AI SDK,这是一个开源库,在技术界掀起了波澜。这个强大的工具集允许开发人员轻松构建边缘就绪的 AI 驱动的流媒体文本和聊天 Web 应用程序,我很高兴与您分享我的发现。

Deno KV

我对Deno KV很感兴趣,它将自己描述为“全球应用程序的全局数据库”。它是Deno应用程序的K/V存储,它捆绑了某种全球分布式/复制数据库服务。

代码示例如下所示:

const kv = await Deno.openKv();

等等,这看起来像是核心语言功能?他们是否将自己的专有托管云数据库作为其核心语言的一部分提供客户端?

它们不是 - 至少不是在Deno的开源实现中。我挖了进去,我想我明白他们在做什么。

Java vs Rust: Hello World HTTP 服务器性能测试

在本文中,我将比较Java的本机HTTP服务器和Rust的Hyper HTTP服务器。根据我的研究,我发现 Hyper 是 Rust 方面最受欢迎的服务器选择。如果有更好和流行的替代品,请告诉我。

Rust 是一种生成机器代码的编译语言,而 Java 也是一种生成在 JVM 内部运行的字节代码的编译语言。这种比较可能不太公平。无论如何,让我们运行测试并检查结果。

Go vs Rust: Hello World HTTP 服务器性能测试

在本文中,我将比较 Go 的原生 HTTP 服务器和 Rust 的 Hyper HTTP 服务器。根据我的研究,我发现 Hyper 是 Rust 方面最受欢迎的服务器选择。如果有更好和流行的替代品,请告诉我。

比较是公平的,因为两者都是生成机器代码的编译语言。让我们运行测试并检查结果。

Deno vs Rust: Hello World HTTP 服务器性能测试

在本文中,我将比较 Deno 的原生 HTTP 服务器和 Rust 的 Hyper HTTP 服务器。根据我的研究,我发现 Hyper 是 Rust 方面最受欢迎的服务器选择。如果有更好和流行的替代品,请告诉我。

这种比较很有趣,因为 Deno 本身是用 Rust 编写的。这种比较可能没有多大意义,因为 Rust 应该很容易胜过 Deno。主要区别在于Deno使用不同的HTTP服务器,称为flash。让我们运行测试并检查结果。

Bun vs Rust: Hello World HTTP 服务器性能测试

在本文中,我将比较 Bun 的原生 HTTP 服务器和 Rust 的 Hyper HTTP 服务器。根据我的研究,我发现 Hyper 是 Rust 方面最受欢迎的服务器选择。如果有更好和流行的替代品,请告诉我。

这种比较可能没有多大意义,因为 Rust 应该很容易胜过像 Bun 这样的解释运行时。让我们运行测试并检查结果。

在 Rust 中使用 C 库

今天,我想深入探讨我们在尝试用 Rust 重写 IoT Python 代码时遇到的一个困难:特别是 FFI,或“外部函数接口”——允许 Rust 与其他语言交互的位。一年前,当我尝试编写 Rust 代码以与 C 库集成时,现有的文档和指南经常给出相互矛盾的建议,我不得不自己磕磕绊绊地完成这个过程。本指南旨在帮助未来的 Rustaceans 完成将 C 库移植到 Rust 的过程,并使读者熟悉我们在执行相同操作时遇到的最常见问题。

在本指南中,我们将讨论如何使用 bindgen 将 C 库函数公开给 Rust。我们还将讨论此自动工具集的局限性,以及如何检查您的工作。公平警告:正确实施 FFI 是 Rust 困难模式。如果你是 Rust 的新手,请不要从这里开始。通读这本书,写一些练习代码,然后在你完全熟悉借阅检查器后再回来。

Rust FFI 和 bindgen:在 Rust 中集成 C 代码

我越听说在不同的渠道采用嵌入式 Rust,似乎有一个反复出现的主题。主题是似乎有些人认为 Rust 的采用将逐渐发生。这意味着许多项目完全从头开始采用 Rust 的可能性可能较小。相反,一些项目会将新的 Rust 代码集成到现有的 C 或 C++ 代码库中,或者将现有的 C 或 C++ 库集成到 Rust 项目中。因此,对于有兴趣进入嵌入式的人来说,获得做这些事情的能力将是有益的。

;Echo Shell 注入

这是一篇关于 shell 注入的介绍性文章,shell 注入是一个安全漏洞,允许攻击者在用户的计算机上执行任意代码。这是一个经过充分研究的问题,并且有简单有效的解决方案。以这样一种方式设计库 API 相对容易,以保护应用程序开发人员免受 shell 注入的风险。

我写这篇文章有两个原因。首先,今年我在三个不同的库中指出了这个问题。看来,尽管这个问题得到了很好的研究,但它并不为人所知,所以只是重复一些事情可能会有所帮助。其次,我最近报告了一个关于VS Code API的相关问题,我想将这篇文章用作GitHub的扩展评论:-)

<3 Deno

Deno是一个相对较新的JavaScript运行时。我发现非常有趣和美观,符合最近支配软件进化的“越差即好”规律的趋势。这篇文章解释了原因。

构建大型 Rust 项目: pacakges, crates 和 modules

好的判断力是经验的结果,经验是错误判断的结果。

Mark Twain.

IC 公司的 Rust 代码库从 2019 年 6 月的空存储库增长到 2022 年初的近 350,000 行代码。这种快速增长告诉我,对于相对较小的项目来说,运作良好的决策可能会随着时间的推移开始拖累项目。本文评估了 Rust 代码组织选项,并提出了有效使用它们的方法。

使用 Go Module Proxy

我们严重依赖大型Go monorepo 进行后端开发,它提供了代码可重用性和可发现性等优势。然而,随着我们的不断发展,管理大型 monorepo 带来了一系列独特的挑战。

例如,使用 Go 命令(如 go get 和) go list 在获取驻留在大型多模块存储库中的 Go 模块时可能会非常慢。这种缓慢状态会影响开发人员的工作效率,给我们的持续集成 (CI) 系统带来负担,并使我们的版本控制系统主机 (VCS) GitLab 不堪重负。

在这篇博文中,我们将了解 Go模块代理 Athens 如何帮助改善我们使用大型 Go monorepo 工程师的开发人员体验。

For 可以做更多的事情

Elixir 有一个 for 的特殊形式,称为“列表推导式 (list comprehension)”,大多数人对它的全部能力并不完全理解。它可以做的不仅仅是一个简单的 for 循环,实际上它有点像 Enum 和 Stream 模块聚在一起并且有一个宏。我想让你知道这件事!

使用 GitHub Actions 部署跨平台 Rust 二进制文件

如果您准备发布你的第一个版本 Rust 项目,您可能希望将一些包含预构建二进制文件(适用于 macOS、Linux 和 Windows)的资产上传到您的 GitHub 发布页面。这是使您的项目广泛可用的最早步骤之一,并且在设置其他安装方法(如Homebrew)时将有很大帮助。但是,弄清楚交叉编译并不容易,尤其是在通过 GitHub Actions 进行交叉编译时。