跳至内容
GitHub 仓库 论坛 RSS 新闻聚合

使用 Crystal 自动化智能建筑

PlaceOS 如何创建和管理和谐的环境

Stephen von Takach Dukai Martin Pettinati

PlaceOS 提供了一个平台,允许物理和数字世界之间无缝集成。然后他们自动执行所有操作,以在传统上保守的设施管理领域创建最先进的协调生态系统。

我们与 Place 的 **工程主管** **Stephen Von Takach Dukai** 坐在一起,讨论了他们在使用 Crystal 的经验。

您目前使用 Crystal 进行哪些项目?它们都已投入生产吗?它们是面向客户的还是内部工具?

我们实际上是一个 Crystal-lang 大本营,负责所有后端工作。我们所做的工作大部分都在生产中运行,包括面向客户的和内部工具。我们构建的所有服务都是 Crystal,除了剩余的一个 Ruby 服务。

我们也是开源的坚定支持者,因此您可以在以下位置找到我们的工作:

  • spider-gazelle - 我们认为可与社区共享且可重复使用的代码库

  • PlaceOS - 我们的核心平台,主要用于合作伙伴组织

  • place-labs - 主要用于支持 PlaceOS 的代码库

此外,我们的一些 SaSS/云平台软件(包括平台管理和计费软件)是闭源的,但它们也是用 Crystal-lang 编写的。

您是如何了解这种语言的?在选择它作为您的技术栈时,您经历了哪些过程?您评估了哪些替代方案?您还在使用哪些其他语言?

我认为我们是在 Sidekiq 的创建者 Mike Perham 发布了 Crystal-lang 客户端时第一次注意到 Crystal 的。

我们一直在使用 Ruby 构建我们的平台,并且遇到了可扩展性的限制。最初,我们选择 Ruby 是因为它是一种非常富有表现力的语言,而且我们有一些使用 Rails 的经验。然而,最终我们不得不基于 Libuv 构建自己的 IO 反应器,以获得所需的性能。Ruby 在 1996 年发布,这意味着它的设计早于 epoll 等用于高性能 IO 的技术,epoll 在 2002 年首次亮相。

实际上,唯一接近满足我们需求的另一种语言是 Go-lang,但由于我们来自 Ruby,我们觉得 Crystal 会让我们的开发人员更容易过渡。事实上,我认为我们不可能用 Go-lang 成功。Crystal 的宏和泛型等特性从一开始就对我们的成功至关重要。

我们使用的另一种语言是 TypeScript,因为我们的前端是用 Angular 框架构建的。

使用 Crystal 开发有哪些优势?有哪些问题?

来自 Ruby 的我个人发现 Crystal 令人耳目一新。我最初从 C++ 和 C# 转到 Ruby,因为它是我每天使用的语言,当时也有类似的感觉。

使用 Ruby on Rails 的生产力感觉高得多,我可以快速移动,更有创造力。然而,最近,尤其是在解决方案越来越大、越来越复杂的情况下,Ruby 感觉像是一个阿基里斯之踵:难以重现的随机错误,以及在意外代码路径中出现的意外对象,真正吞噬了开发人员的时间。

Crystal 解决了我对 Ruby 的大部分错误。类型和编译器的智能功能是显而易见的首要问题,在接触了 Crystal 之后,我们确实编写了更好的 Ruby 代码。但我们还发现 Crystal 工具很棒,格式化程序、像 Ameba 这样的 linter、测试工具、利用 LLVM、最小的 Docker 容器和社区,所有这些都帮助我们做出选择。

最大的问题可能是当时缺少成熟的代码库,但这只是意味着我们可以塑造缺失的部分来满足我们的需求,而且移植 Ruby Gem 通常不是什么大问题。坦白地说,由于 Crystal 编译器,我们发现每个移植的 gem 中都有多少 bug,这真是太棒了。

您认为使用这种语言对您自己的运营有什么好处?对您的最终客户来说有什么好处?

对我们来说,好处是 Ruby 的开发人员生产力,同时对我们发布的内容更有信心,并且对性能的关注减少。这转化为为客户提供更高质量的应用程序,以及为我们提供更干净的代码库。

一个例子是我们构建的 Web 框架 Spider-Gazelle。最初它被构建为 Rails 的克隆,现在它利用 Crystal 的神奇功能生成 OpenAPI 文档,使其比 Rails 更实用、更快。

API 文档对开发人员来说非常耗时,因此这提高了我们的开发人员生产力,文档更准确(在许多情况下,现在已经存在),与 Ruby 相比,我们的计算支出更低。

您认为 Crystal 最擅长解决哪些问题?

一个很棒的用例是可移植的 Linux 可执行文件。我们开发了一种可以在边缘部署的服务(通常是客户建筑中的网络交换机),并且此边缘处理器会下载静态链接的驱动程序,它们是使用 musl libc 构建的 Crystal 可执行文件。

对我们来说,Crystal 是一个完美的 Web 服务平台,它可以完成您可能使用 Ruby、Python 或 Go-lang 完成的大多数事情。我们正在使用它来开发各种形状和大小的微服务,同时支持 Docker 和 k8s 部署的 x86_64 和 ARM64 支持。

随着越来越多的开发人员开始使用这种语言,以及代码库的构建,我可以想象 Crystal 会超越 Ruby 和 Python,成为首选语言。它将 Go-lang 和 Ruby 的优势融为一体,这是一个相当强大的乘数。

Photo of Stephen von Takach Dukai

Stephen von Takach Dukai,Place 工程主管