Changes between Version 1 and Version 2 of AdvancedApplicationDevelopment
- Timestamp:
- 05/07/26 13:21:43 (3 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedApplicationDevelopment
v1 v2 1 = Напреден Апликативен Развој - Оптимизација на Backend-от = 2 3 == Проблем == 4 5 При зголемен број на корисници и захтеви, backend апликацијата покажуваше слаба перформанса поради: 6 7 1. Недостаток на соодветна конфигурација на connection pooling (премал pool size од 2) 8 2. Непотребни транзакции на read-only операции 9 3. N+1 query проблем во WeightService (една query per row за training sessions) 10 4. Неоптимална батching на operations во DisciplineService 11 12 == Решение == 1 = Напреден Апликативен Развој 13 2 14 3 === 1. Pooling - Hikari Configuration === … … 16 5 Pooling претставува процес каде што не се отвара нова конекција за секој request, туку има константен број на отворени конекције кои се доделуваат на различни requests. Со ова значително се намалува времето по request бидејќи не се губи време за отварање на нова и затворање на стара конекција. 17 6 18 Во projectот ова го правам со Hikari Pool во Java Spring Boot. Hikari е автоматски вклучено во Spring Boot преку spring-boot-starter-web библиотеката.7 Во мојот проект ова го правам со Hikari Pool во Java Spring Boot. Hikari е автоматски вклучено во Spring Boot преку spring-boot-starter-web библиотеката. 19 8 20 9 Пред (конзервативна конфигурација за SSH tunnel): … … 26 15 След (поголем default pool за поголем број корисници): 27 16 {{{ 28 # Максимален број на конекции (default 5, може да се override преку env)29 spring.datasource.hikari.maximum-pool-size=${SPRING_DATASOURCE_HIKARI_MAX_POOL_SIZE: 5}17 # Максимален број на конекции (default 20, може да се override преку env) 18 spring.datasource.hikari.maximum-pool-size=${SPRING_DATASOURCE_HIKARI_MAX_POOL_SIZE:20} 30 19 31 20 # Минимум конекции кои секогаш ќе се спремни за да преземат нови requests 32 spring.datasource.hikari.minimum-idle=${SPRING_DATASOURCE_HIKARI_MIN_IDLE: 1}21 spring.datasource.hikari.minimum-idle=${SPRING_DATASOURCE_HIKARI_MIN_IDLE:5} 33 22 34 23 # Колку долго да се чека за конекција пред requestot да е одбиен … … 261 250 }}} 262 251 263 == Резултати ==264 265 По оптимизацијата:266 267 ✓ Hikari Pool зголемен од 2 → 5 конекции268 ✓ 15+ методи означени со @Transactional(readOnly = true)269 ✓ N+1 query решен во WeightService (90% намалување)270 ✓ DisciplineService оптимизиран со batch insertions (80% намалување)271 ✓ Сите файлови компајлирани без errors272 ✓ Backend тестови успешно поминаа273 274 == Заклучок ==275 276 Backend апликацијата е оптимизирана за поголем број на конкурентни корисници, брже read-операции, и намалена database load.
