Architecture 微服务架构,它真的鼓励复制/粘贴吗?

Architecture 微服务架构,它真的鼓励复制/粘贴吗?,architecture,microservices,Architecture,Microservices,我在一家中等规模的公司工作。大约一年后,我们开始重构旧的解决方案,创建微服务。后端部分选择Go,前端部分选择Node.js 现在假设我们有一些html表单,用户在其中放置一些数据。之后,前端部分进行自己的验证并调用三个不同端点中的一个(三个不同的微服务) 这通过前端数据验证,然后由三个微服务分别验证。复制/粘贴相同的规则。还有很多类似的例子 我建议创建一些验证器服务,在一个地方执行验证,我得到了类似“在微服务体系结构中,我们不能创建强依赖性”的答案 我的问题是,“强依赖性”是否真的如此糟糕,以至

我在一家中等规模的公司工作。大约一年后,我们开始重构旧的解决方案,创建微服务。后端部分选择Go,前端部分选择Node.js

现在假设我们有一些html表单,用户在其中放置一些数据。之后,前端部分进行自己的验证并调用三个不同端点中的一个(三个不同的微服务)

这通过前端数据验证,然后由三个微服务分别验证。复制/粘贴相同的规则。还有很多类似的例子

我建议创建一些验证器服务,在一个地方执行验证,我得到了类似“在微服务体系结构中,我们不能创建强依赖性”的答案


我的问题是,“强依赖性”是否真的如此糟糕,以至于我们需要进行愚蠢的复制/粘贴,并为复制/粘贴的代码创建一个单元测试(我们也复制/粘贴它们并更改名称)。如果“强依赖性”如此糟糕,请举例说明原因

对于您的第一个问题,答案是您不应该“复制/粘贴”任何内容,消除服务之间的“硬”同步依赖关系与此无关。这是一个强有力的迹象,表明整体分解的功能边界是错误的。我现在要问的问题是,当一个微服务应该拥有和管理自己的数据时,为什么要用三个独立的服务对相同的数据进行验证?此外,常见的情况是,多个微服务可能共享一些近乎横切的实用程序类型,并且公共库(例如Java中的JAR)不会违反体系结构的意图。不需要副本/过去


现在,这就是为什么“强”同步依赖通常是个坏主意。微服务架构的目的是快速部署新的和改进的“单一/做一件事)功能投入生产,风险最小,不会对性能产生不利影响。它支持进化改进,并加快所需功能的上市时间。如果您的新服务行为不当,它只会影响其负责的功能,而不会影响其他功能。现在想象一下,如果您通过“代码模块”而不是通过特性/功能分解单片应用程序。你只会得到一个分布式的巨石!您不仅失去了体系结构的所有优势和意图,而且性能和复杂性也会受到不利影响,可能会达到致命的程度。

对于您的第一个问题,答案是您不必“复制/粘贴”任何内容,也不必取消“硬拷贝”服务之间的同步依赖关系与此无关。这是一个强有力的迹象,表明整体分解的功能边界是错误的。我现在要问的问题是,当一个微服务应该拥有和管理自己的数据时,为什么要用三个独立的服务对相同的数据进行验证?此外,常见的情况是,多个微服务可能共享一些近乎横切的实用程序类型,并且公共库(例如Java中的JAR)不会违反体系结构的意图。不需要副本/过去


现在,这就是为什么“强”同步依赖通常是个坏主意。微服务架构的目的是快速部署新的和改进的“单一/做一件事)功能投入生产,风险最小,不会对性能产生不利影响。它支持进化改进,并加快所需功能的上市时间。如果您的新服务行为不当,它只会影响其负责的功能,而不会影响其他功能。现在想象一下,如果您通过“代码模块”而不是通过特性/功能分解单片应用程序。你只会得到一个分布式的巨石!您不仅失去了体系结构的所有优势和意图,而且性能和复杂性也会受到不利影响,可能会达到致命的程度。

为什么不创建验证库,然后在需要的地方导入它呢?一件事是拥有微服务,但是你仍然可以在他们之间共享代码为什么不创建验证库,然后在需要的地方导入它呢?一件事是拥有微服务,但是你仍然可以在他们之间共享代码,这就是功能的错误分解。这就是为什么任何基于服务/面向服务的体系结构中的治理都是至关重要的。确保没有重复的工作、服务、操作等。前端和后端的表单验证如何?Node.js和Go。我们需要确保在后端验证数据,在前端需要动态验证,以交互方式向用户显示这一点。你觉得在两侧复制粘贴(重新创建)相同的规则、创建单元测试等是个好主意吗?@Vitalii好吧,没有其他方法,但问题是你是否真的要复制/粘贴?前端最有可能使用一些javascript框架和API进行验证,这些将是Go库。因此,虽然从业务角度来看,这将是相同功能的复制,但从技术角度来看,我不认为这将是源代码的简单复制粘贴。这就是为什么任何基于服务/面向服务的体系结构中的治理都是至关重要的。确保没有重复的工作、服务、操作等。前端和后端的表单验证如何?Node.js和Go。我们需要确保在后端验证数据,在前端需要动态验证,以交互方式向用户显示这一点。你觉得在两侧复制粘贴(重新创建)相同的规则、创建单元测试等是个好主意吗?@Vitalii好吧,没有其他方法,但问题是你是否真的要复制/粘贴?对于前端,最有可能使用一些Java的验证