0Pricing
Microservices Communication Patterns (Saga, Circuit Breaker) · Pelajaran

Dasar-Dasar Pola Percobaan Ulang

Pelajari dasar-dasar pola percobaan ulang untuk mencoba kembali operasi yang gagal secara otomatis dan meningkatkan ketangguhan sistem.

Dasar-Dasar Pola Percobaan Ulang adalah pelajaran Microservices Communication Patterns (Saga, Circuit Breaker) gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Microservices Communication Patterns (Saga, Circuit Breaker), dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Microservices Communication Patterns (Saga, Circuit Breaker) mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Facing Temporary Glitches?

Imagine you're trying to send a message, but your internet connection blips for a second. What do you do?

You probably try again! This simple human behavior is the core idea behind the Retry Pattern in software.

What is the Retry Pattern?

The Retry Pattern is a fundamental resilience technique. It involves automatically re-attempting an operation that has failed.

It's used when we expect the failure to be transient, meaning temporary and likely to resolve itself shortly, such as a brief network outage or a temporary database lock.

Why Use Retries?

In distributed systems, services often depend on each other. Failures can occur for many reasons:

  • Network issues: A brief disconnection or high latency.
  • Resource contention: A database or service is temporarily overloaded.
  • Service restarts: A dependent service is briefly unavailable during an update.

Retries help your application recover gracefully from these hiccups without crashing or requiring manual intervention.

The Basic Retry Loop

At its simplest, the retry pattern works like this:

  1. Attempt an operation.
  2. If it fails, check if it's a retriable error.
  3. If retriable, increment a counter and try again.
  4. Stop after a certain number of attempts or if it succeeds.

Let's see a basic example without any delays yet.

Code: Simple Retry Logic

This code simulates an operation that fails twice before succeeding. Notice how the while loop keeps trying until it works or runs out of attempts.

public class Main {
  public static void main(String[] args) {
    boolean success = false;
    int maxAttempts = 3;
    int currentAttempt = 0;

    while (!success && currentAttempt < maxAttempts) {
      currentAttempt++;
      System.out.println("Attempt " + currentAttempt + ": Trying to connect...");
      // Simulate failure for first two attempts
      if (currentAttempt < 3) {
        System.out.println("Connection failed!");
      } else {
        System.out.println("Connection successful!");
        success = true;
      }
    }

    if (!success) {
      System.out.println("Failed after " + maxAttempts + " attempts.");
    }
  }
}

Adding a Delay: Fixed Retry

Simply retrying immediately might overwhelm a struggling service or fail again if the issue needs time to resolve. That's why we add delays.

A Fixed Delay Retry waits the same amount of time between each failed attempt. This gives the system a chance to recover.

Code: Fixed Delay Retry

Here, we've added a 1-second delay (1000ms) using Thread.sleep() after each failed attempt. This is a common practice to give the system some breathing room.

public class Main {
  public static void main(String[] args) {
    boolean success = false;
    int maxAttempts = 3;
    int currentAttempt = 0;
    long delayMillis = 1000; // 1 second delay

    while (!success && currentAttempt < maxAttempts) {
      currentAttempt++;
      System.out.println("Attempt " + currentAttempt + ": Trying to connect...");
      // Simulate failure for first two attempts
      if (currentAttempt < 3) {
        System.out.println("Connection failed!");
        try {
          Thread.sleep(delayMillis); // Wait before retrying
          System.out.println("Waiting " + delayMillis + "ms...");
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
        }
      } else {
        System.out.println("Connection successful!");
        success = true;
      }
    }

    if (!success) {
      System.out.println("Failed after " + maxAttempts + " attempts.");
    }
  }
}

Smarter Waits: Exponential Backoff

While fixed delays work, sometimes it's better to increase the wait time with each successive retry. This is called Exponential Backoff.

For example, you might wait 1s, then 2s, then 4s, then 8s. This reduces the load on a struggling service and gives it more time to recover.

When to Use the Retry Pattern

Retries are most effective for:

  • Transient network errors: Brief disconnections, timeouts.
  • Temporary resource unavailability: A database connection pool is momentarily exhausted.
  • Optimistic concurrency conflicts: When multiple users try to update the same record at once.
  • Brief service restarts: A microservice is being redeployed.

When NOT to Use Retries

Retries are not a silver bullet. Avoid using them for:

  • Non-transient errors: Errors caused by invalid input, authorization failures, or missing resources that won't resolve on their own.
  • Non-idempotent operations: If repeating an operation has unintended side effects (e.g., charging a customer twice). Idempotency means an operation can be performed multiple times without changing the result beyond the initial application.
  • Long-lasting failures: If a service is permanently down or has a major outage.

Test Your Knowledge!

Which scenario is generally a good candidate for applying the Retry Pattern?

Retry Pattern Summary

You've learned the fundamentals of the Retry Pattern!

  • It's for automatically re-attempting failed operations.
  • It's crucial for handling transient failures in distributed systems.
  • Basic implementation involves a loop with a maximum number of attempts.
  • Adding delays (fixed or exponential backoff) is key to giving systems time to recover.
  • Know when to use it (e.g., network issues) and when to avoid it (e.g., non-transient errors, non-idempotent operations).

Next, we'll explore other resilience patterns like fallbacks and timeouts!

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar-Dasar Pola Percobaan Ulang” gratis?

Ya — teks lengkap “Dasar-Dasar Pola Percobaan Ulang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Microservices Communication Patterns (Saga, Circuit Breaker), upgrade ke CoddyKit PRO. Kursus Microservices Communication Patterns (Saga, Circuit Breaker) mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Dasar-Dasar Pola Percobaan Ulang”?

Pelajari dasar-dasar pola percobaan ulang untuk mencoba kembali operasi yang gagal secara otomatis dan meningkatkan ketangguhan sistem. Kamu berlatih Microservices Communication Patterns (Saga, Circuit Breaker) dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Microservices Communication Patterns (Saga, Circuit Breaker)?

Tidak diperlukan pengalaman sebelumnya. Microservices Communication Patterns (Saga, Circuit Breaker) di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Dasar-Dasar Pola Percobaan Ulang” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Microservices Communication Patterns (Saga, Circuit Breaker) ini?

Ya. Setiap pelajaran Microservices Communication Patterns (Saga, Circuit Breaker) menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Ketangguhan Penting
  2. Dasar-Dasar Pola Percobaan Ulang
  3. Menerapkan Fallback dan Batas Waktu
  4. Pola Bulkhead
← Kembali ke Microservices Communication Patterns (Saga, Circuit Breaker)