什么使erlang具有可伸缩性?
我正在写一篇文章,描述可伸缩系统使用的技术基础。我以前在一次自学练习中在Erlang上工作过。我阅读了几篇文章,但未能回答以下问题:什么使erlang具有可伸缩性?,erlang,Erlang,我正在写一篇文章,描述可伸缩系统使用的技术基础。我以前在一次自学练习中在Erlang上工作过。我阅读了几篇文章,但未能回答以下问题: Erlang的实现中有什么使它具有可伸缩性?是什么使它能够比Java等技术更高效地运行并发进程 函数式编程和并行化之间的关系是什么?使用Erlang的声明性语法,我们是否能够实现运行时效率 过程状态不让它变得沉重吗?如果我们有数千个并发用户,并产生与gen_server或任何其他等效模式相同数量的进程,那么每个进程都将保持一个状态。有这么多的进程,它会不会成为RA
- 这是不可变的。没有变量,只有术语、元组和原子。程序执行可以在任何地方被断点分割。完全事务模型
- 进程甚至比.NET线程更轻量级,并且是独立的
- 它是为通讯而设计的。数以百万计的连接?完全异步?最大线程安全性?大型跨平台环境,只为一个目的而构建-规模和通信?这都是爱立信的语言——这一领域的首创
我认为,当您遇到罕见的错误时,重新启动流程非常有用,这些错误只会随机出现,并且只有在满足特定条件时才会出现。重新启动应用程序时导致应用程序崩溃的错误,最好用断路器修复或处理,以免进一步蔓延。以下是进程重新启动帮助的一种方法。不必处理所有可能的错误案例。假设你有一个除数的程序。有人输入一个零来除以。与其检查可能的错误(以及更多),只需编写“快乐案例”代码,让进程在他进入3/0时崩溃。它只是重新启动,他可以找出他做错了什么
您可以将其扩展到无限多的情况(试图从不存在的文件中读取,因为用户拼写错误等等)。进程重新启动之所以有价值,主要原因是不是每次都会发生错误,并且检查它是否工作是冗长的 错误处理通常是冗长的,因此编写错误处理时夹杂着执行任务的逻辑处理会使代码更难理解。将该逻辑移到任务之外可以让您更清楚地区分“做事”代码和“它破坏了”代码。你只是让有问题的事情失败,然后根据监督方的需要处理它 由于大多数错误并不意味着整个程序必须停止,只意味着特定的东西不能正常工作,只要重新启动发生故障的部件,就可以在修复问题时,在功能降级的状态下继续运行,而不是停机
还应注意,故障恢复是有界的。你必须为在一段时间内有多少失败是太多设置限制。如果超过该限制,故障将传播到另一个监管级别。每次重启都包括执行任何必要的流程初始化,这有时足以解决问题。例如,在dev中,我意外地删除了一个与进程关联的数据库文件。崩溃级联到文件第一次创建的级别,在这一点上问题自行纠正,一切都继续进行 很好的问题,但不适合这个网站。你考虑邮件列表了吗?