我们正在开始一个新项目,并在公司的Openstack云实例化上实施(请参阅http://www.openstack.org/)。该项目是我们公司的安全工具。我们目前运行着数百个专用于安全工具的专用服务器,并将它们移至我们公司的openstack实例化。
我公司中的其他项目目前在多个分布式服务器应用程序中使用erlang,而其他Q / A指出,erlang用于几种流行的云服务中。我试图说服其他人考虑将其应用于我们的项目。
erlang在云编程方面的优势是什么?在哪里使用erlang特别合适?
我们正在开始一个新项目,并在公司的Openstack云实例化上实施(请参阅http://www.openstack.org/)。该项目是我们公司的安全工具。我们目前运行着数百个专用于安全工具的专用服务器,并将它们移至我们公司的openstack实例化。
我公司中的其他项目目前在多个分布式服务器应用程序中使用erlang,而其他Q / A指出,erlang用于几种流行的云服务中。我试图说服其他人考虑将其应用于我们的项目。
erlang在云编程方面的优势是什么?在哪里使用erlang特别合适?
Answers:
除了事实是,Erlang是专门为在并发/并行/分布式情况下运行而开发的,它采用的两种主要技术是:
没有副作用:
这意味着,当您给函数提供要执行的数据时,除非在非常严格的情况下,否则它不会影响系统/运行过程中的任何其他内容。这意味着,如果您一次同时执行一个函数300次,那么该函数的这300次执行将不会影响其他任何一次。
确保无副作用的实现技术称为“不变性”,它大致意味着可能不会发生突变(更改)。这意味着一旦创建变量,该变量的值就不会被修改。Erlang使用“单一分配”实现了此行为,因此,在将值分配给变量后,可能不会再为其分配值。
X = 1.
X = 2. // This is not a valid operation
这样可以确保没有代码可能意外更改X的值而导致竞争状态,因此,它本质上是线程安全的,并且并发使用变得微不足道。这是软件语言中非常罕见的行为,也是Erlang设法很好地适合于并发执行的最大方式。
演员模型:
这是一种特殊的建模方式,对于开发人员而言,这种方式已使并行处理的实现和管理变得非常简单。直接来自维基百科(http://en.wikipedia.org/wiki/Actor_model):
演员模型采用了一切都是演员的理念。这类似于某些面向对象的编程语言所使用的所有对象哲学,但是不同之处在于,通常是按顺序执行面向对象的软件,而Actor模型固有地是并发的。参与者是一个计算实体,它响应收到的消息可以同时进行:向其他参与者发送有限数量的消息;创建数量有限的新演员;指定要用于收到的下一条消息的行为。上述动作没有假定的顺序,可以并行执行。使发送者与发送的通信脱钩是Actor模型的根本改进,它使异步通信和控制结构成为传递消息的模式。
Erlang在并发/并行计算中特别强大。实际上,它最初是为此目的而设计的。它与云没有任何内在联系,只是经常将计算繁重的应用程序并行化并部署在“云”实例中,以使其更容易按需增长/缩减容量。
剩下的只是营销方面的事情。