自主集成系统还是企业服务总线(ESB)?

4
我最近开始在一个小公司工作,该公司正在经历增长的烦恼。我不确定我将要描述的是什么系统。基本上,我们拥有许多不同的第三方应用程序混合在一起,它们通过自制的“集成系统”相互通信,该系统是SQL作业、使用.NET编写的后台服务、FTP传输、SSIS等的组合。
以下是概述: 我们的公共网站是一个订单入口系统(第三方购物车软件),由供应商外部托管。我们每天每4个小时下载订单信息。然后我们的自制“集成系统”对这些数据进行整理,并将这些信息提供给我们的库存和仓库管理系统(WMS)。它还向MS Great Plains、Pulse、PayFuse和第三方CMS等提供信息。
如你所料,这种架构非常脆弱,稍有闪失(例如FTP故障或SQL作业失败)可能会导致数据不一致并产生连锁反应。由于数据相关问题或复制问题,有时整个仓库都会停滞不前,我们有时无法接受订单、处理或发货。
我的任务是重新设计我们的系统,并消除系统之间的紧密耦合,以促进业务增长。我需要关注哪些领域?我一直在研究ESB和SOA,但被告知我的公司无法承担50万美元的费用,例如采用iWay或Talend。
有哪些选择?内部开发是答案吗?它比ESB实施更便宜吗?如果有人经历了类似的成长烦恼,那么您是如何处理集成的呢?

首先:以下软件是由我自己(主要是)开发的 --- 你可以尝试一下我的FOSS项目Shuttle(https://shuttle.codeplex.com/)。在托管环境中,您可以通过SQL Server表运行队列。它正在一个大型国际保险公司和南非四大银行之一的生产环境中运行。也可能在其他地方使用,但我不会知道。试一试,并请让我知道您的想法,如果您看看的话。 - Eben Roux
2个回答

7
这是我解决此问题的方法:
  1. 忘记设计一个“完美”的系统。
  2. 不要一次性替换所有内容。
  3. 找到一个导致很大痛苦、相对容易替换且不会威胁业务存在的东西。首先解决这个问题。
在某些方面,有“许多不同的第三方应用程序混合”是一件好事。您可以保留更好的应用程序,同时集中精力修复具有最大业务价值的应用程序。
寻找稳定的业务概念,并明确地建模它们。命令和事件模式在这里非常有用。按照SOA原则将这些概念分组为“服务”。
从您的文本来看,SLA的讨论已经开始了。使这些SLA讨论明确化,但侧重于逐步改进以实现目标,而不是一夜之间的转变。
手动打造基础设施来进行这种转换可能不值得花费时间,但在你知道自己要去哪之前花费6或7位数购买产品也不明智。由于您提到了.Net,我使用过NServiceBus,发现它是一种愉快的编程体验。你专注于你的领域和业务逻辑,让NSB处理管道/基础设施。对于低消息吞吐量,有一个免费选项。这使您能够在讨论预算和资金之前提供一些业务价值。除网站上的文档外,还有一个繁荣的NServiceBus社区可以帮助您入门。
在.net空间中还有其他选择,包括MassTransitEventStore。我个人没有使用过这些,它们也不是功能等效的,因此您需要查看它们并确定哪个符合您的需求和团队的能力。

3
在我看来,这是一个很棒的答案。我同意Kijana的方法。在进行第一轮修复后,专注于改进保持业务运行的过程:即接受订单,并确保系统可用且不会丢失数据。以小步骤完善架构,不断增加价值和稳定性。根据我的经验,Kajina提到的产品确实有所帮助。我建议远离昂贵的代理商类型产品,因为它们往往只会引入另一个故障点和复杂性,甚至在解决任何问题之前就会花费大量资金。这是一个艰巨的任务,你不能一次性解决所有问题。 - Roy
1
我正在参与一个项目,其中Java部分使用Talend ESB。我们的开发团队使用.NET和NServiceBus。我们为集成Talend解决方案开发了一个自定义的ActiveMQ传输层,用了几周时间。社区,特别是NServiceBus周围的人们,在解决这些问题方面帮助了我们很多。社区是NServiceBus最大的优势。我不会尝试自己开发,因为像管理事务等问题将会延迟您的功能输出数个月... - Daniel Marbach
1
虽然我喜欢社区,但像这样的东西很难销售。特别是因为我自己也曾经爱上了Umbraco。最新版本应该很棒,支持MVC并拥有伟大的社区。直到Umbraco Org.决定放弃那个版本,因为它的架构设计不好。我们几乎在其中投入了很多钱。所以很高兴我们把项目推迟了一段时间。幸运的是,NServiceBus有付费支持:http://particular.net/support - Dennis van der Stelt
1
同意Kijana的观点,回答得很好。尝试找到在流程开始或结束时出现的组件。听起来你的集成点是很好的候选对象。这些可以更容易地使用SOA和EDA从大量混乱的代码中提取出来,变成自治的组件。 - Dennis van der Stelt

2

在过去的几年中,我们一直在处理类似的问题。利用ESB将有助于你逐步解决这个问题。一旦团队开始意识到这种解耦带来的好处,整个过程就会加速。我最熟悉的是NServiceBus,我们发现它的入门门槛非常低。开发人员能够快速掌握它,并且尝试成本很低。我同意您应该从对业务最关键的区域入手,首先确保其稳定。


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