Merancang aplikasi toleran kesalahan dan tangguh di AWS
Mengembangkan Aplikasi di AWS
Ricardo Sueiras
Principal Technologist
Membangun untuk ketangguhan
Kegagalan sementara
Pahami mode kegagalan umum:
Kesalahan sementara hilang sendiri, biasanya aman untuk mencoba ulang.
Timeout
Pahami mode kegagalan umum:
Kesalahan sementara hilang sendiri, biasanya aman untuk mencoba ulang.
Timeout: layanan eksternal terlalu lama merespons.
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.
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.
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.
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.
Mengelola logika 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.
Mengelola 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.
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
Saat kegagalan melampaui ambang, circuit terbuka.
Permintaan berikutnya diblokir.
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.
Dead letter queue
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
Batas API AWS
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.
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.
Integrasi dengan pihak ketiga
Pertimbangkan beralih dari komunikasi sinkron ke asinkron.
Sistem Anda tetap memroses meski layanan eksternal terlambat.
Ayo berlatih!
Mengembangkan Aplikasi di AWS
Preparing Video For Download...