Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Spring 从部署在PCF中的微服务建立到couchbase的连接_Spring_Spring Boot_Spring Data_Couchbase_Cloud Foundry - Fatal编程技术网

Spring 从部署在PCF中的微服务建立到couchbase的连接

Spring 从部署在PCF中的微服务建立到couchbase的连接,spring,spring-boot,spring-data,couchbase,cloud-foundry,Spring,Spring Boot,Spring Data,Couchbase,Cloud Foundry,我已经读到,在构建微服务时,必须考虑以下内容- 基于业务领域而非技术层(如DAO)拆分微服务 所有服务都必须是自包含的——我认为它不应该有很多外部依赖关系。例如,如果服务需要与外部数据库交互并使用10个查询,那么所有这些都应该在应用程序的DAO层中,而不应该是由多个微服务共享的外部库 我有一个现有的遗留应用程序,我计划将其转换为微服务。传统应用程序与Couchbase DB交互。我们有一个库项目,它连接到现有遗留应用程序中包含的couchbase db。在当前设置中,我们使用weblogic,该

我已经读到,在构建微服务时,必须考虑以下内容-

  • 基于业务领域而非技术层(如DAO)拆分微服务
  • 所有服务都必须是自包含的——我认为它不应该有很多外部依赖关系。例如,如果服务需要与外部数据库交互并使用10个查询,那么所有这些都应该在应用程序的DAO层中,而不应该是由多个微服务共享的外部库
  • 我有一个现有的遗留应用程序,我计划将其转换为微服务。传统应用程序与Couchbase DB交互。我们有一个库项目,它连接到现有遗留应用程序中包含的couchbase db。在当前设置中,我们使用weblogic,该应用程序部署在大约16个weblogic场中。每个应用程序都会创建自己到DB的连接,这会导致打开到CB服务器的连接数

    该应用程序足够小,只包含一个业务域。所以我计划将整个应用程序转换成一个微服务。我将把它部署到关键的云铸造平台中。在将应用程序部署到PCF时,我将创建多个应用程序实例,我想我将遇到与旧版应用程序相同的问题。作为设计的一部分,我正在评估的一个选项是将DAO层作为另一个微服务公开,这样我就可以限制到couchbase DB的连接数量。然而,基于我上面列出的观点,我认为这不是一个好的做法。如果我的理解不正确,请告诉我

    我正在评估的另一个选项是在PCF中使用用户提供的服务来建立到couchbase服务器的连接。但是,我不确定这是否会创建一个可供所有已部署应用程序使用的连接池


    请让我知道您对上述方法的看法,以及是否有其他建议方法。谢谢。

    您描述的计划将把一个遗留应用程序转换为一个“微服务”,该服务将与多个实例一起运行(再次在16结尾)。正如你所说的,这会给你带来和以前一样的问题

    主要问题似乎是数据库。所有实例只有一个数据库,这就是瓶颈。但是,您有couchbase,因此可以使用集群并获得可伸缩性

    如果您真的想使用micro服务,您需要将遗留应用程序分成更小的部分,每个部分只处理业务领域的一部分

    正如您在案例中看到的那样,在多个微服务之间共享一个数据库是一种已知的反模式

    由于每个微服务只负责域的一部分,因此每个微服务只需要访问数据库的一个子集。理想情况下,每个微服务都有自己的数据库,允许自由选择持久性技术、缓存和其他优化

    这就是你可以从微服务中获得的好处。这不是免费的,它需要一些努力才能正确

    关于共享外部库的信息 我不认为共享技术库是个问题。不管怎样,你都可以这样做,例如SpringBoot


    如果您共享与业务领域相关的库,那么确实会出现问题。这意味着,许多微服务都关注同一件事。这与“关注点分离”相反,这是微服务的主要目标之一。服务。

    感谢Stefan给出的详细答案。这很有帮助。我还有几个问题。我正在尝试转换的遗留应用程序只涉及一个域,它是一个非常小的服务。当我们将这个实例部署到多个服务器时,它正在创建多个线程,couchbase团队提到我们需要限制正在打开的线程数量。我们正计划增加节点的数量,但是,我们还需要一种机制来限制我们正在创建的连接数量。我们正在使用pivotal cloud foundry。它提供了ServiceBroker抽象,所以想看看它是否允许创建可由部署的应用程序共享的连接