DAO微服务是微服务架构的好方法吗?

时间:2016-01-11 12:55:19

标签: web-services rest database-design architecture microservices

我正在创建一个Web应用程序并决定使用微服务方法。您能告诉我从所有Web服务(登录,评论等Web服务)组织访问数据库的最佳方法或至少是常见方法。是否可以创建DAO Web服务并仅使用它来读取/写入应用程序数据库中的值。或者每个Web服务都应该有自己的dao层。

5 个答案:

答案 0 :(得分:2)

每个微服务应该是一个具有所有必要层的完整应用程序(这并不意味着微服务之间不能共享代码,但它们必须在不同的进程中运行)。 / p>

此外,通常建议每个微服务都有自己的数据库。请参阅http://microservices.io/patterns/data/database-per-service.html https://www.nginx.com/blog/microservices-at-netflix-architectural-best-practices/因此,我并非真正意识到只能充当数据访问外观的Web服务。

答案 1 :(得分:2)

微服务很棒,但立即开始使用太多的微服务并不好。如果您对如何在应用程序中定义微服务之间的界限存在疑问,请从一个整体开始(始终保持代码清洁,并且良好的面向对象,设计良好的层和接口)。当您进入更成熟的应用程序状态时,您将更容易看到正确的位置以拆分为可独立部署的服务。

关键是将应该真正耦合的事物保持在一起。当我们试图将所有东西与所有东西分离时,我们最终会创建太多的接口层,这会减慢我们的速度。

答案 2 :(得分:0)

我认为这不是一个好方法。 数据库操作在任何进程中都至关重要,因此它必须位于微服务中的DAO层。为什么你不在里面实现什么。 使用服务时,您将失去控制权,如果必须更改流程逻辑,则必须更改DAO服务(影响所有服务)。 在我看来,这不是一个好主意。

答案 3 :(得分:0)

我认为使用服务从数据库公开数据是理想的,因为它提供了灵活性。开发REST服务以将部分或全部数据作为服务公开,可以灵活地通过AJAX或其他可以处理数据和生成新信息的服务将数据直接传递给UI。这些消费者不需要实现DAO,可以使用任何语言。虽然整个数据库的REST服务可能不是微服务,但可以通过一个案例将其分解为学生,教授和类的只读,以便在学校网站上公开,并为创建不同的服务,更新和删除(CUD)仅适用于注册商办公室桌面应用程序。

例如,构建服务以公开数据的统计值将保护数据免受仅需要统计值的用户/程序的检查,而无需让服务为该统计的组件实现整个DAO。 SQL Server或Oracle等全功能数据库提供了许多应用程序开发人员可以使用的功能,包括复杂查询(使用索引),统计数据集操作的应用程序。

答案 4 :(得分:-2)

拥有数据库服务是一种完全有效的模式。实际上,这是从Building Microservices book开始将monolith的各个方面导出到微服务的关键示例之一。

如何围绕这样的想法组织代码是一个不同的问题。是的,从db客户端程序员的角度来看,在每个数据库客户端上拥有相同的DAO层非常有意义。

DAO模式可能适合将您的数据库绑定到您使用的一种编程语言。但是,如果对数据库的所有访问都由相同的DAO基础结构调解,那么您需要问问自己为什么要将数据库作为Web服务公开。或者您打算为每个客户端编程语言绑定创建一个DAO模式?

如果所有数据库客户端都将使用相同的编程语言编写,那么您确定需要将数据库作为微服务包装吗?毕竟,数据库通常已经是一个远程服务,具有明确定义的网络协议,可以快速可靠地传输数据。为什么要在它上面添加HTTP?你期望从增加这种复杂性中获得什么?

使用DAO模式的另一个问题是DAO结构不一定遵循Web服务的发展。 Web服务可能以不会使旧客户端不兼容的方式发展。您可能有不同的客户使用微服务的不同功能。在这种情况下,您不会在每个客户端上共享相同的DAO层结构。

确保您没有对Web服务使用RPC样式编程,这没有多大意义。您将基本上抛弃微服务的一个关键优势,即服务和客户之间的脱钩。