Bütün yazılara qayıt
Yaddaş vərəqləri

Spring Boot: production-a çıxış yoxlama siyahısı

Servis işə düşür. Bəs trafik artanda, baza yavaşıyanda və yeni versiya yerləşdiriləndə necə davranır? Yoxlamaları nəticə ilə birlikdə planla.

8 dəq. oxu
-
Yaşıl təsdiq işarələri olan yoxlama siyahısı, serverlər, verilənlər bazası, təhlükəsizlik qalxanı və monitorinq qrafiki.

“Hazırdır” sözünün arxasında sübut olsun

Bu siyahını hər sətri avtomatik işarələnən şablon kimi istifadə etmə. Hər yoxlama üçün mühit, nəticə və məsul şəxs yaz. Məsələn: “readiness var” yox, “instansiya hazır olmadan trafik almır; staging-də 26 sentyabrda yoxlanılıb”.

Buradakı konfiqurasiya nümunələri Spring Boot 3.5 üçündür. Öz versiyan, reverse proxy və yerləşdirmə mühitin üçün davranışı ayrıca sına. Siyahının bütün bəndlərinin hər servisə eyni formada tətbiqi tələb olunmur; tətbiq edilməyən bəndin səbəbini qeyd et.

İcazə sərhədini serverdə yoxla

  • Qonaq, adi istifadəçi və admin üçün eyni endpoint-i ayrıca çağır. UI-da düyməni gizlətmək icazə yoxlaması deyil.
  • Başqa istifadəçinin resurs ID-sini göndər: sifariş, fayl və profil məlumatı açılmamalıdır.
  • Secret-ləri repository və container image-dən çıxar. Log, xəta cavabı və support ekranlarında da görünmədiyini yoxla.
  • CORS üçün lazım olan origin-ləri açıq göstər. Cookie əsaslı girişdə CSRF strategiyasını da sına; CORS onu əvəz etmir.
  • Login və parol bərpası kimi endpoint-lərə ölçülmüş sorğu məhdudiyyəti qoy. Proxy arxasında real client IP-nin etibarlı yolla alındığını yoxla.

Actuator-u ayrıca səth hesab et. Public HTTP üzərindən yalnız lazım olan endpoint-ləri aç; daxili metriklərə isə ayrıca şəbəkə və icazə qaydası ver. env, heapdump və oxşar diaqnostika məlumatları public olmamalıdır.

Liveness və readiness ayrı suallardır

Liveness: bu prosesin işləməsi davam edə bilərmi? Readiness: bu instansiyaya indi yeni trafik göndərmək olarmı?

Baza müvəqqəti dayananda bütün tətbiqləri restart etmək bazanı bərpa etmir. Buna görə liveness yoxlamasını xarici servislərin sağlamlığından asılı etmə. Readiness-ə bazanı daxil etmək isə şüurlu qərardır: ortaq baza sıradan çıxsa, bütün instansiyalar trafikdən çıxa bilər.

management:
  endpoints:
    web:
      exposure:
        include: health
  endpoint:
    health:
      show-details: never
      probes:
        enabled: true
        add-additional-paths: true
server:
  shutdown: graceful
spring:
  lifecycle:
    timeout-per-shutdown-phase: 30s

Əlavə probe yolları əsas tətbiq portunda /livez və /readyz yoxlamalarını da açır. Yalnız ayrıca management portunun cavab verməsi istifadəçi sorğularının qəbul edildiyini sübut etmir. Proxy və security qaydalarında seçdiyin probe yolunun davranışını təsdiqlə.

YERLƏŞDİRMƏ MODELİ

İşləmək və hazır olmaq fərqlidir

Liveness modeliProses işləyir
Readiness modeliTrafik qəbul etmir
Davam edən sorğular
0

Proses işləyir, amma başlanğıc hazırlığı tamamlanmayıb. Yeni istifadəçi sorğusu göndərilmir.

1 / 4
Sadələşdirilmiş lifecycle modeli. Probe tezliyi, load balancer və termination vaxtı real mühitdə ayrıca yoxlanılır.

Gözləmənin və təkrar cəhdin sonu olsun

