我们正在使用Jhipster开发基于微服务的应用程序。为此,应该同时运行不同的组件,即服务注册表,UAA服务器,网关和其他不同的服务。要在我的PC上运行所有这些组件,它会消耗所有资源(16 GB的Ram)。但是,其他开发人员,他们的PC上没有足够的资源,这也是我们面临团队不断发展的问题的原因。 因此,我们正在寻求解决此问题的一些方案,以提高我们开发团队的效率。
目前,如果有人想在应用程序上添加/更改功能,他需要同时使用微服务和网关(对于前端)。 那么,在这种情况下,会发生什么?假设多个开发人员在开发环境中同时处理网关和服务。 他们如何进行调试/测试?他们是否必须单独部署网关?
我们计划在我们自己的VPS服务器上部署微服务,并且在不久的将来可以使用heroku,kubernetes,jenkins,cloudfoundry。
如果我错了,请纠正我,是否有更好的选择顺利开发?
我读过Sam Neuman的微服务书,说明开发时基于单一网关的应用程序的问题。现在我对Jhipster如何解决这个问题非常好奇。
答案 0 :(得分:1)
使用共享网关进行开发毫无意义,因为这意味着您无法使用webpack dev服务器来热重新加载UI更改。网关和微服务可以在没有注册表的情况下运行,只需使用本地应用程序属性并定义静态zuul路由。如果你的微服务定义得很好,大多数开发人员只需运行一小部分开发新功能或修复bug。
可以共享UAA服务器,但您也可以创建一个安全配置,模拟您将通过特定配置文件激活的身份验证。这样,当开发人员使用单个Web服务时,她可以使用简单的REST客户端(如curl或swagger)对其进行测试,而无需担心令牌。
如果您想共享注册表,另一种可能性是为每个开发人员分配一个弹出配置文件,但与上述方法相比,这可能是过度的。
答案 1 :(得分:0)
在我看来,你正试图使用你的微服务,因为它是一块巨石。微服务架构中最重要的功能之一是能够独立地处理每个微服务,这意味着您无需运行整个基础架构来开发功能。想象一下,Netflix的开发人员需要在他们的PC上运行数百个微服务来开发一个功能 - 这将是疯狂的。
微服务完全取决于所有权。通常,不同的团队在不同的微服务或一些微服务上工作,这使得构建良好的测试设计非常重要,以确保只要所有的微服务都作为一个有凝聚力的系统启动和运行,一切都按预期工作。
所有这一切,当你开发微服务时,你不必依赖其他微服务。相反,您最好模拟与其他微服务的所有交互,并编写测试以检查您的微服务是否正在执行它必须执行的操作。我建议你 wiremock ,因为它对Spring Boot有开箱即用的支持。另一个原因是它还受到 Spring Cloud Contract 的支持,使您能够使用另一种称为消费者驱动合同的强大技术,这使得可以确保两个微服务之间的合同在任何给定时间都不会被破坏
这些是集成测试(它们在微服务级别上运行)并且由于模拟而具有非常快速的反馈,另一方面,在运行所有应用程序之后,您无法保证应用程序正常工作。这就是为什么应该有另一类粗粒度测试,即端到端测试。这些测试应针对整个应用程序运行,这意味着所有基础架构必须正常运行并准备好为您的请求提供服务。这种测试通常由CI自动执行,因此您不需要在PC上运行所有微服务。您可以在此处检查API网关是否可以与其他服务一起使用。
因此,理想情况下,您的测试设计应遵循以下test pyramid。更粗糙的测试,你应该保留在系统中的数量越少。如果谈论比例,没有银弹,粗略的数字是:
P.S:很抱歉没有直接回答您的问题,我不得不使用与测试类比来使其更清晰。我只想说,一般来说,你不需要在开发过程中照顾整个系统。您需要照顾您的特定微服务并模拟与其他服务的所有交互。