Rumah  >  Artikel  >  Java  >  Meningkatkan prestasi aplikasi Spring Boot - Bahagian II

Meningkatkan prestasi aplikasi Spring Boot - Bahagian II

PHPz
PHPzasal
2024-08-28 06:35:06598semak imbas

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

Dalam bahagian pertama artikel ini, kami mempelajari cara meningkatkan prestasi aplikasi kami, menggantikan Tomcat dengan Undertow, iaitu pelayan web berprestasi tinggi, selain mendayakan dan mengkonfigurasi pemampatan data, untuk mengurangkan saiz respons HTTP yang bergerak melalui rangkaian.

Sekarang, kita akan bercakap tentang cara meningkatkan prestasi aplikasi Spring Boot dalam bahagian kegigihan, tetapi pertama-tama kita perlu memahami apa JPA, Hibernate dan Hikari.

JPA

JPA atau Java Persistence API, yang kemudiannya dinamakan semula kepada Jakarta Persistence, ialah piawaian bahasa Java yang menerangkan perkara biasa antara muka untuk rangka kerja kegigihan data.

Spesifikasi JPA mentakrifkan pemetaan hubungan objek secara dalaman, dan bukannya bergantung pada pelaksanaan pemetaan khusus vendor.

Hibernate

Hibernate ialah salah satu daripada rangka kerja ORM yang menjadikan pelaksanaan konkrit spesifikasi JPA, Dalam erti kata lain, jika spesifikasi ini menerangkan keperluan untuk kaedah berterusan, alih keluar, kemas kini dan mengambil data, siapa yang akan sebenarnya membina tingkah laku ini ialah Hibernate, serta EclipseLink, iaitu satu lagi ORM .

Hikari

Hikari ialah rangka kerja pengumpulan sambungan, yang bertanggungjawab menguruskan sambungan ke pangkalan data, memastikannya terbuka supaya ia boleh digunakan semula, iaitu , ia merupakan cache sambungan untuk permintaan masa hadapan, menjadikan akses kepada pangkalan data lebih pantas dan mengurangkan bilangan sambungan baharu yang akan dibuat.

Mengkonfigurasi Hikari, JPA dan Hibernate

Konfigurasi yang mungkin kami lakukan untuk meningkatkan prestasi adalah seperti berikut:

Menggunakan 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

Menggunakan 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

Sekarang mari kita berikan ringkasan ringkas tentang pilihan:

Hikari

  • spring.datasource.hikari.auto-commit: Jika palsu, setiap sambungan yang dikembalikan oleh kolam sambungan akan disertakan dengan autokomit dilumpuhkan.

  • spring.datasource.hikari.connection-timeout: Masa, dalam milisaat, pelanggan akan menunggu sambungan daripada pool. Adalah lebih baik untuk menetapkan tamat masa yang singkat untuk gagal dengan cepat dan mengembalikan mesej ralat, daripada memastikan pelanggan menunggu selama-lamanya.

  • spring.datasource.hikari.max-lifetime: Masa maksimum sambungan boleh kekal aktif. Mengkonfigurasi parameter ini adalah penting untuk mengelakkan kegagalan akibat sambungan yang bermasalah dan meningkatkan keselamatan, kerana sambungan yang aktif untuk masa yang lama lebih terdedah kepada serangan.

  • spring.datasource.hikari.maximum-pool-size: Saiz maksimum pool, termasuk sambungan melahu dan sedang digunakan, menentukan bilangan maksimum sambungan aktif ke pangkalan data. Jika kolam mencapai had ini dan tiada sambungan melahu, panggilan ke getConnection() akan disekat sehingga connectionTimeout milisaat sebelum gagal.

    • Mencari nilai yang sesuai adalah penting, kerana ramai orang berpendapat mereka akan mendapat prestasi yang hebat dengan menetapkan 50, 70 atau bahkan 100. Idealnya ialah mempunyai maksimum 20, iaitu bilangan benang selari menggunakan sambungan.
    • Semakin tinggi nilai, semakin sukar bagi pangkalan data untuk mengurus sambungan ini dan kemungkinan besar kami tidak akan dapat mempunyai throughput yang mencukupi untuk menggunakan semua sambungan ini.
    • Adalah penting untuk memahami bahawa dari sudut pandangan RDBMS (Sistem Pengurusan Pangkalan Data Hubungan) adalah sukar untuk mengekalkan sambungan terbuka dengan dirinya sendiri, bayangkan n bilangan sambungan.
  • spring.datasource.hikari.minimum-idle: Bilangan sambungan minimum yang dikekalkan oleh kumpulan apabila permintaan rendah. Kolam renang boleh mengurangkan sambungan sehingga 10 dan menciptanya semula mengikut keperluan. Walau bagaimanapun, untuk prestasi maksimum dan tindak balas yang lebih baik terhadap lonjakan permintaan, adalah disyorkan untuk tidak menetapkan nilai ini, membolehkan Hikari berfungsi sebagai kumpulan bersaiz tetap. Lalai: sama seperti spring.datasource.hikari.maximum-pool-size.

  • spring.datasource.hikari.pool-name: Nama yang ditentukan pengguna untuk sambungan pool dan muncul terutamanya dalam konsol pengurusan pendaftaran dan JMX untuk mengenal pasti kolam dan tetapannya.