Bir sifariş sorğusunun ümumi büdcəsi 2 saniyədirsə, aşağı servisdə 3 dəfə 1 saniyə gözləmək bu büdcəyə sığmır. Connect timeout, cavab gözləmə vaxtı, təkrar cəhdlər və aradakı fasilələri birlikdə hesabla.

SsenariSınaqGözlənilən davranış
Aşağı servis cavab vermirStaging-də gecikmə əlavə etSorğu müəyyən vaxtda bitir; thread-lər sonsuz tutulmur
Ödənişdən sonra cavab itirEyni idempotency key ilə təkrar etİkinci ödəniş yaranmır
DB connection pool dolurTrafiki tədricən artırGözləmə məhduddur; xəta və saturation görünür
Asinxron növbə yığılırWorker-i müvəqqəti yavaşlatGecikmə ölçülür; yaddaş nəzarətsiz böyümür

Hər xətanı retry etmə. Səhv giriş və icazə xətası təkrarla düzəlmir. Keçici xəta üçün məhdud cəhd, artan fasilə və təsadüfi paylanma seç. Bir neçə qatın eyni anda retry etməsi yükü çoxalda bilər.

Migration və bərpa ayrıca sınaq tələb edir

Yeni versiyanı işə salmazdan əvvəl migration-ı production-a bənzər məlumat həcmi ilə yoxla. Boş bazada tez bitən indeks yaratma əməliyyatı böyük cədvəldə kilid və gecikmə yarada bilər.

Sxema dəyişikliklərini mərhələləndir: yeni sahəni əlavə et, köhnə və yeni kodla uyğun işlət, məlumatı doldur, sonra köhnə sahəni sil. Tətbiqi əvvəlki versiyaya qaytarmaq dağıdıcı migration-ı öz-özünə geri almır.

Backup faylının mövcudluğu kifayət etmir. Ayrı mühitdə bərpa et, bir neçə real sorğunu işlə və ölçülmüş bərpa vaxtını qeyd et. “Nə qədər məlumat itirə bilərik?” və “Nə vaxta qayıtmalıyıq?” suallarının cavabını servis sahibi ilə razılaşdır.

Xəta baş verməzdən əvvəl nəyi izləyəcəyini seç

Bir dashboard-da sorğu sayı, xəta nisbəti, gecikmə paylanması və resurs doluluğu olsun. Tək orta gecikmə yavaş istifadəçiləri gizlədə bilər; p95 və p99-u trafik həcmi ilə birlikdə izlə.

Biznes nəticəsini də ölç: uğurla yaranmış sifariş, uğursuz ödəniş, gecikmiş tapşırıq. HTTP 200 həmişə istifadəçinin işinin alındığını bildirmir.

Loglarda correlation ID saxla, amma token, parol və lazımsız şəxsi məlumatı yazma. Bir test sorğusunu girişdən aşağı servisə qədər izləyib trace əlaqəsini yoxla. Alert-in kimə çatdığını və həmin şəxsin hansı runbook-a baxacağını əvvəlcədən müəyyənləşdir.

Son sınaq: proses işləyərkən versiyanı dəyiş

  1. Uzun çəkən sorğu başladıb yerləşdirməni işə sal. Sorğunun tamamlandığını və yeni trafikin hazır instansiyaya getdiyini yoxla.
  2. Platformanın termination vaxtını tətbiqin shutdown büdcəsi və yönləndirmə gecikməsi ilə uyğunlaşdır.
  3. Bir instansiyanı dayandır. Qalanlarının yükü qəbul etdiyini, yeni instansiyanın hazırlanmasını və session davranışını sına.
  4. Əvvəlki image ilə rollback et. Sxema və mesaj formatlarının uyğun qaldığını təsdiqlə.
  5. Buraxılışdan sonra əvvəlki trafiklə müqayisə et: xəta nisbəti, p95, CPU, yaddaş və biznes metrikləri.

Yoxlama nəticələrini release qeydinə əlavə et. Növbəti buraxılışda eyni işləri yaddaşdan təkrarlamaq əvəzinə, avtomatlaşdırıla bilənləri pipeline-a keçir.

Mənbələr və əlavə oxu

01Spring Boot - Actuator və Kubernetes probe-ları02Spring Boot - Graceful shutdown03Google SRE - Monitorinqin dörd əsas siqnalı04AWS Builders’ Library - Timeout, retry və jitter