java - 短暂不活动后,Openshift 服务不可用

标签 java spring-boot openshift okd

我们将项目托管在 OpenShift 中(准确地说是 OKD。我们自己托管)。设置如下:

  • 路由服务器(带有 Zuul 的 Spring Boot 1.5.8):这个服务器接收所有传入流量并将其路由到正确的服务
  • 多个服务(全部使用 Spring Boot):这是所有的业务逻辑

  • 我们使用 SOAP 来调用这个项目中的其他服务。
    目前,当我们调用应用程序时,调用会转到路由服务器,然后路由服务器将其路由到主要业务服务。
    在大约一小时的短暂不活动后,我们的主要业务服务无法通过外部调用访问。然而,边缘服务器 100% 的时间都是可用和可调用的。我们确实收到了 504 Gateway Timeout当我们调用它时,系统会出现异常。我们已经知道这是 openshift 中路由的超时时间(路由中的 haproxy.router.openshift.io/timeout)。
    核心问题是,OpenShift 似乎在大约一小时不活动后 hibernate 主要业务服务。然而,在延迟 15 分钟后,调用似乎找到了目的地,并且数据得到了正确处理。
    我们如何才能关闭这种行为?
    编辑1:
  • 我们在生产中的普通“老式”虚拟机中有相同的应用程序。我们在那里没有任何问题。
  • 我们注意到,当我们定期调用服务时,它们可以“保持活跃”。我们构建了一个小型服务,它定期调用主题(每 15 分钟一次)。这种方式似乎有效。但这不是 IMO 的生产就绪解决方法。

  • 编辑2:
    我们的 pod 配置(一些名称是匿名的):
    https://gist.github.com/moritzluedtke/6867499b0acbb2d7b5a9a70e49b0d45c
    我们不使用自动缩放器。
    编辑3:
    我们的部署配置(一些名称是匿名的):
    https://gist.github.com/moritzluedtke/dc7c1078fe9cc7e4aeb737094849fc1b
    OpenShift Master:      v3.11.0+1c3e643-87
    Kubernetes Master:     v1.11.0+d4cacc0
    OpenShift Web Console: v3.11.0+ea42280
    
    编辑4:
    似乎这不是 OpenShift 的问题,而是我们的技术堆栈的问题。一旦我们有解决方案,我会更新这个问题。

    最佳答案

    我们最终更新了数据库驱动程序(POSTGRESQL)并从 spring 中切换了默认连接池。

    pom.xml:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>${HikariCP.version}</version>
    </dependency>
    

    关于java - 短暂不活动后,Openshift 服务不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58078775/

    相关文章:

    java - java.net.Socket.connect 超时的准确性是多少?

    java - 通过 java/servlet 使文档可供下载

    spring-boot - 使用 Spring Boot 和 Spring AMQP 尽早创建 RabbitMQ 连接

    java - OpenShift 上到 MySQL 的 JDBC 连接池

    java - Openshift 上 Tomcat 7.0.39 上的 Websocket

    java - Spring batch JDBCPagingItemReader、ThreadPoolTask​​Executor 和 OpenShift 中的多个 pod

    java - 如何将 google 身份验证 token (在 iOS 中获得)传递到 google-app-engine Web servlet?

    java.lang.NoSuchFieldError : instance exception using yuicompressor to minify JS files

    spring-boot - JBoss EAP 7.1 + Spring Boot 应用程序 : No validator could be found for constraint 'javax.validation.constraints.NotBlank'

    java - Spring Boot - 不明确的映射