JPA

  • spring.datasource.jpa.open-in-view: Apabila OSIV (Open Session In View) didayakan, sesi dikekalkan sepanjang permintaan , malah tanpa anotasi @Transactional. Ini boleh menyebabkan masalah prestasi, seperti kekurangan respons aplikasi, kerana sesi mengekalkan sambungan ke pangkalan data sehingga akhir permintaan.

  • spring.datasource.jpa.show-sql: Memaparkan log SQL yang sedang dilaksanakan dalam aplikasi kami. Kami biasanya membiarkannya didayakan dalam pembangunan, tetapi dilumpuhkan dalam pengeluaran.

  • spring.datasource.jpa.hibernate.ddl-auto: Mengkonfigurasikan gelagat Hibernate berhubung dengan pangkalan data skema. Ia boleh mempunyai nilai berikut:

    • tiada: Tidak melakukan apa-apa. Kami menguruskan skema bank secara manual.
    • validate: Mengesahkan pangkalan data skema, tetapi tidak membuat perubahan. Ini berguna untuk memastikan skema semasa bersetuju dengan entiti yang telah kami petakan.
    • kemas kini: Mengemas kini pangkalan data skema untuk menggambarkan perubahan dalam entiti.
    • cipta: Mencipta pangkalan data skema. Jika skema sudah wujud, ia akan mengalih keluar dan menciptanya semula.
    • create-drop: Mencipta skema daripada pangkalan data dan, apabila aplikasi tamat, mengalih keluar skema. Berguna untuk ujian, di mana kami mahukan pangkalan data yang bersih dengan setiap ujian.
  • spring.jpa.properties.hibernate.generate_statistics: Berfungsi untuk mengumpulkan maklumat terperinci tentang Hibernate, seperti masa pelaksanaan pertanyaan, bilangan pertanyaan yang dilaksanakan dan metrik lain.

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Memaklumkan Hibernate bahawa kami telah melumpuhkan autokomit daripada penyedia (PostgreSQL, MySQL, dll). Ini memberi kesan kepada prestasi kerana Hibernate perlu mendapatkan sambungan daripada pool untuk mengetahui sama ada autokomit didayakan atau tidak . , untuk setiap transaksi yang dia buat.

Dengan ini, kami menutup bahagian kedua artikel itu. Bukan semua tetapan yang hadir adalah mengenai prestasi, tetapi tetapan yang benar-benar memberi impak ialah tetapan Hikari seperti komit automatik dan saiz kolam , JPA dan Hibernate seperti OSIV (Sesi Terbuka Dalam Pandangan) dan memaklumkan anda bahawa kami telah melumpuhkan komit automatik daripada pembekal.

Dalam bahagian seterusnya kita akan bercakap tentang pengecualian dan cara ia boleh dikonfigurasikan, untuk menyimpan sumber JVM (Java Virtual Machine).

Rujukan:

  • https://ms.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

Atas ialah kandungan terperinci Meningkatkan prestasi aplikasi Spring Boot - Bahagian II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn