SOA: 为什么不使用Erlang/OTP Web服务器作为服务?

9
阅读完面向服务的架构原则网站和相关的维基百科文章之后,我有一个想法:Erlang/OTP平台可以被视为一个SOA平台,并且可以在其上构建SOA应用程序。
唯一的问题是这种系统中每个服务的服务契约非常具体:为了调用Erlang/OTP中的服务,编排层必须通过Erlang消息或对gen_server的调用来进行调用(取决于实现)。
这将不允许在Erlang/OTP平台范围之外进行任何服务调用。
但是,如果我们尝试通过将所有相应的服务功能移动到基于Erlang的Web服务器(如Mochiweb)中来构建每个服务,从而基本上将每个服务的接口从gen_server:call更改为XML,会怎样呢?
这将允许使用基于WSDL的通用服务契约从标准化的“砖块”组合各种应用程序。
此外,采用这种方法将使我们继续使用OTP监督员和其他OTP功能,因为这样的服务仍将是OTP应用程序。
所以问题是: 您认为使用OTP Web服务器(Mochiweb)作为服务,通过采用面向服务的架构方法构建软件应用程序是否是一个好主意?附加的XML处理层能否破坏这种方法的所有优势?

SOA with Erlang/OTP


1
Webmachine(http://wiki.basho.com/Webmachine.html)可能值得您在非OTP特定环境中查看。原则上,OTP没有理由不能提供您所描述的一般性水平的功能。 - sfinnie
我一直在想同样的事情 :-) - Martin Kristiansen
sfinnie,在这种特定情况下,Webmachine和Mochiweb有什么区别? - skanatek
Erlang完全支持流行术语,但其流行术语兼容性与SOA流行术语命名空间的范围不符。这意味着在实际应用中,Erlang服务已经实现了SOA所谓的目标,但没有加入SOA世界所需的社交标准。例如,您说“编排层”好像它是与OTP无关的概念。此外,XML有点令人讨厌。 - zxq9
3个回答

8
这样做的主要原因是限制了SOA协议。Erlang使用IP协议并添加了一些点(监视器)。虽然你可以这样做,但我想知道是否值得。原则上,Erlang已经具备了SOA的所有工具,但没有SOAP和WSDL这些冗余的东西 :)

请您能否提供一个简单的SOAP和WSDL膨胀的例子?(我问这个问题是因为我对这种膨胀一无所知) - skanatek
膨胀在这里的意思是“非常庞大的标准”。完全按照规范实现大型标准是很困难的。 - I GIVE CRAP ANSWERS

6
这是我们使用Erlang的主要应用:Web服务。通常我们使用Yaws Appmods,而这里的一篇文章可以向您展示如何实现它。由于以下原因,Erlang已成为SOA的良好平台:

1.无副作用代码非常容易编写和测试。
2.隔离性:Erlang中的进程以清洁的方式帮助隔离每个服务请求。
3.大多数Erlang库(例如mochiwebmisultinChicago Boss)都是从头开始构建的,以支持使用Erlang编写的SOA系统。

在这些框架之一后面应用自己的OTP应用程序是一个绝佳的主意。Erlang适合SOA的另一个重要原因是冗余性。SOA系统需要启动。如果服务请求失败,它会沿着不同的路径重新尝试(当然,在物理层面上,它由已分布您的OTP应用程序的不同机器处理)。

抓住这个机会,这是个好主意。

3

SOA可以应用于许多实现技术,不仅仅是SOAP Web服务,我发现它总是很有益的。例如,您可以将数据库视图和存储过程建模为服务。您可以将java API建模为服务等。

现在,进入您的实际问题:

那么,问题是:您认为使用OTP Web服务器(Mochiweb)作为服务来使用SOA方法构建软件应用程序是一个好主意吗?

不是。每个人都在远离SOAP并向REST转移;但是,通过使用OTP Web服务器(Mochiweb)作为RESTful服务来使用SOA方法构建软件应用程序可能是个不错的主意。

额外的XML处理层能否破坏这种方法的所有优势?

这取决于您的目标是什么。如果您只是添加XML层,因为您认为这是“正确的事情™”,那么您将始终遇到XML层的问题,因为它会成为一个寻找要解决的问题的解决方案。如果您的目标是通过为实体创建通用理解表述来解耦服务器实现技术和客户端实现,则额外的XML(或JSON或最合适的其他内容)处理层是值得的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接