ruby - 语言和可伸缩性之间的关系

标签 ruby scala erlang scalability

我在 Trapexit(一个 Erlang 社区网站)中看到了以下声明:

Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability.

我还记得在某处读到 Twitter 从 Ruby 切换到 Scala 以解决可伸缩性问题。

因此,我想知道编程语言和可伸缩性之间的关系是什么?

我认为可伸缩性仅取决于系统设计、异常处理等。是因为语言的实现方式、库还是其他一些原因?

望赐教。谢谢。

最佳答案

Erlang 针对电信环境进行了高度优化,正常运行时间为 5 9 秒左右。

它包含一组称为 OTP 的库,可以在不关闭应用程序的情况下“即时”将代码重新加载到应用程序中!另外,还有supervisor模块等框架,所以当出现故障时,它会自动重启,否则故障会逐渐沿着链条向上移动,直到到达可以处理它的supervisor模块。

当然,这在其他语言中也是可能的。在 C++ 中,您可以即时重新加载 dll,加载插件。在 Python 中,您可以重新加载模块。在 C# 中,您可以动态加载代码、使用反射等。

只是该功能内置于 Erlang 中,这意味着:

  • 它更标准,任何 erlang 开发人员都知道它是如何工作的
  • 减少自己重新实现的东西

也就是说,语言之间存在一些根本差异,有些是解释性的,有些是字节码运行的,有些是 native 编译的,因此运行时的性能和类型信息的可用性等都不同。

Python 在其运行时库周围有一个全局解释器锁,因此无法使用 SMP。

Erlang 最近才添加更改以利用 SMP。

总的来说,我同意你的看法,因为我认为重要的区别在于内置库,而不是语言本身之间的根本区别。

最终我觉得任何变得非常大的项目都有陷入“停滞不前”的风险,无论它是用什么语言编写的。正如你所说,我觉得架构和设计对于可扩展性来说是非常基础的,选择一种语言而不是另一种语言我不会感觉神奇地提供了令人敬畏的可扩展性......

关于ruby - 语言和可伸缩性之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1831520/

相关文章:

ruby-on-rails - 有没有办法在 Windows 机器上运行 Ruby on Rails 应用程序?

sql - 如何在 postgresql 和 rails 3 中按月分组

json - Play2.2 Scala 中通用案例类与 JSON 之间的自动序列化/反序列化

javascript - 如何在 node.js 中提取一个对象,哪个对象是使用 bert.js 解码的?

ruby-on-rails - 了解 Paperclip 中的 id_partition

ruby-on-rails - ruby instance_variable_get 返回 nil

scala - 在 Scala 中覆盖 val

scala - 修剪案例类的字符串字段的值

erlang - 达到 max_restart_intensity 的主管如何才能删除有问题的 child ?

erlang - 以编程方式使用模式匹配