永远运行的自我修复和扩展系统

我最近看到乔·阿姆斯特朗(Joe Armstrong)的精彩演讲,题为“永远运行的自我修复和扩展系统” 。 乔·阿姆斯特朗(Joe Armstrong)是埃尔朗(Erlang)的发明者,他的确提到了埃尔朗(Erlang),但是这些原理非常通用,可以与其他语言和工具一起使用。

这次演讲非常值得一看,但是这里有一些简短的注释,供忙碌的读者或我未来的自我使用。

一般说明

  • 如果要永远运行,则必须拥有多个实例 。 如果任何东西都是唯一的,则该服务或计算机一旦关闭,您的系统就会关闭。 这可能是由于计划外中断或常规软件更新引起的。 显而易见,但仍然很难。
  • 有两种设计系统的方法 :按比例放大或按比例缩小。 如果您想要一个可容纳1,000个用户的系统,则可以从10个用户的设计开始,然后进行扩展,或者从1,000,000个用户开始,然后进行缩小。 根据您的起点,您将为1,000个用户获得不同的设计。
  • 最困难的部分是以一致,持久的方式分发数据 。 甚至不要自己尝试使用已知的算法,库和产品,因为数据是神圣的,请注意它。 Web服务和此类框架? 无论如何,任何人都可以写那些。
  • 分布计算要容易得多。 它们可以在任何地方执行,在发生故障后可以恢复或重试等。还有一些关于如何执行操作的建议。

可靠系统的六个规则

  1. 隔离 –当一个进程崩溃时,它不应崩溃其他进程。 自然会带来更好的容错性,可伸缩性,可靠性,可测试性和可理解性。 这也意味着更容易的代码升级。
  2. 并发性 -很明显:您需要一台以上的计算机来构成一个不间断的系统,这自动意味着它们将同时运行并被分发。
  3. 故障检测 –如果无法检测到,则无法修复。 它必须跨机器和进程边界工作,因为整个机器和进程都不会失败。 心脏病发作时不能治愈自己,它必须是外力,这意味着异步通信和消息驱动的模型。有趣的想法: 监督树 。 树上更高层的主管,叶子上的工人。
  4. 故障识别 –失败时,您还需要知道失败的原因
  5. 实时代码升级 – Obvioius必须具有零停机时间。 一旦启动系统,就不要停止它。
  6. 稳定的存储 -将内容永久地存储在多个副本中,分布在许多机器和地方等。有了适当的稳定存储,您就不需要备份 。 快照,可以,但不能备份。

其他:快速失败,尽早失败,让它崩溃。 不要吞下错误,除非您真的知道自己在做什么,否则不要继续。 更好的崩溃,让更高级别的进程决定如何处理非法状态。

Erlang中的演员模型

我们习惯于同时运行事物的两个概念:进程和线程。 区别? 进程是孤立的,存在于内存中的不同位置,一个进程无法破坏另一个进程。 线程可以。

Erlang的回答:演员。 它们是隔离的进程,但不是繁重的操作系统进程。 它们都生活在Erlang VM中,依靠它进行调度等。它们非常轻便,您可以在计算机上轻松运行数千个。

结论

这在函数式编程中很自然。 也许这就是使函数式编程在当今如此流行的原因-在这种范例中,编写可靠,容错的可伸缩,可理解的系统要容易得多。

参考:我们的JCG合作伙伴 Konrad Garus在Squirrel的博客上提供了永远自我修复和扩展的系统

翻译自: https://www.javacodegeeks.com/2013/09/systems-that-run-forever-self-heal-and-scale.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值