«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Улучшение производительности приложений Spring Boot. Часть II

Улучшение производительности приложений Spring Boot. Часть II

Опубликовано 8 ноября 2024 г.
Просматривать:309

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

В первой части этой статьи мы узнали, как повысить производительность наших приложений, заменив Tomcat на Undertow, что высокопроизводительный веб-сервер, помимо включения и настройки сжатия данных, для уменьшения размера HTTP-ответов, передаваемых по сети.

Теперь мы поговорим о том, как улучшить производительность приложения Spring Boot в части постоянства, но сначала нам нужно понять, что такое JPA, Hibernate и Hikari.

JPA

JPA или Java Persistence API, который позже был переименован в Jakarta Persistence, представляет собой стандарт языка Java, описывающий общий интерфейс для систем сохранения данных

Спецификация

JPA определяет реляционное сопоставление объектов внутри компании, а не полагается на реализации сопоставления, специфичные для конкретного поставщика.

Спящий режим

Hibernate — это одна из ORM фреймворков, которая обеспечивает конкретную реализацию спецификации JPA. то есть, если в этой спецификации описано, что необходимы методы для сохранения, удаления, обновления и извлечения данных, кто будет на самом деле созданием такого поведения является Hibernate, а также EclipseLink, который является еще одним ORM .

Хикари

Hikari — это инфраструктура пула соединений, которая отвечает за управление соединениями с базой данных, сохраняя их открытыми для возможности повторного использования, т.е. это кэш соединений для будущих запросов, ускоряющий доступ к базе данных и уменьшающий количество новых создаваемых соединений.

Настройка Hikari, JPA и Hibernate

Для повышения производительности мы можем выполнить следующую конфигурацию:

Использование application.yml:


весна: Хикари: автофиксация: ложь тайм-аут соединения: 250 Максимальное время жизни: 600000 максимальный размер пула: 20 минимальный холостой ход: 10 имя пула: мастер JPA: открытый вид: ложь шоу-sql: правда спящий режим: ddl-авто: нет характеристики: hibernate.connection.provider_disables_autocommit: правда 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.имя-пула=мастер Spring.datasource.jpa.open-in-view=false Spring.datasource.jpa.show-sql=истина Spring.datasource.jpa.hibernate.ddl-auto = нет 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, то есть количество
    • потоков параллельно с использованием соединений.
    • Чем выше значение, тем сложнее базе данных будет управлять этими соединениями, и, скорее всего, у нас не будет достаточной
    • пропускной способности для использования всех этих соединений.
    • Важно понимать, что с точки зрения
    • СУРБД (Relational Database Management System) сложно поддерживать открытое соединение само с собой, представьте себе n количество соединений .
  • 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 (Открыть сеанс в представлении), сеанс сохраняется на протяжении всего запроса, даже без аннотации @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 о том, что мы отключили автоматическую фиксацию для провайдеров (PostgreSQL, MySQL и т. д.). Это влияет на производительность, поскольку Hibernate потребуется получить соединение из пула, чтобы узнать, включена ли автоматическая фиксация или нет. , за каждую транзакцию, которую он совершает.

На этом мы завершаем вторую часть статьи. Не все имеющиеся настройки касались производительности, но действительно влияют настройки

Hikari, такие как автоматическая фиксация и размер пула , те из JPA и Hibernate, например 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