spring-boot - 微服务 - 连接到单个遗留数据库时的连接池

标签 spring-boot connection-pooling spring-jdbc spring-cloud-netflix

我正在使用 spring boot + spring cloud + spring JDBC 为单体应用程序开发微服务。
目前,该应用程序通过 tomcat JNDI 连接池连接到单个数据库。

我们这里有一个瓶颈,在这个时间点不要因为大量的数据库对象、与其他系统的依赖关系等各种原因改变数据库架构。

所以我们根据应用特性隔离了微服务。我担心的是,如果我们开发微服务,每个微服务都有自己的连接池,那么与数据库的连接数量会呈指数级增长。

目前,我正在考虑两种解决方案

  • 计算每个应用程序功能当前正在使用的连接数并达到每个服务的最大/最小连接参数 - 这是一个非常乏味的过程,我们没有任何机制来获取每个应用程序功能的连接数。
  • 开发具有单个连接池的数据微服务,从其他 MS 获取查询对象,触发对数据库的查询并将结果集对象返回给调用者。

  • 不确定第二种方法是否是微服务架构中的最佳实践。

    您能否建议任何其他有助于
    现在的情况?

    最佳答案

    这都是权衡取舍。

  • 计算每个应用程序功能当前正在使用的连接数,并达到每个服务的最大/最小连接参数。

  • 缺点 :正如您所说,需要进行一些分析和猜测才能达到每个应用功能的最佳连接数。

    优点 : 与第二种方式不同,可以避免性能开销
  • 开发具有单个连接池的数据微服务,从其他 MS 获取查询对象,触发对数据库的查询并将结果集对象返回给调用者。

  • 优点 : 最少的前期工作

    缺点 : 多一层,又多一层故障点。当您必须处理 serialization -> Http(s) network latency -> deserialization->(jdbc fun stuff which is part of either approach) -> serialization -> Http(s) network latency -> deserialization 时,性能会下降. (在您的情况下,这种性能成本可能可以忽略不计。但如果您的服务中每一毫秒都很重要,那么这是一个巨大的决定因素)

    在我看来,在我分析了我的域和我的数据存储之前,我不会单独拆分应用程序层。

    这是一个很好的阅读:http://blog.christianposta.com/microservices/the-hardest-part-about-microservices-data/

    关于spring-boot - 微服务 - 连接到单个遗留数据库时的连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286072/

    相关文章:

    sql-server-2008 - SQL Server 2008 中的连接最大池大小

    java - 带有 Tomcat DBCP 和多个数据源的 Spring JDBC

    java - 将具有数百万条记录的表从一个数据库复制到另一个数据库 - Spring Boot + Spring JDBC

    amazon-web-services - 如何将 AWS Secret Manager 与 Spring Boot 应用程序集成

    perl - 使用 perl DBI 和 postgresql 的连接池

    java - Spring集成(MQTT): Retrieving published message

    java - DBCP 1.3 验证查询性能下降

    java - Io异常: Oracle Error ORA-12650 in Oracle Cloud

    java - Spring Boot Hello World 示例不工作

    java - Spring boot 2.2.0 - 分段文件上传失败并出现错误