>  기사  >  Java  >  Spring Boot 애플리케이션의 성능 향상 - 2부

Spring Boot 애플리케이션의 성능 향상 - 2부

PHPz
PHPz원래의
2024-08-28 06:35:06598검색

Melhorando o desempenho de aplicações Spring Boot - Parte II

이 기사의 첫 번째 부분에서는 TomcatUndertow로 대체하여 애플리케이션 성능을 향상시키는 방법을 배웠습니다. 고성능 웹 서버는 데이터 압축을 활성화하고 구성하는 것 외에도 네트워크를 통해 이동하는 HTTP 응답의 크기를 줄입니다.

이제 지속성 부분에서 Spring Boot 애플리케이션 성능을 향상시키는 방법에 대해 이야기하겠지만 먼저 JPA, HibernateHikari.

JPA

JPA 또는 나중에

Jakarta Persistence로 이름이 변경된 Java Persistence API는 일반적인 Java Persistence API입니다. 데이터 지속성 프레임워크

를 위한 인터페이스.

JPA 사양

은 공급업체별 매핑 구현에 의존하지 않고 내부적으로 객체 관계형 매핑을 정의합니다.

최대 절전 모드

HibernateJPA 사양을 구체적으로 구현하는 ORM 프레임워크 중 하나입니다. 즉, 이 사양이 지속, 제거, 업데이트데이터 가져오기 방법의 필요성을 설명한다면 누가 실제로 이러한 동작을 구축하는 것은 Hibernate이자 또 다른 ORMEclipseLink입니다. 🎜>.

히카리

Hikari연결 풀링 프레임워크로, 데이터베이스에 대한 연결을 관리하고 재사용할 수 있도록 열어 두는 역할을 담당합니다. , 이는 향후 요청을 위한 연결의 캐시로서, 데이터베이스에 더 빠르게 액세스하고 생성될 새 연결 수를 줄입니다.

Hikari, JPA 및 Hibernate 구성

성능 향상을 위해 수행할 수 있는 구성은 다음과 같습니다.

application.yml 사용:

spring:
  hikari:
    auto-commit: false
    connection-timeout: 250
    max-lifetime: 600000
    maximum-pool-size: 20
    minimum-idle: 10
    pool-name: master

  jpa:
    open-in-view: false
    show-sql: true
    hibernate:
      ddl-auto: none
    properties:
      hibernate.connection.provider_disables_autocommit: true
      hibernate.generate_statistics: true

application.properties 사용:

spring.datasource.hikari.auto-commit=false
spring.datasource.hikari.connection-timeout=50
spring.datasource.hikari.max-lifetime=600000
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.pool-name=master

spring.datasource.jpa.open-in-view=false
spring.datasource.jpa.show-sql=true

spring.datasource.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true

이제 옵션을 간략하게 요약해 보겠습니다.

히카리

  • spring.datasource.hikari.auto-commit: false인 경우 연결 풀에서 반환된 모든 연결은 자동 커밋이 비활성화된 상태로 제공됩니다.

  • spring.datasource.hikari.connection-timeout: 클라이언트가 에서 연결을 기다리는 시간(밀리초)입니다. 클라이언트를 무한정 기다리기보다는 짧은 시간 초과를 설정하여 빠르게 실패하고 오류 메시지를 반환하는 것이 바람직합니다.

  • spring.datasource.hikari.max-lifetime: 연결이 활성 상태로 유지될 수 있는 최대 시간입니다. 오랫동안 활성화된 연결은 공격에 더 취약하므로 연결 문제로 인한 실패를 방지하고 보안을 강화하려면 이 매개변수를 구성하는 것이 중요합니다.

  • spring.datasource.hikari.maximum-pool-size: 유휴 연결과 사용 중인 연결을 포함한 의 최대 크기로, 데이터베이스에 대한 최대 활성 연결 수를 결정합니다. 풀이 이 제한에 도달하고 유휴 연결이 없는 경우 getConnection()에 대한 호출은 실패하기 전에 최대 connectionTimeout밀리초 동안 차단됩니다.

    • 많은 사람들이 50, 70, 심지어 100을 설정하면 훌륭한 성능을 얻을 것이라고 생각하기 때문에 적절한 값을 찾는 것이 중요합니다. 이상적인 값은 스레드 수인 최대 20을 갖는 것입니다. 연결을 사용하여 병렬로 실행합니다.
    • 값이 높을수록 데이터베이스에서 이러한 연결을 관리하기가 더 어려워지고 이러한 모든 연결을 사용하기에 충분한 처리량을 확보하지 못할 가능성이 높습니다.
    • RDBMS(관계형 데이터베이스 관리 시스템)의 관점에서 보면 자체적으로 개방형 연결을 유지하는 것이 어렵다는 점을 이해하는 것이 중요합니다. 연결합니다.
  • spring.datasource.hikari.minimum-idle: 수요가 낮을 때 풀이 유지하는 최소 연결 수입니다. 풀은 연결을 최대 10개까지 줄이고 필요에 따라 다시 만들 수 있습니다. 그러나 최대 성능과 수요 급증에 대한 더 나은 대응을 위해 Hikari가 고정 크기 풀로 작동할 수 있도록 이 값을 설정하지 않는 것이 좋습니다. 기본값: spring.datasource.hikari.maximum-pool-size와 동일

  • spring.datasource.hikari.pool-name: pool 연결에 대한 사용자 정의 이름이며 주로 레지스트리 관리 콘솔과 JMX에 표시되어 을 식별합니다. 풀 및 해당 설정.

