← Bütün Patternlər
👑

Leader Election

Eyni servisin çoxlu nüsxəsindən yalnız birini Lider seçərək bəzi işləri (Cron, Batch) yalnız onun etməsini təmin etmək.

🎯
Nə üçün lazımdır?

3 nüsxə var, amma SMS göndərmə cron-u yalnız 1 nüsxə işlətməlidir. Əks halda istifadəçiyə 3 eyni SMS gedər!

🔒
Distributed Lock

Redis/ZooKeeper vasitəsilə yalnız bir nüsxə lock alır və Lider olur. Digərləri Follower qalır, gözləyir.

🛠️
Alətlər

Redis (Redisson Lock), ZooKeeper, etcd, ShedLock (Spring), Kubernetes Leader Election.

İNTERAKTİV

Vizual İzah

Mərhələ {{ currentStep + 1 }}: {{ steps[currentStep].title }}

🧠
Coordinator (Redis)
⚡ Lock istəkləri gəlir!
👑
1
Instance 1
{{ leader === 1 ? '(LİDER)' : '(Follower)' }}
💥 CRASH
⚙️ Cron İşləyir
👑
2
Instance 2
{{ leader === 2 ? '(LİDER)' : '(Follower)' }}
⚙️ Cron İşləyir
3
Instance 3
(Follower)
JAVA

Kod Nümunəsi — ShedLock

ScheduledTasks.java
// ShedLock ilə — yalnız 1 instance lock alır və işi görür
@Component
public class ScheduledTasks {

    @Scheduled(cron = "0 0 0 * * *")  // Hər gecə 00:00
    @SchedulerLock(
        name = "sendDailySms",
        lockAtMostFor = "PT30M",     // Maks 30 dəq lock saxla
        lockAtLeastFor = "PT5M"      // Min 5 dəq lock saxla
    )
    public void sendDailySms() {
        // Bu kod yalnız 1 instance-da icra olunur!
        // Digər 2 nüsxə lock ala bilmir → skip edir
        smsService.sendDailyNotifications();
    }
}

// Redis-dən lock alan provider
@Bean
public LockProvider lockProvider(RedisConnectionFactory conn) {
    return new RedisLockProvider(conn);
}
✅ Üstünlükləri
  • Dublikat iş icrasının qarşısını alır
  • Avtomatik failover — lider çöksə yenisi seçilir
  • ShedLock çox sadə implementasiyadır
⚠️ Riskləri
  • Coordinator (Redis) çöksə seçim mümkün olmaz
  • Split-brain riski (2 lider eyni anda)
  • Lock timeout düzgün seçilməldir