Merancang aplikasi toleran kesalahan dan tangguh di AWS

Mengembangkan Aplikasi di AWS

Ricardo Sueiras

Principal Technologist

Membangun untuk ketangguhan

membangun untuk ketangguhan

Mengembangkan Aplikasi di AWS

semuanya akan gagal

Mengembangkan Aplikasi di AWS

Kegagalan sementara

 

kegagalan sementara

  • Pahami mode kegagalan umum:
  • Kesalahan sementara hilang sendiri, biasanya aman untuk mencoba ulang.
Mengembangkan Aplikasi di AWS

Timeout

 

batas waktu habis

  • Pahami mode kegagalan umum:
  • Kesalahan sementara hilang sendiri, biasanya aman untuk mencoba ulang.
  • Timeout: layanan eksternal terlalu lama merespons.
Mengembangkan Aplikasi di AWS

Kesalahan permanen

 

kesalahan permanen

  • Pahami mode kegagalan umum:
  • Kesalahan sementara hilang sendiri, biasanya aman untuk mencoba ulang.
  • Timeout: layanan eksternal terlalu lama merespons.
  • Kesalahan permanen: permintaan rusak secara fundamental, mencoba ulang tidak akan membantu.
Mengembangkan Aplikasi di AWS

Batas API

 

batas API

  • Pahami mode kegagalan umum:
  • Kesalahan sementara hilang sendiri, biasanya aman untuk mencoba ulang.
  • Timeout: layanan eksternal terlalu lama merespons.
  • Kesalahan permanen: permintaan rusak secara fundamental, mencoba ulang tidak akan membantu.
  • Batas laju API: terlalu banyak permintaan, akan mendapat HTTP 429 Too Many Requests.
Mengembangkan Aplikasi di AWS

Strategi retry

  • Kegagalan di sistem terdistribusi sering bersifat sementara.
  • Permintaan yang dicoba ulang sering berhasil.
  • Tambahkan logika retry dengan hati-hati; retry membabi buta bisa memperburuk keadaan.
  • Exponential backoff: tingkatkan jeda antar percobaan ulang.
  • Jitter: tambahkan acak untuk menghindari lonjakan retry.
  • Batas retry: cegah loop tak berujung.

 

strategi retry

Mengembangkan Aplikasi di AWS

Kemampuan native AWS SDK

  • AWS SDK menangani logika retry secara otomatis.
  • Retry bawaan mencakup exponential backoff dan jitter.
  • Permintaan gagal atau throttled dicoba ulang dengan jeda yang meningkat.
  • Mengurangi jumlah kode penanganan error yang perlu Anda tulis.

 

kemampuan sdk

Mengembangkan Aplikasi di AWS

Mengelola logika retry

 

jangan retry

  • Logika retry tidak selalu jawabannya.
  • Error HTTP 4xx: server memahami lalu menolak permintaan Anda.
  • Permintaan non-idempotent: mencoba ulang dapat menyebabkan tindakan ganda atau tidak konsisten.
Mengembangkan Aplikasi di AWS

Mengelola timeout

 

Kelola timeout

  • Retry tanpa batas dapat memperbesar masalah saat beban tinggi.
  • Gabungkan retry dengan timeout.
  • Timeout menetapkan waktu tunggu maksimum untuk respons.
  • Setiap panggilan layanan eksternal harus memiliki timeout.
Mengembangkan Aplikasi di AWS

Circuit breaker

  • Saat layanan terus gagal, retry saja tidak cukup.
  • Terus mengirim permintaan bisa membebani layanan yang gagal.
  • Pola circuit breaker menghentikan sementara permintaan ke dependensi yang tidak sehat.
  • Keadaan closed: permintaan mengalir normal.

 

circuit breaker

Mengembangkan Aplikasi di AWS

Circuit breaker

  • Saat kegagalan melampaui ambang, circuit terbuka.
  • Permintaan berikutnya diblokir.

 

circuit breaker

Mengembangkan Aplikasi di AWS

Circuit breaker

  • Setelah cooldown, circuit masuk keadaan half open untuk uji pemulihan.
  • Layanan merespons sukses: operasi normal dilanjutkan.
  • Masih gagal: circuit tetap terbuka.
  • Implementasikan circuit breaker di level aplikasi.

 

circuit breaker

Mengembangkan Aplikasi di AWS

Dead letter queue

 

dql

  • Pesan yang terus gagal dapat memblokir sistem.
  • Pindahkan dari alur pemrosesan utama.
  • Pesan gagal masuk ke Dead Letter Queue.
  • Bagian kunci dalam membangun aplikasi tangguh.
  • Namun, pahami trade-off
Mengembangkan Aplikasi di AWS

Batas API AWS

 

Batas API

  • Anda berinteraksi dengan layanan AWS melalui API.
  • Setiap layanan menetapkan batas laju API-nya sendiri.
  • Melampaui batas memicu throttling (HTTP 429 Too Many Requests).
  • Rancang aplikasi Anda untuk menangani throttling dengan baik.
Mengembangkan Aplikasi di AWS

Integrasi dengan layanan pihak ketiga

  • Layanan pihak ketiga menambah ketidakpastian.
  • Anda tidak mengontrol kinerja atau ketersediaannya.
  • Tetapkan timeout untuk mencegah tunggu lama.
  • Gunakan retry dengan backoff untuk masalah sementara.
  • Isolasi dependensi untuk membatasi dampak.

 

pihak ketiga

Mengembangkan Aplikasi di AWS

Integrasi dengan pihak ketiga

  • Pertimbangkan beralih dari komunikasi sinkron ke asinkron.
  • Sistem Anda tetap memroses meski layanan eksternal terlambat.

 

mengelola pihak ketiga

Mengembangkan Aplikasi di AWS

Ayo berlatih!

Mengembangkan Aplikasi di AWS

Preparing Video For Download...