模块与微服务的区别

10
这篇摘要将微服务和API的区别描述为:
微服务通过API公开其接口,即它能够执行的操作。API是微服务在接收命令/查询时响应的所有端点列表。微服务包含API和其他内部+隐藏的东西,用于响应客户端请求。
我曾经在Java中使用过模块和微服务,但是有没有更好的方法来明确描述模块和微服务之间的区别?
基于我的经验,几个模块作为微服务项目的一部分被导入。微服务是某种具有额外功能的模块,可以公开RESTful端点吗?模块与微服务之间有何不同或相反?
关于问题的主题,我们还能讨论更多内容以澄清潜在的困惑吗?
我增加了一些视觉辅助工具以进一步澄清:

An example of a microservice that utilises various modules (Source: Author)

如果您有可能,可以提供与微服务和模块相关的可靠参考资料,并加以驳斥。


1
在我的看法中,微服务应该始终被视为远程服务。 - aschoerk
1
一个微服务必须作为可运行的独立服务,而模块则不一定。它可能只是一组相关类的集合。 - Michael
2
@Thomas REST是过于具体化了。微服务提供一个API。通常它是RESTful的,但这不是必需的。 - Michael
1
@Michael 是的,没错。不过我(仅代表我自己)认为所提供的API必须允许用户使用不同的技术进行编写,而无需特殊的包装器,例如一些基于文本的格式,如REST。 - Thomas
1
是的,当我想到模块时,我倾向于认为它们比库要大一些,但仍然使用相同的技术构建(例如Java或至少JVM语言)- 有时像插件或Wildfly的“子系统”之类的东西。我们目前正在构建一个部分作为JavaEE应用程序,部分作为Node.js应用程序开发的系统。虽然这仍然存在内部争议,但可以考虑将两个部分都视为“微”服务。 - Thomas
显示剩余4条评论
3个回答

9
微服务提供REST或非REST的API。
微服务代码可以编写成一个更大的项目中的模块。
当我们选择将其作为微服务而不是模块时:
  1. 我们将其与使用它的系统分离。
  2. 这个微服务可以独立扩展,即为其目的使用特定的数据库。
  3. 使用最适合其目的的开发语言 - 如果将其作为模块使用,则必须使用大部分代码库和模块所编写的语言。
  4. 负责自己的数据补丁。

8

模块和微服务之间的区别在于打包方式。 模块是编程级别构造,通过在部署中包含(旨在进行进程内执行)将软件的一部分进行打包和封装,以供其他软件重复使用。 微服务是一个软件部署,通过一个线协议与其他软件分隔开来,供其他软件使用。


0

模块和微服务是软件行业中使用的完全不同的术语。我可以通过电子商务行业的例子来解释。

结帐(Checkout)是一个模块,具有购物车、订单审核、添加到袋子等功能。这是更通用的术语。

微服务更加技术化,它们是相互独立的服务。 例如,我们可以将“添加到袋子”作为微服务。这只会向购物袋中添加一个项目。仅需要袋子ID和要添加的产品(最重要的)。此服务将不知道其他功能,如运输方式、付款方式等。


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