从你说“实施的问题......”的地方,你有一个重言式。
无论您是使用消息传递还是共享状态来实现您的算法,您的代码都必须处理故障以保持稳健。无论如何,您不必费心处理错误,但是根据定义,您的代码并不健壮。如果你说“Erlang 必须做某事才能变得健壮”,然后说“但我可以更新数据库中的一行并且它总是可以工作”,那么你并不是在比较苹果和苹果。在任何情况下,关于数据库(或共享状态)总是在第一次尝试时工作的陈述显然是错误的。
因此,要使用消息传递来实现,您需要一个 API 将消息传递结构包装到足够高的级别,以便适合您的应用程序程序员使用,但仍然由他们来检查和处理故障。
归结为这一点(这就是为什么我说它是重言式):
a) 如果使用消息传递,您的代码必须实现“消息传递成功或出现错误(超时)”。
b) 如果使用数据库,那么您的代码必须实现“行已成功更新,否则会出错”。(这同样适用于任何共享状态解决方案)。
由于 a 和 b 是等价的,因此您谈论的“问题”同样适用于消息传递和您的数据库方法,因此没有太多要讨论的内容。
现在关于哪个更容易(甚至更合适)没有简单的答案。明智的答案是“使用更适合您的问题领域的任何方法”。在谈论 Erlang 时,您还应该考虑您正在使用哪些库/工具,例如 OTP,因为它们会对您如何实现这些东西产生巨大影响。