编写分布式应用会如此复杂,其中的一些原因是显而易见的。比如说,当我们的应用启动后,所有不同的进程需要找到应用程序的配置信息。随着时间的变化,配置信息也会发生变化。我们可以关闭所有的检测,重新分发配置文件并且重启,但是在配置过程可能会应用程序宕机的时间延长。

    与配置相关的问题可以归结于组成员关系的问题。当负载发生变化时,我们希望能够添加或者移除新的机器和进程。

    这个问题可以描述成功能性的问题,你可以为你的分布式应用设计解决方案;你也可以在不是前测试你的解决方案从而能够确定你正确的解决这个问题。当你在开发分布式应用时,你会遇到的真正的困难之处在于处理故障,特别是奔溃和通信故障。这些故障随时都可能发生,所以不太可能枚举所有需要处理的不同情况。

    运行在单机上的应用和分布式应用的一个很大区别在于故障:分布式应用中,可能部分机器会发生故障。当一台机器奔溃时,运行在这台机器上的所有进程都会失败。