PHP和ESB(使用Mule)(ESB:企业服务总线)

12

您在PHP项目中何时、何地和为什么使用ESB?

您认为在PHP项目中,何时、何地以及为什么使用ESB会有意义?

ESB(以及像Mule这样的ESB工具)是否提供了PHP和本地LAMP技术所缺乏的任何功能?

编辑

我的问题动机源于我认为您实际上从未真正需要Mule。Mule将促进与外部服务的通信,而您可以在没有Mule的情况下处理这些通信。最终,Mule也会产生成本和开销。所以我的问题是针对有人告诉我真正受益于ESB和像Mule这样的工具的场景,或者通过扎实的知识来支持我的猜测。

编辑2

关于Houcem对他在帖子中的回复,...对ESB/Mule的本地LAMP答案是什么?

编辑3

似乎Tuxedo可能是Mule/ESB的更本地化的PHP替代品。有人使用过这个工具吗?


2
说到底,ESB不就是来自Java世界的概念吗?虽然严格来讲,按定义来说它与编程语言无关。但是,如果你搜索ESB,通常也会发现与Java开发相关的答案。如果你研究一组开发人员的技能,ESB和Java知识之间是有关联的。这是一种微妙的关系,但仍然是一种强大的关系。 - Raffael
4个回答

3

ESB可以以不同的方式使用:

  • 提供异步处理:例如:如果您有一个网站需要发送大量电子邮件,而发送电子邮件需要很长时间可能会阻塞页面的执行。您可以使用ESB将电子邮件数据发送到Mule并将其路由到电子邮件出站通道,这样您就可以实现邮件消息队列。另一种形式的异步处理:使用mule以非阻塞方式执行php脚本(使用命令行)。

  • 与Java应用程序集成:您可以使用php将消息发送到mule,并在java中使用mule API实现一些业务逻辑,php消息将被您的java业务组件接收。这在需要进行大量复杂处理并需要像Java这样灵活和强大的语言的大型网站中使用。

需要知道的是:ESB应该像总线一样使用,这意味着以标准形式(Mule消息)从异构环境收集数据,执行业务逻辑,然后将输出数据(经过路由)输出到不同的环境。

在PHP世界中,没有原生的PHP集成与Mule。要做到这一点,您应该使用Web服务(SOAP)。


虽然PHP可以在PHP和操作系统本身中启动异步处理,但这并不是使用Mule/ESB的原因,对吧?直接使用SOAP与Java组件通信会更简单且同样强大,不是吗? - Raffael
如果是这样的话,为什么还要使用Mule呢?即使在Java Web应用程序中,有时也需要执行后台进程。ESB是一种设计模式,它可以帮助您制作复杂的异步作业,并为您提供内置基础设施(总线本身+连接器)来进行复杂的处理。例如,邮件排队无法轻松地使用Java Web服务进行处理,您需要使用JMS或ESB。否则,您需要从头开始重新实现所有逻辑。 - Houcem Berrayana
为什么要使用Mule呢?这就是我想要弄清楚的问题。我知道使用ESB等技术可以很好地完成工作。但我坚信,应该尽可能保持项目的同质性。因为到最后,使用比必要更多的非平凡技术将会适得其反,并成为进一步麻烦的潜在源泉。 - Raffael
好问题:Mule用于通过过滤器、路由器、转换器处理总线中的数据。来自不同输入(Web服务、JMS、数据库、POP和其他入站通道)的所有数据都通过转换器转换为相同的数据类型(MuleMessage),通过总线的不同节点并最终使用您的业务逻辑路由到出站通道。ESB中的诀窍是从不同来源收集数据并对它们应用相同的执行过程。这就是为什么它被称为总线的原因。 - Houcem Berrayana

3
ESB(企业服务总线)是用于整合企业中多种异构应用程序的骨干,这些应用程序可能来自不同的供应商、技术甚至是冗余的。

它似乎更与Java世界相关,而不是PHP或任何其他语言,因为通常大型公司的信息系统由以下组成:

  • 混合使用开源开发和软件编辑工具(包括ERP)。通常使用Java EE进行开发,以依赖Java EE堆栈(及其供应商IBM、Oracle等)
  • 完全使用Microsoft(无需ESB,Microsoft提供EAI / ESB类工具)

PHP主要用于Web应用程序(即使对于大公司也是如此,但面向Web)。

ESB是一个很大的成本,只有在互连应用程序数量增加时才有用/必要。当您只有少量连接(在Java、PHP或其他语言之间),可以在网络级别上处理它,使用DNS,在应用程序级别上使用配置密钥并执行协议交换和每个点对点连接的小业务集成。

PHP应用程序的一个潜在用例是旅行社的网站查询多个航班/火车/酒店公司。即使在这种情况下,开发完整的跨查询系统也不会很疯狂,因为这是该站点/公司的核心业务。


“使用DNS处理Java / PHP连接”是什么意思?域名系统与此有何关系? - Raffael
我的意思是,无论使用何种语言编写的相互连接的系统,都可以使用域名而非IP进行“引用”,并且DNS可以是配置连接到适当主机的可能解决方案之一。通过DNS,"service-A"主机匹配可以更改为在不同IP上托管的另一个实现,前提是技术和业务接口都相同。然而,这不是我建议的模式,除非是对于小型系统/公司,在那里DNS管理员几乎处理所有内容,或在互连主机名硬编码的系统中。 - snowflake

3
ESB是解决可扩展性问题的通用解决方案;解决管理大量应用程序接口的开销、成本和复杂性问题。我写了一篇简短的关于ESB / EAI解决方案的理由文章,网址为http://psicom.com.au/solutions/eai
诚然,大多数PHP站点都是小规模的,通常很难证明使用ESB的行政和技术开销是有必要的。但是,现在可以使用OSS PHP产品来满足企业所有应用程序需求,并且组织也面临着越来越多的成本压力,因此我预计将会出现越来越多的PHP商店开始感受到我所写的不断增长的痛苦。这可能会使他们重新评估其应用程序集成问题,而ESB是该问题的良好解决方案。
据我所知,目前没有以PHP开发的ESB产品,我也不希望在不久的将来看到这种情况。但是值得一提的是,许多ESB产品提供PHP和其他OSS平台的绑定,因此ESB运行的平台并不重要。

2
我建议使用Windows Azure Service Bus,它提供了一个PHP SDK,链接如下: https://github.com/WindowsAzure/azure-sdk-for-php Service Bus很棒,但维护一个不是。Windows Azure Service Bus为您解决了所有维护开销,并且与PHP兼容。您甚至可以轻松地与用Java、C#、VS C++编写的应用程序进行通信。

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