Heim  >  Artikel  >  Java  >  Verbesserung der Leistung von Spring Boot-Anwendungen – Teil II

Verbesserung der Leistung von Spring Boot-Anwendungen – Teil II

PHPz
PHPzOriginal
2024-08-28 06:35:06530Durchsuche

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

Im ersten Teil dieses Artikels haben wir gelernt, wie wir die Leistung unserer Anwendungen verbessern können, indem wir Tomcat durch Undertow ersetzt haben ein Hochleistungs-Webserver, zusätzlich zur Aktivierung und Konfiguration der Datenkomprimierung, um die Größe von HTTP-Antworten zu reduzieren, die über das Netzwerk übertragen werden.

Jetzt werden wir darüber sprechen, wie die Leistung von Spring Boot-Anwendungen im Persistenzteil verbessert werden kann, aber zuerst müssen wir verstehen, was JPA, Hibernate und Hikari.

JPA

JPA oder

Java Persistence API, das später in Jakarta Persistence umbenannt wurde, ist ein Java-Sprachstandard, der eine gemeinsame Sprache beschreibt Schnittstelle für Datenpersistenz-Frameworks.

Die

JPA-Spezifikation definiert die objektrelationale Zuordnung intern, anstatt sich auf herstellerspezifische Zuordnungsimplementierungen zu verlassen.

Überwintern

Hibernate ist eines der ORM-Frameworks, das die konkrete Umsetzung der JPA-Spezifikation ermöglicht. Mit anderen Worten: Wenn diese Spezifikation die Notwendigkeit von Methoden zum Peristieren, Entfernen, Aktualisieren und Datenabrufen beschreibt, wer wird das tun? Der eigentliche Aufbau dieser Verhaltensweisen ist Hibernate sowie EclipseLink, was ein weiteres ORM . Hikari

Hikari ist ein Verbindungspooling-Framework, das für die Verwaltung von Verbindungen zur Datenbank verantwortlich ist und diese offen hält, damit sie wiederverwendet werden können Es handelt sich um einen Cache von Verbindungen für zukünftige Anfragen, der den Zugriff auf die Datenbank beschleunigt und die Anzahl der neu zu erstellenden Verbindungen reduziert. Konfigurieren von Hikari, JPA und Hibernate

Eine Konfiguration, die wir möglicherweise durchführen, um die Leistung zu verbessern, ist wie folgt:

Verwenden von application.yml:


Anwendung.properties verwenden:
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


Lassen Sie uns nun eine kurze Zusammenfassung der Optionen geben:
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

Hikari

    spring.datasource.hikari.auto-commit: Wenn „false“, wird jede vom
  • Verbindungspool

    zurückgegebene Verbindung mit deaktiviertem Auto-Commit geliefert.

  • spring.datasource.hikari.connection-timeout: Zeit in Millisekunden, die der Client auf eine Verbindung vom
  • Pool

    wartet. Es ist vorzuziehen, ein kurzes Timeout festzulegen, um schnell fehlzuschlagen und eine Fehlermeldung zurückzugeben, anstatt den Client auf unbestimmte Zeit warten zu lassen.

  • spring.datasource.hikari.max-lifetime: Maximale Zeit, die eine Verbindung aktiv bleiben kann. Die Konfiguration dieses Parameters ist entscheidend, um Ausfälle aufgrund problematischer Verbindungen zu vermeiden und die Sicherheit zu erhöhen, da Verbindungen, die über einen längeren Zeitraum aktiv sind, anfälliger für Angriffe sind.
  • spring.datasource.hikari.maximum-pool-size: Maximale Größe des
  • Pools

    , einschließlich inaktiver und verwendeter Verbindungen, wodurch die maximale Anzahl aktiver Verbindungen zur Datenbank bestimmt wird. Wenn der Pool dieses Limit erreicht und keine inaktiven Verbindungen vorhanden sind, werden Aufrufe von getConnection() bis zu connectionTimeout Millisekunden lang blockiert, bevor sie fehlschlagen.

    Es ist wichtig, einen geeigneten Wert zu finden, da viele Leute glauben, dass sie eine großartige Leistung erzielen, wenn sie 50, 70 oder sogar 100 einstellen. Ideal ist ein Maximum von 20, was der Anzahl der
      Threads
    • entspricht parallel über Verbindungen. Je höher der Wert, desto schwieriger wird es für die Datenbank, diese Verbindungen zu verwalten, und höchstwahrscheinlich können wir nicht über genügend
    • Durchsatz
    • verfügen, um alle diese Verbindungen zu nutzen. Es ist wichtig zu verstehen, dass es aus Sicht des
    • RDBMS
    • (Relationales Datenbankverwaltungssystem) schwierig ist, eine offene Verbindung mit sich selbst aufrechtzuerhalten, stellen Sie sich n Anzahl von vor Verbindungen.
  • spring.datasource.hikari.minimum-idle: Mindestanzahl von Verbindungen, die der Pool bei geringer Nachfrage aufrechterhält. Der Pool kann Verbindungen auf bis zu 10 reduzieren und diese bei Bedarf neu erstellen. Für maximale Leistung und eine bessere Reaktion auf Nachfragespitzen wird jedoch empfohlen, diesen Wert nicht festzulegen, damit Hikari als Pool mit fester Größe fungieren kann. Standard: wie spring.datasource.hikari.maximum-pool-size.
  • spring.datasource.hikari.pool-name: Benutzerdefinierter Name für die Verbindung pool und erscheint hauptsächlich in Registrierungsverwaltungskonsolen und JMX zur Identifizierung von Pools und deren Einstellungen.

