第一个问题:可扩展性
在分布式系统的环境中,究竟可以称之为 可扩展性?我猜测这是系统能够被所需数量的分布式设备使用而无需更改代码。这个概念我是否正确?
还有哪些技术可以在我的分布式应用程序上实现,以确保我具有这种可伸缩性?
第二个问题:相互排斥
有人告诉我,当我们想要确保在单个机器或分布式系统上执行的进程之间互相排斥时,存在差异,但是我不知道如何解释并说明有什么区别?< / p>
答案 0 :(得分:0)
第一个问题:可扩展性:
在分布式系统的上下文中,什么可以确切地称为可伸缩性?我猜想这是系统能够被任意数量的分布式设备使用而无需更改代码的能力。我的想法正确吗?
几乎,但是我会定义一些不同。如果您可以通过添加更多资源来提高其性能和功能,则该系统是可伸缩的。这意味着,如果系统具有可伸缩性,并且突然之间您的计算需求增加,那么您可以通过添加更多资源(通常是更多计算机)来扩展并满足这些需求。注意,可伸缩性和高性能是两件截然不同的事情。系统可以很好地执行(非常快速地处理其当前负载),而无需扩展。
可伸缩系统最典型的情况是将计算负载分配给可用计算机的系统,因此,当添加更多计算机时,您也可以按比例处理负载,这通常称为作为“线性可伸缩性”,这通常是最可取的可伸缩性类型,但是通常很难实现,因为当您添加更多资源(例如机器)时,您通常必须为机器之间的通信付出开销的代价,这意味着缩放变为次线性。如果您对这方面的更多细节感兴趣,建议您阅读阿姆达尔定律(paper1,paper2)。
第二个问题:互斥
有人告诉我,当我们要确保在单台计算机或分布式系统上执行的进程之间相互排斥时,存在差异,但是我不知道如何,有人可以解释并说出差异吗?
我要说,最终目标和分布式互斥与单机互斥的问题本身是相同的,但是实现这一目标的方法却大不相同。定义分布式系统的主要因素之一是,您的进程之间没有共享内存(因为它们可能驻留在不同的机器上),而在单机系统中却有共享内存(尽管您可以通过实现分布式共享内存抽象)。在单机互斥设置中,您通常使用共享内存和互斥锁来实现它,而在分布式设置中,您必须使用消息传递并处理诸如延迟,部分故障,故障检测等问题,这使事情变得很多更加努力。