系统运行 grub引导修复
我最近看到乔·阿姆斯特朗(Joe Armstrong)的精彩演讲,题为“永远运行的自我修复和扩展系统” 。 乔·阿姆斯特朗(Joe Armstrong)是埃尔朗(Erlang)的发明者,他的确提到了埃尔朗(Erlang),但是这些原理非常通用,并适用于其他语言和工具。
这次演讲非常值得一看,但是这里有一些简短的笔记,供忙碌的读者或我未来的自己使用。
一般说明
- 如果要永久运行,则必须拥有多个实例 。 如果任何东西都是唯一的,则该服务或计算机一旦关闭,您的系统就会关闭。 这可能是由于计划外中断或常规软件更新引起的。 显而易见,但仍然很难。
- 有两种设计系统的方法 :按比例放大或按比例缩小。 如果您想要一个可容纳1,000个用户的系统,则可以从10个用户的设计开始,然后进行扩展,或者从1,000,000个用户开始,然后进行缩小。 根据您的起点,您将为1,000个用户获得不同的设计。
- 最困难的部分是以一致,持久的方式分发数据 。 甚至不要自己尝试使用已知的算法,库和产品,因为数据是神圣的,请注意它。 Web服务和此类框架? 无论如何,任何人都可以写那些。
- 分布计算要容易得多。 它们可以在任何地方执行,在发生故障后可以恢复或重试等等。关于如何执行这些操作,还有更多建议。
可靠系统的六个规则
- 隔离 –当一个进程崩溃时,它不应崩溃其他进程。 自然会带来更好的容错性,可伸缩性,可靠性,可测试性和可理解性。 这也意味着更容易的代码升级。
- 并发性 -很明显:您需要一台以上的计算机来构成一个不间断的系统,这自动意味着它们将同时运行并被分发。
- 故障检测 –如果无法检测到,则无法修复。 它必须跨机器和进程边界工作,因为整个机器和进程都不会失败。 心脏病发作时不能治愈自己,它必须是外力,这意味着异步通信和消息驱动的模型。有趣的想法: 监督树 。 树上更高层的主管,叶子上的工人。
- 故障识别 –失败时,您还需要知道失败的原因 。
- 实时代码升级 – Obvioius必须具有零停机时间。 一旦启动系统,就不要停止它。
- 稳定的存储 -将内容永久地存储在多个副本中,分布在许多机器和地方等。有了适当的稳定存储,您就不需要备份 。 快照,可以,但不能备份。
其他:快速失败,尽早失败,让它崩溃。 不要吞下错误,除非您真的知道自己在做什么,否则不要继续。 更好的崩溃,让更高级别的进程决定如何处理非法状态。
Erlang中的演员模型
我们习惯于同时运行事物的两个概念:进程和线程。 区别? 进程是隔离的,存在于内存中的不同位置,一个进程无法破坏另一个进程。 线程可以。
Erlang的回答:演员。 它们是隔离的进程,但不是繁重的操作系统进程。 它们都生活在Erlang VM中,依靠它进行调度等。它们非常轻便,您可以在计算机上轻松运行数千个。
结论
这在函数式编程中很自然。 也许这就是使函数式编程在当今如此流行的原因-在这种范例中,编写可靠,容错的可伸缩,可理解的系统变得容易得多。
翻译自: https://www.javacodegeeks.com/2013/09/systems-that-run-forever-self-heal-and-scale.html
系统运行 grub引导修复