Web services SOA/ESB困境
很抱歉这个问题很复杂,但这是我已经研究了一段时间的事情,它真的让我很沮丧。我觉得在当今时代,实现服务的方法有很多种,其中之一就是跨平台(SOAP)和易于构建(多亏了.NET、java和其他框架)。然而,这些技术已经在社区中使用了5-10年,但我们(或至少我)一直受到相同问题的困扰:Web services SOA/ESB困境,web-services,soa,n-tier-architecture,esb,Web Services,Soa,N Tier Architecture,Esb,很抱歉这个问题很复杂,但这是我已经研究了一段时间的事情,它真的让我很沮丧。我觉得在当今时代,实现服务的方法有很多种,其中之一就是跨平台(SOAP)和易于构建(多亏了.NET、java和其他框架)。然而,这些技术已经在社区中使用了5-10年,但我们(或至少我)一直受到相同问题的困扰: 识别(跟踪服务)-UDDI;e、 尽管有一个讨论该服务的wiki和保存服务文档的存储库中的同一文档的PDF版本,但g.不得不在本月3次提醒同事该服务的位置 可扩展性—开箱即用的集群;作为一个组织,我们花了很多钱支付给
不要忘乎所以地认为SOA是解决所有问题的解决方案。在高层次上使用它很好,在低层次上使用它会使您的应用程序变得脆弱、缓慢,并且无法调试。我认为您在这里讨论的是不同类型的问题 1) 。不阅读文档的开发人员。这是一个普遍存在的问题,不仅限于SOA——只要看看有关StackOverflow的一些问题就知道了。至少开发人员会问您是否有服务,而不是在他们自己的代码中复制逻辑。我看不到任何解决此类问题的技术方案,您已经提供了良好的注册表和文档,但是一些开发人员更喜欢与人交谈。甚至可能,这实际上是一件好事——人机交互的价值高于交互的技术内容。或者,你太好了:“不,我不回答这个问题,查一查。” 2) 。缩放比例。有一些技术可以解决这个问题。(免责声明我为IBM工作,IBM销售一些产品,因此我将引用这些产品-我无意暗示IBM是这一领域中唯一提供解决方案的供应商。)有这样的产品,可以配置新机器、安装软件堆栈并将其添加到集群以解决工作负载变化。然后,在JavaEE世界中的细粒度控制级别上,应用服务器可以动态地塑造流量并调整集群。看 3) 。监测。我不明白你在这里所期望的。在所有可能的情况下,这些棘手的错误将需要应用程序级别的跟踪。对于一些问题,例如查找内存泄漏和性能瓶颈,有非常好的工具,至少在JavaEE世界是这样 4) 。我无法与.Net世界对话,但我想说Java EE应用程序服务器在顺利跨集群部署应用程序方面做了合理的工作,在我们使用JNI并需要部署DLL的情况下,我们可以使用我提到的Tivoli stack等产品来管理这一点
总之,我认为供应商正在努力解决这些问题。我不认为没有SOA你的生活会更简单。相反,想象一下,同样的问题也适用于无数独立的应用程序。如果您与IBM或某个大型SOA供应商交谈,他们的产品涵盖了每种场景
Identification (Tracking services) - UDDI; e.g., had to remind a co-worker the 3 times this month where a service is at, despite the fact there is a wiki that discusses the service and a PDF version of the same documentation that lives in a repository where we keep our service docs.
注册表和存储库服务器。很好的一点是,它可以进行治理(升级、降级、版本控制、批准),并且您的ESB通常会对注册服务器进行“查找”,查找最新的和最好的
Scalability - Out of the box clustering; As organizations, we spend a lot of money on paying our admins just to watch the utilization of our services and make decisions like, does this service need more RAM, more CPU, more interfaces? How do I load balance this?
交易
Monitoring - error logging, etc; I can't count how many times I have to set up tracing on services in order to see why a bug is happening that only seems to affect one customer, or have to code logic into the service to serialize exceptions, log exceptions to dbs, fail gracefully, etc.
Deployment - easy to deploy; none of this deploying DLLs to 5 load balanced servers