Questions tagged «middleware»

1
为什么数据库作为队列那么糟糕?[关闭]
我刚刚读了这篇文章,我很困惑。 假设有1个webapp和1个不同的应用程序充当“工作者”,它们共享同一个数据库。 哦,我说“分享” ..但是这篇文章警告了什么?: 第四,在应用程序(或服务)之间共享数据库是一件坏事。在其中放置无定形共享状态太诱人了,在您不知道它的情况下,您将拥有一个巨大的耦合怪物。 =>不同意。在某些情况下,不同的应用程序仍然是同一单元的一部分,因此,在这种情况下,“耦合问题”的概念毫无意义。 让我们继续:Web应用程序处理客户端HTTP请求,并可能随时更新某些聚合(DDD术语),从而生成相应的域事件。 工作人员的目标是通过处理所需的作业来处理那些域事件。 重点是: 事件数据应如何传递给工作人员? 正如阅读的文章所提倡的那样,第一个解决方案是使用RabbitMQ,它是一款出色的面向消息的中间件。 工作流程将很简单: 每当Web dyno生成事件时,它都会通过RabbitMQ发布该事件,从而为工作人员提供帮助。 缺点是,如果不处理潜在的发送失败或硬件问题,则无法保证提交汇总更新和事件的发布之间的即时一致性。这是另一个主要问题。 示例:发布事件可能没有成功进行汇总更新...导致事件代表域模型的错误表示。 您可能会争辩说存在全局XA(两阶段提交),但这不是适合所有数据库或中间件的解决方案。 那么,什么是确保这种即时一致性的好的解决方案?: IMO,将事件存储在数据库中,并且与聚合更新在同一本地事务中。 将创建一个简单的异步调度程序,并负责从数据库查询当前未发布的事件,并将其发送到RabbitMQ,后者再填充工作程序。 但是,为什么还要在webapp端并需要一个额外的调度程序:为什么在这种情况下需要RabbitMQ? 通过这种解决方案,在逻辑上似乎可以不需要RabbitMQ,尤其是因为数据库是共享的。 确实,无论如何,我们都看到即时一致性涉及从数据库进行轮询。 因此,为什么工人不直接对这次投票负责? 因此,我想知道为什么网络上有那么多文章在推广面向消息的中间件时几乎没有批评数据库排队。 文章摘录: 简单,使用正确的工具完成工作:这种情况正在引起消息传递系统的注意。它解决了上述所有问题;不再需要轮询,高效的消息传递,无需从队列中清除已完成的消息以及没有共享状态。 和即时的一致性,被忽略了吗? 综上所述,实际上无论情况如何,无论是否共享数据库,我们都需要数据库轮询。 我错过了一些批评观念吗? 谢谢

1
API网关和ESB之间的区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 我工作的公司正在评估一些中间件解决方案,以解决网络服务的治理,计量和安全问题。当前,我们正在为此目的使用企业服务总线(ESB),但是管理层中的一些帅哥决定他们将部署一些API管理中间件。 我对这些API管理(又称API网关)解决方案进行了一些研究,但找不到它们与实际ESB之间的区别。我评估了Mule,WSO2,Oracle等的一些白皮书,但是两种产品提供的功能似乎几乎相同。问题是,ESB无法做到的API管理能做什么,反之亦然?通过替换API网关的ESB,可以为IT基础架构增加什么价值?

3
我们是否已经全面采用微服务,又回到了非常古老的方法?
在软件架构和设计方面,微服务如何与中间件“堆叠”(双关语意)?我来自Java,似乎当您摆脱作为API的直接REST并抽象出不同的层和连接参数时,至少在Java中,您几乎已经完全回到了一些非常古老的想法。我们已经回到虚拟化……而JVM 已经是虚拟的。 以一种不可知论的方式,您可以并且我会争论将RESTful API抽象到CORBA的优点。或者,以Java为中心的方式,使用JMS或MDB。 EJB在Java上曾经是一个大问题,但在某种程度上它被认为是集群效果,但是现在,我们又回到了起点吗? 还是微服务提供了CORBA甚至更好的MDB所缺少的功能?当我读(TLDR)Martin Fowler解释微服务时,如果可以的话,它是解决一个严重问题的很好的解决方案。更确切地说,是一种封闭的方法,它引入了一定程度的复杂性,只能解决问题。如果这些服务确实是微服务,并且数量众多,则每个服务的运行和维护成本都为一美元。 此外,如果许多微服务中的一个微服务更改了其API,那么依赖该服务的所有内容都会中断。它并不显得松散连接,它似乎敏捷的对立面。还是我滥用这些话? 当然,在这些极端之间有很多不确定的选择。 鲨鱼与大猩猩...走吧! (对于书呆子来说,这具有讽刺意味,完全不是我的意图。这个问题是从表面上考虑的。如果这个问题可以改善,请这样做,或者发表评论,我会解决的。 ) 设想在docker上运行的多个微服务都在一台机器上互相交谈...疯狂。难以维护或管理,几乎不可能更改任何东西,因为任何更改都会级联并导致不可预见的错误。这些服务分散在不同的计算机上如何更好?而且,如果它们是分布式的,那么肯定可以解决某些非常非常古老的技术,至少在一定程度上解决了分布式计算的问题。 为什么水平缩放如此普遍,或者至少是可取的?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.