什么使erlang具有可伸缩性?

什么使erlang具有可伸缩性?,erlang,Erlang,我正在写一篇文章,描述可伸缩系统使用的技术基础。我以前在一次自学练习中在Erlang上工作过。我阅读了几篇文章,但未能回答以下问题: Erlang的实现中有什么使它具有可伸缩性?是什么使它能够比Java等技术更高效地运行并发进程 函数式编程和并行化之间的关系是什么?使用Erlang的声明性语法,我们是否能够实现运行时效率 过程状态不让它变得沉重吗?如果我们有数千个并发用户,并产生与gen_server或任何其他等效模式相同数量的进程,那么每个进程都将保持一个状态。有这么多的进程,它会不会成为RA

我正在写一篇文章,描述可伸缩系统使用的技术基础。我以前在一次自学练习中在Erlang上工作过。我阅读了几篇文章,但未能回答以下问题:

  • Erlang的实现中有什么使它具有可伸缩性?是什么使它能够比Java等技术更高效地运行并发进程

  • 函数式编程和并行化之间的关系是什么?使用Erlang的声明性语法,我们是否能够实现运行时效率

  • 过程状态不让它变得沉重吗?如果我们有数千个并发用户,并产生与gen_server或任何其他等效模式相同数量的进程,那么每个进程都将保持一个状态。有这么多的进程,它会不会成为RAM上的一个消耗

  • 如果一个进程必须进行DB操作,并且我们生成了该进程的多个实例,那么DB最终将成为一个瓶颈。即使我们使用ApachePHP等传统模型,也会发生这种情况。几乎每个业务应用程序都需要数据库访问。那么我们从使用Erlang中获得了什么呢

  • 进程重启有什么帮助?当某个进程的逻辑或数据出错时,该进程崩溃。OTP允许您重新启动进程。如果逻辑或数据没有改变,为什么进程不会再次崩溃并且总是崩溃

  • 大多数文章都称赞Erlang在Facebook和Whatsapp中的使用。我对Erlang的可伸缩性表示敬意,但也希望从技术上证明其可伸缩性

    即使我在现有链接上找到这些问题的答案,这也会有所帮助

    问候,

    雅什

    很快:

    • 这是不可变的。没有变量,只有术语、元组和原子。程序执行可以在任何地方被断点分割。完全事务模型
    • 进程甚至比.NET线程更轻量级,并且是独立的
    • 它是为通讯而设计的。数以百万计的连接?完全异步?最大线程安全性?大型跨平台环境,只为一个目的而构建-规模和通信?这都是爱立信的语言——这一领域的首创
    你可以选择像F#、Scala/Akka、Haskell这样的模仿者——他们试图从Erlang复制功能,但只有Erlang诞生于电信,而且只有一个目的——电信

    您可以在erlang.com上找到其他问题的答案,我建议您访问手册。Erlang是为其他目的而构建的,因此它并不是针对每一项任务,如果你问起像php这样糟糕的事情,Erlang将不是你的语言。

    我不是Erlang开发人员(还没有)但从我所读到的一些特性来看,Erlang非常具有可伸缩性,它有自己的轻量级进程,使用消息传递彼此通信。因此,在使用多线程Java应用程序时,不存在共享状态和锁定等情况

    与Java相比的另一个不同之处是,Erlang VM对正在运行的每个小进程进行垃圾收集,这与Java只对每个VM进行垃圾收集相比,根本不需要花费任何时间

    如果您在数据库连接中遇到瓶颈问题,您可以首先使用运行在复制的PostgreSQL群集上的数据库池应用程序,或者如果您仍然存在瓶颈,则使用带有Mnesia、Riak或CouchDB的多复制NoSQL设置


    我认为,当您遇到罕见的错误时,重新启动流程非常有用,这些错误只会随机出现,并且只有在满足特定条件时才会出现。重新启动应用程序时导致应用程序崩溃的错误,最好用断路器修复或处理,以免进一步蔓延。

    以下是进程重新启动帮助的一种方法。不必处理所有可能的错误案例。假设你有一个除数的程序。有人输入一个零来除以。与其检查可能的错误(以及更多),只需编写“快乐案例”代码,让进程在他进入3/0时崩溃。它只是重新启动,他可以找出他做错了什么


    您可以将其扩展到无限多的情况(试图从不存在的文件中读取,因为用户拼写错误等等)。

    进程重新启动之所以有价值,主要原因是不是每次都会发生错误,并且检查它是否工作是冗长的

    错误处理通常是冗长的,因此编写错误处理时夹杂着执行任务的逻辑处理会使代码更难理解。将该逻辑移到任务之外可以让您更清楚地区分“做事”代码和“它破坏了”代码。你只是让有问题的事情失败,然后根据监督方的需要处理它

    由于大多数错误并不意味着整个程序必须停止,只意味着特定的东西不能正常工作,只要重新启动发生故障的部件,就可以在修复问题时,在功能降级的状态下继续运行,而不是停机


    还应注意,故障恢复是有界的。你必须为在一段时间内有多少失败是太多设置限制。如果超过该限制,故障将传播到另一个监管级别。每次重启都包括执行任何必要的流程初始化,这有时足以解决问题。例如,在dev中,我意外地删除了一个与进程关联的数据库文件。崩溃级联到文件第一次创建的级别,在这一点上问题自行纠正,一切都继续进行

    很好的问题,但不适合这个网站。你考虑邮件列表了吗?