web-services - SOA/ESB 困境

标签 web-services soa n-tier-architecture esb

很抱歉这个问题非常复杂,但这是我已经研究了一段时间的东西,这真的让我很沮丧。我觉得在当今时代,我们有一百万零一种方法来实现跨平台 (SOAP) 且易于构建的服务(感谢 .NET、java 和其他框架)。然而,这些技术已经在社区出现了 5-10 年,但我们(或者至少我)不断受到同样问题的困扰:

  1. 识别(跟踪服务)- UDDI;例如,本月必须 3 次提醒同事某个服务的位置,尽管事实上有一个 wiki 讨论该服务,并且在我们保存服务文档的存储库中存在同一文档的 PDF 版本.
  2. 可扩展性 - 开箱即用的集群;作为组织,我们花费大量金钱向管理员付费,只是为了观察我们服务的利用率并做出决策,例如该服务是否需要更多 RAM、更多 CPU、更多接口(interface)?我如何对此进行负载平衡?
  3. 监控 - 错误记录等;我无法计算有多少次我必须在服务上设置跟踪才能了解为什么会发生似乎只影响一个客户的错误,或者必须将逻辑编码到服务中以序列化异常,将异常记录到数据库,优雅地失败等等。
  4. 部署 - 易于部署;这些都不会将 DLL 部署到 5 个负载平衡服务器

这些问题中的每一个问题都需要组织实现某种类型的自定义解决方案。 #1 的文档和 UDDI。虚拟化和负载平衡硬件/软件#2。 #3 的跟踪、将异常写入数据库/日志等。 #4 的定制部署软件。我在一家中型组织工作。我什至无法想象像 Sun、Google 或 Microsoft 这样规模的公司将如何解决这些困境。

也许我的愿景不切实际,但我梦想拥有一个框架本身,它位于管理上述所有内容的服务器集群之上。我欣喜若狂地阅读了 Microsoft 的 AppFabric,因为它似乎确实将 BizTalk 的一些功能扩展到了 WCF 服务实现者:缓存、托管、监控等。但是,从我所看到的情况来看,我仍然觉得它还没有存在。实现我对一体化解决方案的梦想,该解决方案可帮助开发人员和组织编写可轻松跨集群扩展、轻松部署到集群中、可识别、甚至可版本化的服务。

所以,我并不是说这篇文章是关于我的梦想的。我确实有一个问题。首先,我的梦想/想要完全不现实吗?此外,有哪些可用的解决方案可以尝试解决这些问题,而不会将我们限制在开发服务的新的且更专有的方式(BizTalk)中?最后,对于完整的 SOA/ESB 解决方案,我们认为现在或 future 市场上最有潜力的地方在哪里?

最佳答案

我认为您在这里讨论的是不同类型的问题。

1).不阅读文档的开发人员。这是一个普遍存在的问题,不仅限于 SOA——只需看看 StackOverflow 上的一些问题即可。至少开发人员会询问您是否有服务,而不是只是在自己的代码中重复逻辑。我没有看到此类问题的任何技术解决方案,您已经提供了良好的注册表和文档,但有些开发人员更喜欢与人交谈。甚至,也许这实际上是一件好事——人机交互的值(value)高于交互的技术内容。或者,也许,你太好了:“不,我不会回答这个问题,你自己查一下。”

2).缩放。有一些技术可以解决这个问题。 (免责声明,我为 IBM 工作,他们销售一些产品,因此我将引用这些内容 - 我无意暗示 IBM 是该领域唯一提供解决方案的供应商。)有诸如 this 之类的产品。它可以配置新机器、安装软件堆栈并将其添加到集群中以应对工作负载变化。然后,在 Java EE 世界中进行更细粒度的控制,应用程序服务器可以动态调整流量并调整集群。请参阅WebSphere Virtual Enterprise

3).监控。我在这里不“明白”你的期望。很可能这种棘手的错误将需要应用程序级别的跟踪。对于某些问题,例如查找内存泄漏和性能瓶颈,有非常好的工具,至少在 Java EE 世界中是这样。

4).我无法谈论 .Net 世界,但我想说 Java EE 应用程序服务器在跨集群顺利部署应用程序方面做得相当合理,并且在我们使用 JNI 并需要部署 DLL 的情况下,我们可以使用产品例如我提到的 Tivoli 堆栈来管理这个。

所以,总而言之,我确实认为供应商正在努力解决这些问题。我认为如果没有 SOA,您的生活不会变得更简单。想象一下同样的问题适用于无数独立的应用程序。

关于web-services - SOA/ESB 困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480767/

相关文章:

ruby-on-rails - 如何在 Rails 或 Ruby 中使用 json 或 xml 网络服务?

JQuery/Ajax 返回成功消息并显示 Saved 指示器

web-services - 在 BPEL 中获取经过身份验证的用户

web-services - REST 中的集合和商店有什么区别?

c# - n层架构: best place to store business objects?

wcf - 更改每个 WCF 方法或调用的超时时间

java - 如何在现有的Web 项目中集成Web 服务?

java - 我们可以在 Eclipse 中使用 jax-ws 将同一类 java 中的两个方法公开为 Web 服务吗?

c# - WCF 4.0 SOA 提交作为事务

c# - n-tiers & ORM & 如何实现 ORM