JPA

  • spring.datasource.jpa.open-in-view: OSIV(Open Session In View)가 활성화되면 요청 전체에서 세션이 유지됩니다. @Transactional 주석 없이. 이는 요청이 끝날 때까지 세션이 데이터베이스에 대한 연결을 유지하므로 애플리케이션 응답 부족과 같은 성능 문제가 발생할 수 있습니다.

  • spring.datasource.jpa.show-sql: 애플리케이션에서 실행 중인 SQL 로그를 표시합니다. 일반적으로 개발에서는 활성화된 상태로 두고 프로덕션에서는 비활성화합니다.

  • spring.datasource.jpa.hibernate.ddl-auto: 데이터베이스 스키마와 관련하여 Hibernate의 동작을 구성합니다. 다음 값을 가질 수 있습니다:

    • 없음: 아무것도 하지 않습니다. 은행의 스키마를 수동으로 관리합니다.
    • 유효성 검사: 데이터베이스 스키마의 유효성을 검사하지만 변경하지는 않습니다. 이는 현재 스키마가 매핑한 엔터티와 일치하는지 확인하는 데 유용합니다.
    • 업데이트: 엔터티의 변경 사항을 반영하도록 데이터베이스 스키마를 업데이트합니다.
    • create: 스키마 데이터베이스를 생성합니다. 스키마가 이미 존재하는 경우 제거하고 다시 생성합니다.
    • create-drop: 데이터베이스에서 스키마를 생성하고 애플리케이션이 종료되면 스키마를 제거합니다. 각 테스트마다 깨끗한 데이터베이스를 원하는 테스트에 유용합니다.
  • spring.jpa.properties.hibernate.generate_statistics: 쿼리 실행 시간, 실행된 쿼리 수, 기타 메트릭 등 Hibernate에 대한 자세한 정보를 수집하는 역할을 합니다.

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Hibernate공급자의 자동 커밋을 비활성화했음을 알립니다. (PostgreSQL, MySQL 등). Hibernateauto-commit이 활성화되었는지 여부를 확인하기 위해 에서 연결을 얻어야 하기 때문에 이는 성능에 영향을 미칩니다. . , 그가 하는 모든 거래에 대해.

이것으로 두 번째 기사를 마치겠습니다. 존재하는 모든 설정이 성능에 관한 것은 아니지만 실제로 영향을 미치는 설정은 auto-commit풀 크기와 같은 Hikari 설정입니다. , JPAHibernate, 예: OSIV(Open Session In View) 공급업체에서 자동 커밋을 비활성화했음을 알려드립니다.

다음 부분에서는 JVM(Java Virtual Machine) 리소스를 절약하기 위해 예외를 구성하는 방법과 예외를 구성하는 방법에 대해 설명합니다.

참고자료:

  • https://en.wikipedia.org/wiki/Jakarta_Persistence
  • https://www.ibm.com/docs/pt-br/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cejb_persistence.htm
  • https://github.com/brettwooldridge/HikariCP
  • https://github.com/corona-warn-app/cwa-server/issues/556
  • https://medium.com/@rafaelralf90/open-session-in-view-is-evil-fd9a21645f8e

위 내용은 Spring Boot 애플리케이션의 성능 향상 - 2부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.