始终使用REST。它是当今最现代化、先进和可扩展的集成方法。基于REST的服务负载均衡可以通过硬件或软件HTTP负载均衡器轻松实现,并且可以被认为与JMS中的负载均衡一样自由。
MOM
(面向消息的中间件) 不易扩展(但可能足够满足您的需求)。REST在Web规模下运作。
MOM没有
经济规模。对于数据检索请求,每次请求特定数据时,都必须发送另一个消息到服务器,并由服务器做出响应。在基于REST的系统中,同一数据的请求可以由
HTTP缓存提供服务。这意味着随着时间的推移,随着请求数量的增加,基于MOM的系统将看到服务器负载与请求同步增加。基于REST的系统将看到服务器负载增加速度比请求慢。
MOM会通过一次性发送消息并保证投递来诱惑您,但随之而来的是
责任链问题的困扰。
对于同步请求-响应,MOM非常糟糕,因为当服务器宕机时,它会缓慢失败(即等待超时)。当请求即将失败时,您希望它能够快速失败。如果服务器宕机,基于REST的服务的HTTP请求将立即失败(在TCP连接上)。
MOM适用于异步请求-响应消息,但是您将面临请求和响应之间存储状态的问题(提示:您的选项是
文件或常规数据库,
消息或
NoSQL数据库)。通常,额外的实现工作并不值得异步性所带来的看似优势。此外,如果您确实需要,基于REST的服务也支持异步请求。在这种情况下,
202接受是您的朋友。
最后,使用缓存允许基于REST的系统实现拉式集成,这样更容易支持。例如,假设我们想将数据从系统A移动到系统B。 MOM方法是从A向B发送消息。基于REST的方法是在A中创建一个数据源服务(类似于RSS源),B轮询获取新数据(就像您的RSS阅读器轮询获取新文章)。当B失败时,在MOM示例中,支持团队需要监视消息队列以确保它们不会溢出,同时其他人使B恢复正常。在REST示例中,支持团队只需担心将B恢复正常。当A失败时,差别不大。在MOM示例中,B不知道也不关心。在REST示例中,B知道A已经停机,但仍然不关心,因为显然当A停机时没有新数据可用。最初,拉式集成需要轮询,似乎非常低效,但HTTP缓存使这成为无关紧要的问题。
换句话说,与其投资于JMS服务器,不如投资于良好的缓存HTTP负载均衡器。