JPA

  • spring.datasource.jpa.open-in-view: Wenn OSIV (Open Session In View) aktiviert ist, wird eine Sitzung sogar während der gesamten Anfrage aufrechterhalten ohne die @Transactional-Annotation. Dies kann zu Leistungsproblemen wie fehlenden Anwendungsantworten führen, da die Sitzung die Verbindung zur Datenbank bis zum Ende der Anfrage aufrechterhält.

  • spring.datasource.jpa.show-sql: Zeigt das SQL-Protokoll an, das in unserer Anwendung ausgeführt wird. Wir lassen es in der Entwicklung im Allgemeinen aktiviert, in der Produktion jedoch deaktiviert.

  • spring.datasource.jpa.hibernate.ddl-auto: Konfiguriert das Verhalten von Hibernate in Bezug auf das Datenbank-Schema. Es kann die folgenden Werte haben:

    • none: Tut nichts. Wir verwalten das Schema der Bank manuell.
    • validieren: Validiert das Datenbank-Schema, nimmt jedoch keine Änderungen vor. Dies ist nützlich, um sicherzustellen, dass das aktuelle Schema mit den von uns zugeordneten Entitäten übereinstimmt.
    • Update: Aktualisiert das Datenbank-Schema, um Änderungen in Entitäten widerzuspiegeln.
    • create: Erstellt die Datenbank schema. Wenn das Schema bereits vorhanden ist, wird es entfernt und erneut erstellt.
    • create-drop: Erstellt das Schema aus der Datenbank und entfernt das Schema, wenn die Anwendung beendet wird. Nützlich für Tests, bei denen wir bei jedem Test eine saubere Datenbank wünschen.
  • spring.jpa.properties.hibernate.generate_statistics: Dient zum Sammeln detaillierter Informationen über Hibernate, wie z. B. Abfrageausführungszeiten, Anzahl der ausgeführten Abfragen und andere Metriken.

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Informiert Hibernate darüber, dass wir Auto-Commit von Anbietern deaktiviert haben (PostgreSQL, MySQL usw.). Dies wirkt sich auf die Leistung aus, da Hibernate eine Verbindung vom Pool herstellen muss, um zu wissen, ob Auto-Commit aktiviert ist oder nicht . , für jede Transaktion, die er tätigt.

Damit schließen wir den zweiten Teil des Artikels. Nicht alle vorhandenen Einstellungen betrafen die Leistung, aber diejenigen, die sich wirklich auswirken, sind die Hikari-Einstellungen wie Auto-Commit und Pool-Größe , die von JPA und Hibernate wie OSIV (Open Session In View) und informieren Sie darüber, dass wir Auto-Commit von Anbietern deaktiviert haben.

Im nächsten Teil werden wir über Ausnahmen sprechen und wie sie konfiguriert werden können, um JVM (Java Virtual Machine) Ressourcen zu sparen.

Referenzen:

  • 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

Das obige ist der detaillierte Inhalt vonVerbesserung der Leistung von Spring Boot-Anwendungen – Teil II. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn