"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Spring Boot 애플리케이션의 성능 향상 - 2부

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

2024-11-08에 게시됨
검색:743

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

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

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

JPA

JPA 또는 Java Persistence API는 나중에 Jakarta Persistence로 이름이 바뀌었습니다. 데이터 지속성 프레임워크용 인터페이스

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

최대 절전 모드

HibernateJPA 사양을 구체적으로 구현하는 ORM 프레임워크 중 하나입니다. 즉, 이 사양이 지속, 제거하는 방법의 필요성을 설명하는 경우, 업데이트데이터 가져오기, 실제로 이러한 동작을 구축할 사람은 최대 절전 모드EclipseLink입니다. 는 또 다른 ORM.입니다.

히카리

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

Hikari, JPA 및 Hibernate 구성

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

application.yml 사용:


봄: 히카리: 자동 커밋: false 연결 시간 초과: 250 최대 수명: 600000 최대 풀 크기: 20 최소 유휴: 10 풀 이름: master JPA: 오픈 뷰: false 쇼-sql: 참 최대 절전 모드: ddl-auto: 없음 속성: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: 참
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=마스터 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:
  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
이제 옵션에 대해 간략하게 요약해 보겠습니다.

히카리

  • 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
    • (관계형 데이터베이스 관리 시스템)의 관점에서 자체적으로 개방형 연결을 유지하는 것이 어렵다는 점을 이해하는 것이 중요합니다. n개의 연결을 상상해 보세요. .
  • spring.datasource.hikari.minimum-idle: 수요가 낮을 때 풀이 유지하는 최소 연결 수입니다. 풀은 연결을 최대 10개까지 줄이고 필요에 따라 다시 만들 수 있습니다. 그러나 최대 성능과 수요 급증에 대한 더 나은 대응을 위해 Hikari가 고정 크기 풀로 작동할 수 있도록 이 값을 설정하지 않는 것이 좋습니다. 기본값: spring.datasource.hikari.maximum-pool-size.
  • 와 동일

  • spring.datasource.hikari.pool-name: 연결
  • 에 대한 사용자 정의 이름이며 주로 레지스트리 관리 콘솔과 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 등). Hibernate자동 커밋이 활성화되었는지 여부를 알기 위해 에서 연결을 얻어야 하기 때문에 이는 성능에 영향을 미칩니다. , 그가 하는 모든 거래에 대해.

  • 이것으로 두 번째 글을 마치겠습니다. 존재하는 모든 설정이 성능에 관한 것은 아니지만 실제로 영향을 미치는 설정은
자동 커밋

풀 크기와 같은 Hikari 설정입니다. , JPAHibernate는 다음과 같습니다. OSIV (보기에서 세션 열기) 공급자자동 커밋이 비활성화되었음을 알립니다. 다음 부분에서는

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
릴리스 선언문 이 기사는 https://dev.to/mathstylish/melhorando-o-desempenho-de-aplicacoes-spring-boot-parte-ii-nbi?1에 복제되어 있습니다. 침해 사항이 있는 경우, [email protected]으로 문의해 주십시오. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3