Erlang 如何容错,或者在这方面有什么帮助?
4 回答
我想我在对另一个线程的回复中涵盖了部分答案。
Erlang 是容错的,考虑到以下几点:
Erlang 知道错误会发生,并且事情会中断,因此 Erlang 不是防范错误,而是让您拥有强大的工具来最大程度地减少错误的影响并在错误发生时从错误中恢复。
Erlang 鼓励您为成功案例进行编程,如果出现任何问题,则在不尝试恢复部分损坏的数据的情况下崩溃。这背后的想法是,部分不正确的数据可能会在您的系统中进一步传播并可能被写入数据库,从而给您的系统带来风险。最好尽早摆脱它,只保留完全正确的数据。
Erlang 中的进程隔离有助于在部分错误数据出现并导致进程崩溃时将其影响降至最低。系统会清理崩溃的代码及其内存,但会继续作为一个整体工作。
监督和重新启动策略通过重新启动系统的重要部分并使它们重新投入使用,有助于在系统部分崩溃时保持系统的完整功能。如果出现非常严重的问题,导致重启次数过多,则系统会被视为无法修复,因此将被关闭。
警告:我是 Erlang 菜鸟。
@Daniel 的回答基本上是正确的。我强烈建议您花时间阅读 Erlang 创建者 Joe Armstrong 的论文(在存在软件错误的情况下构建可靠的分布式系统)。该论文很好地解释了开发健壮的分布式系统的必要性和解决方案。我相信这篇论文会满意地回答你的问题。
Erlang 可以轻松创建许多小型进程并监控这些进程。当其中一个进程崩溃时,可以重新启动系统的该部分,而无需将整个系统关闭。
您可能在现代版本的 Windows 中看到过这样的情况:系统崩溃时可以重新启动图形驱动程序;它不会杀死整个系统。
为了更容易编写容错应用程序,Erlang 提供了主管进程的概念。这些进程监视许多子进程,并且知道如果子进程死亡如何响应。您可以创建一个完整的监督树,以便您可以很好地控制应用程序不同部分的行为方式。您可以在 Erlang 文档中阅读更多内容。