【问题标题】:Splitting and naming Microservices拆分和命名微服务
【发布时间】:2016-11-19 09:07:15
【问题描述】:

我最近开始了一个副项目。它应该是一个虚拟食谱书,具有存储和检索食谱 (CRUD)、对其进行评分和搜索的功能。这不是什么新鲜事,但我想将其构建为桌面应用程序,以了解有关数据库、单元测试、UI 等的更多信息。现在核心域已经完成(我使用 DDD 方法)并且我实现了大部分 CRUD 存储库,我想通过在线托管核心功能来使其更具可扩展性,因此我能够编写多个后端(桌面应用程序、Web 应用程序、Web api 等)。

面向服务的架构(或微服务)对我来说听起来是个不错的方法。我面临的问题是如何决定,我的项目的哪些部分属于单独的服务以及如何命名它们。

参与项目的以下部分:

  • 核心域(聚合、实体、值对象、逻辑)-> Java
  • 持久性(DAO、存储库、多个数据库后端实现)-> Java
  • 搜索(使用持久数据库上的 SQL 查询进行搜索的搜索服务)-> Java
  • 桌面应用程序 -> JS(电子)或 JavaFX
  • Web 应用程序 -> Flask 或 Rails
  • Web API(使用 REST 管理、评分、搜索食谱)-> ?

我最初的方法是将核心域、持久性、搜索和 web api 放入一个子项目中,并将整个堆栈托管在 Heroku 或类似的东西上。这样我的客户就可以使用 Web 界面。桌面和 Web 应用程序本身就是不同的项目。如果 Dektop 应用程序都是用 Java 编写的,则它们可以共享核心域。

这是一种有效的方法,还是我应该将第一个服务分成更小的部分?您如何命名这些服务?

【问题讨论】:

    标签: soa microservices


    【解决方案1】:

    Eric Evans 在 GOTO 2015 会议上 (https://youtu.be/yPvef9R3k-M) 和我 100% 同意他,回答了你的问题。微服务范围应该是一个或多个限界上下文。包括其对持久性、REST/HTTP API 等的支持类。 据我了解,微服务是限界上下文的部署包装器,增加了隔离、扩展和弹性方面。 正如您所写,您没有应用战略设计来定义有界上下文。因此,是时候在将应用程序拆分为各个部分之前进行检查了。

    【讨论】:

    • 如果您考虑包含单个有界上下文和支持功能的微服务,那么将它们拆分会容易得多。我没有定义有界上下文,但项目的范围也并不真正保证它。如果我必须绘制一个上下文映射,那将是一个单一的上下文。我认为将所有这些部署为提供持久性和查询的单一服务是一个不错的选择。
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 2016-09-28
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2020-11-28
    • 2017-03-19
    相关资源
    最近更新 更多