Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microservices 每个数据库表的微服务? 人 国家 斯波肯语_Microservices - Fatal编程技术网

Microservices 每个数据库表的微服务? 人 国家 斯波肯语

Microservices 每个数据库表的微服务? 人 国家 斯波肯语,microservices,Microservices,有一个关于微服务粒度的问题。我将尝试用一个例子来解释我的问题 假设数据库中有以上3个表,Person->NativeCountry表之间存在多对一关系。数据库中显示的person->Languages之间的一对多关系 前端应用程序假定对person实体执行CRUD操作,并且还能够基于nativecountry或spokenlanguage检索人员 为每个实体开发3个独立的微服务,然后在上层使用聚合器微服务为用户体验层构建组合数据,这有意义吗?还是我应该考虑将这些组合起来构建单个微服务?根据您对问

有一个关于微服务粒度的问题。我将尝试用一个例子来解释我的问题

假设数据库中有以上3个表,Person->NativeCountry表之间存在多对一关系。数据库中显示的person->Languages之间的一对多关系

前端应用程序假定对person实体执行CRUD操作,并且还能够基于nativecountry或spokenlanguage检索人员


为每个实体开发3个独立的微服务,然后在上层使用聚合器微服务为用户体验层构建组合数据,这有意义吗?还是我应该考虑将这些组合起来构建单个微服务?

根据您对问题的描述,这听起来像“人”如果我理解正确的话,它们是服务的功能和用例的中心

  • 按原籍国查找人员
  • 用语言找人
  • 添加一个同时具有其本国和所说语言的人
  • 列出所有的语言
由于这三个必需的功能是围绕人的,一个功能只需要列出语言,我认为这应该是onemicroservice(同样不知道是否有依赖于其他可能的实体服务的外部服务)。我在这里的论点是,为了服务请求,人们是感兴趣的实体,而母语和语言只是检索用户的一个维度


如果您将每个实体、人员、语言和国家划分为不同的微服务,则服务将太小,复杂性将增加。例如,您可能需要向多个服务发出多个请求以生成单个响应,而可能不需要这样做。至于最后一个与人无关的特性,我想说它太小了,不适合在微服务中使用。在需要将最后一项功能作为独立服务之前,我建议将其放入“人员”微服务中。

虽然这个问题是有效的,但如果不了解业务领域,就有点难以回答。通常,如果查询要同时查询Person、NativeCountry和SpokenLanguages,请使用单个微服务,如果有更大的域要求微服务独立,则不要单独使用和分离微服务。如果您可以添加更多特定于域的详细信息以及其他服务如何使用这些信息,这可能会为更准确的答案提供一些见解。让我们假设在UI上有一个添加新人员的工具,该工具将明显附带本地国家和语言。但是,对于在CreatePersonUI上预填充可用的口语,可能需要在DB中查询可用的语言并填充。在用户界面上,还应该有一个搜索部分,可以提供nativecountry或作为搜索标准的一种语言,以便能够搜索与此匹配的人。数据库服务器本身就是一个大服务。如果表之间有外键,那么从技术上讲,这些服务将不再是微服务,因为在数据库级别上存在耦合。其想法是让服务拥有自己的/独立的存储。