Spring Boot アプリケーションのパフォーマンスの向上 - パート II

PHPz
リリース: 2024-08-28 06:35:06
オリジナル
576 人が閲覧しました

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

この記事の最初の部分では、TomcatUndertow に置き換えて、アプリケーションのパフォーマンスを向上させる方法を学びました。データ圧縮を有効にして構成することに加えて、ネットワーク上を移動する HTTP 応答のサイズを削減するための高性能 Web サーバー。

ここで、永続化の部分で Spring Boot アプリケーションのパフォーマンスを向上させる方法について説明しますが、その前に、JPAHibernate、および Hikari.

JPA

JPA または

Java Persistence API (後に Jakarta Persistence に名前変更されました) は、共通のデータ永続フレームワークのインターフェース。

JPA 仕様は、ベンダー固有のマッピング実装に依存するのではなく、内部的にオブジェクト リレーショナル マッピングを定義します。

休止状態

Hibernate は、JPA 仕様の具体的な実装を行う ORM フレームワークの 1 つです。言い換えれば、この仕様で、永続化削除更新、およびデータのフェッチのメソッドの必要性が説明されている場合、誰が行うのでしょうか。これらの動作を実際に構築するのは、Hibernate と、別の ORM である EclipseLink です。 🎜>. ヒカリ

Hikari接続プーリング フレームワークであり、データベースへの接続を管理し、再利用できるように接続を開いた状態に保ちます。 、これは将来のリクエストのための接続のキャッシュであり、データベースへのアクセスが高速になり、作成される新しい接続の数が減ります。 ヒカリ、JPA、および休止状態の構成

パフォーマンスを向上させるために実行される可能性のある構成は次のとおりです:

application.yml の使用:


application.properties の使用:
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=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
    • (リレーショナル データベース管理システム) の観点からは、それ自体とのオープンな接続を維持するのは困難であることを理解することが重要です。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 の動作を構成します。次の値を指定できます:

    • none: 何もしません。私たちは銀行のスキーマを手動で管理します。
    • validate: データベース スキーマ を検証しますが、変更は行いません。これは、現在のスキーマがマッピングしたエンティティと一致していることを確認するのに役立ちます。
    • update: データベース スキーマ を更新して、エンティティの変更を反映します。
    • create: データベーススキーマを作成します。 スキーマがすでに存在する場合は、削除して再度作成します。
    • create-drop: データベースから スキーマ を作成し、アプリケーションの終了時に スキーマ を削除します。各テストでクリーンなデータベースが必要なテストに役立ちます。
  • spring.jpa.properties.hibernate.generate_statistics: クエリの実行時間、実行されたクエリの数、その他のメトリクスなど、Hibernate に関する詳細情報を収集するのに役立ちます。

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Hibernate に、プロバイダーの 自動コミット を無効にしたことを通知します。 (PostgreSQLMySQL など)。 Hibernate は、auto-commit が有効かどうかを知るために pool から接続を取得する必要があるため、これはパフォーマンスに影響します。 . 、彼が行うすべての取引に対して。

これで記事の後半を閉じます。存在するすべての設定がパフォーマンスに関するものではありませんが、実際に影響を与えるのは、自動コミットプール サイズ などの Hikari 設定です。 、JPA および Hibernate のような OSIV (Open Session In View)そして、プロバイダからの自動コミットを無効にしたことをお知らせします。

次のパートでは、例外と、JVM (Java 仮想マシン) リソースを節約するための例外の設定方法について説明します。

参考文献:

  • 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 アプリケーションのパフォーマンスの向上 - パート IIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート