Langsung ke konten

Arsip

Sistem Terdistribusi

60 artikel
Rekayasa Perangkat Lunak 19 Sep 2026 8 min read

MQTT dan QUIC Menyelesaikan Bagian Berbeda dari Transport Chat

MQTT dan QUIC Menyelesaikan Bagian Berbeda dari Transport Chat MQTT dan QUIC sering ditempatkan dalam tabel perbandingan yang sama ketika membahas chat real-time. Perbandingan itu praktis, tetapi mencampur dua layer protokol yang berbeda menjadi satu pilihan. MQTT adalah protokol messaging pada application layer. Ia mendefinisikan konsep seperti client, broker, topic, subscription, retained message, session state, dan quality of service untuk delivery. QUIC adalah protokol transport aman di atas UDP. Ia menyediakan connection, stream, flow control, loss recovery, encryption, dan mekanisme connection migration.

Rekayasa Perangkat Lunak 19 Sep 2026 7 min read

Idempotency Key Mengikat Retry ke Satu Mutasi Logis

Client dapat kehilangan HTTP response setelah server melakukan commit terhadap mutasi yang diminta. Dari sisi client, status operasi belum pasti: koneksi gagal, tetapi kegagalan itu tidak menunjukkan apakah durable state sudah berubah. Retry terhadap POST yang sama kemudian dapat membuat order, percobaan pembayaran, reservasi, atau mutasi lain untuk kedua kalinya. Idempotency key memberi retry sebuah identitas stabil yang terpisah dari satu percobaan transport tertentu. Server dapat mengaitkan request berulang yang membawa identitas tersebut dengan satu operasi logis. Mekanisme ini mempersempit ambiguitas pada batas API, tetapi key saja bukan jaminan. Scope, persistensi, perbandingan request, kontrol konkurensi, dan kebijakan replay menentukan arti sebenarnya dari pengiriman berulang.

Rekayasa Perangkat Lunak 19 Sep 2026 6 min read

Idempotency Key Membatasi Keamanan Retry pada Identitas Request

Client dapat mengirim operasi logis yang sama lebih dari sekali meski hanya menginginkan satu efek. Timeout setelah POST /payments meninggalkan batas yang ambigu: server mungkin sudah melakukan commit pembayaran sementara client tidak menerima response. Retry memulihkan pengiriman, tetapi retry biasa dapat membuat pembayaran kedua. Idempotency key mengubah interface dengan memberi identitas request yang stabil pada percobaan berulang. Key tersebut bukan pengganti transactionality dan tidak membuat setiap operasi secara intrinsik idempotent. Key membentuk protokol antara client dan server: percobaan dengan key yang sama diperlakukan sebagai kandidat untuk operasi logis yang sama. Server tetap memerlukan aturan mengenai ekuivalensi request, kedatangan konkuren, masa persistensi, pemulihan kegagalan, dan replay response.

Rekayasa Perangkat Lunak 19 Sep 2026 6 min read

Fencing Token Menutup Celah Writer dari Lease Kedaluwarsa

Lease terdistribusi dapat kedaluwarsa ketika pemegangnya tidak dapat berjalan. Pemegang tersebut kemudian dapat aktif lagi dengan state lokal yang masih menyatakan bahwa lease dimilikinya, padahal client lain sudah memperoleh lease yang lebih baru. Jika storage atau service yang dilindungi menerima operasi hanya karena client pernah memperoleh lease, dua client dapat memutasi resource yang sama pada titik waktu berbeda. Fencing token memindahkan pemeriksaan penentu dari kepemilikan lease ke resource yang dilindungi. Setiap akuisisi yang berhasil memperoleh token yang berurutan setelah semua token sebelumnya. Resource mencatat token terbesar yang pernah diterima dan menolak operasi dengan nilai lebih lama. Lease tetap mengoordinasikan akuisisi, sedangkan token membatasi tindakan pemegang lama yang terlambat setelah kembali aktif.

Rekayasa Perangkat Lunak 19 Sep 2026 6 min read

Fencing Token Menolak Writer Usang Setelah Lease Kedaluwarsa

Distributed lease dapat memindahkan kepemilikan tanpa menghentikan proses yang sebelumnya memegang lease tersebut. Sebuah worker dapat berhenti cukup lama hingga lease kedaluwarsa, lalu aktif kembali setelah worker lain memperoleh lease yang sama. Pada saat itu, kedua proses dapat mengeksekusi kode yang ditulis dengan asumsi bahwa kepemilikan bersifat eksklusif. Kedaluwarsa lease menyelesaikan status kepemilikan di coordination service. Mekanisme itu tidak mencabut waktu CPU, membatalkan network request yang sedang berjalan, atau menghapus I/O yang sudah masuk buffer pada holder lama. Fencing token menutup celah tersebut dengan membawa nilai pengurutan dari keputusan kepemilikan menuju resource yang dilindungi.

Rekayasa Perangkat Lunak 19 Sep 2026 6 min read

Circuit Breaker Membatasi Trafik Kegagalan Lintas Panggilan Service

Circuit breaker mengubah keputusan admission untuk panggilan keluar sebelum dependency menerimanya. Pada state closed, panggilan diteruskan dan hasilnya menjadi input bagi kebijakan kegagalan. Setelah kebijakan tersebut terpicu, breaker masuk ke state open dan menolak panggilan berikutnya secara lokal. Setelah interval pemulihan yang dikonfigurasi berakhir, sejumlah terbatas panggilan probe dapat menguji apakah dependency sudah dapat dipakai kembali. Mekanisme ini berbeda dari retry. Retry mengirim percobaan lain setelah sebuah percobaan gagal. Breaker dapat mencegah sebuah percobaan dikirim sama sekali. Menggabungkan keduanya tanpa urutan yang presisi dapat memperbesar trafik saat terjadi gangguan atau mempertahankan breaker dalam state open berdasarkan sinyal yang tidak merepresentasikan kondisi dependency.

Rekayasa Perangkat Lunak 19 Sep 2026 6 min read

Circuit Breaker Membatasi Amplifikasi Kegagalan Antar-Service

Sebuah service call dapat gagal dengan cepat tetapi tetap menimbulkan masalah yang lebih besar pada sistem. Ketika setiap request upstream terus memanggil dependency downstream yang sedang gagal, setiap percobaan menghabiskan kapasitas koneksi, waktu worker, retry budget, dan ruang queue. Dependency menerima traffic yang belum mampu dilayaninya, sementara caller menghabiskan resource untuk menunggu hasil yang sangat berkorelasi dengan kegagalan sebelumnya. Circuit breaker menempatkan batas keputusan yang memiliki state di depan call tersebut. Alih-alih memperlakukan setiap request sebagai kesempatan terpisah untuk mencoba dependency, breaker mencatat state kegagalan terbaru dan dapat menolak call secara lokal selama interval terbatas. Pemulihan kemudian diuji melalui probe terkontrol, bukan dengan langsung mengembalikan seluruh traffic.

Rekayasa Perangkat Lunak 16 Sep 2026 6 min read

HTTP Stale-While-Revalidate Memindahkan Refresh Cache dari Request Path

Cache dapat langsung mengembalikan stored response yang sudah expired dan memulai validation secara paralel ketika stale-while-revalidate mengizinkan reuse tersebut. Request yang menemukan stale entry karena itu tidak harus ikut menanggung origin validation latency, tetapi dapat menerima representation data yang lebih lama daripada normal freshness lifetime. Ini adalah pergeseran yang disengaja dalam cache contract. Freshness tetap berakhir pada boundary yang dikonfigurasi. Extension menambahkan interval terpisah tempat stale reuse diizinkan sementara validation berlangsung, sehingga response age dan request latency menjadi sebagian terpisah.

Rekayasa Perangkat Lunak 16 Sep 2026 8 min read

HTTP If-Range Mengikat Pengambilan Parsial pada Identitas Representasi

Client yang hanya memiliki sebagian dari sebuah representasi HTTP menghadapi masalah konsistensi ketika kemudian meminta byte yang belum diterima. Offset byte hanya bermakna terhadap representasi yang byte-nya menjadi dasar offset tersebut. Jika representasi terpilih berubah di antara request, menggabungkan prefix lama dengan suffix baru dapat menghasilkan data yang tidak pernah dikirim server mana pun. If-Range mengikat identitas representasi pada boundary pengambilan parsial tersebut. Ketika validator-nya cocok, server dapat memproses field Range yang menyertainya. Ketika tidak cocok, server mengabaikan Range dan mengirim representasi terpilih secara lengkap melalui jalur response sukses biasa, alih-alih mengembalikan response failed-precondition.

Rekayasa Perangkat Lunak 16 Sep 2026 7 min read

HTTP If-Match Mengubah State Representasi Menjadi Write Precondition

Origin HTTP dapat menolak PUT atau DELETE sebelum menerapkannya ketika request membawa If-Match dan representasi yang dipilih tidak lagi memiliki entity tag yang diterima. Kondisi ini mengubah representation validator menjadi write precondition: client dapat menyatakan bahwa mutasi hanya valid terhadap state yang masih cocok dengan versi yang sebelumnya diamati. Mekanisme ini menangani boundary konkurensi tertentu. Ia dapat mencegah satu client diam-diam mengganti resource state setelah client lain mengubah representasi yang dipilih. Namun ia tidak mengubah HTTP menjadi transaction protocol, tidak mengunci resource antar-request, dan tidak menjamin bahwa entity tag mewakili setiap bagian application state yang terlibat dalam mutasi.

Rekayasa Perangkat Lunak 16 Sep 2026 6 min read

HTTP 421 Misdirected Request Menandai Batas Authority Koneksi

Client HTTP/2 dapat menggunakan ulang satu secured connection untuk request ke lebih dari satu origin ketika server authoritative untuk origin-origin tersebut. Namun, sebuah request tetap dapat mencapai server instance yang connection context-nya tidak sesuai dengan target URI. 421 Misdirected Request ada untuk boundary ini: server menolak routing context, bukan memperlakukan target resource itu sendiri sebagai tidak ada. Perbedaan ini memisahkan resource semantics dari connection authority. Response 421 berarti server ini, pada path atau connection context ini, tidak mampu atau tidak bersedia menghasilkan authoritative response untuk target URI. Itu tidak berarti resource telah dihapus, method-nya dilarang, atau request representation tidak valid.

Komputasi Awan 04 Sep 2026 10 min read

Rancang Dead-Letter Queue untuk Poison Message

Retry berguna ketika kegagalan bersifat sementara. Database mungkin tidak tersedia selama beberapa detik, service downstream dapat mengembalikan respons overload, atau koneksi jaringan dapat terputus lalu pulih. Retry menjadi merugikan ketika pesan itu sendiri memang tidak mungkin berhasil. Payload yang malformed, versi schema yang tidak didukung, referensi ke data yang hilang secara permanen, atau bug aplikasi yang deterministik dapat membuat pesan yang sama gagal pada setiap delivery. Jika broker terus mengembalikan pesan itu kepada consumer tanpa batas, sistem menghabiskan kapasitas untuk mengulang pekerjaan yang tidak punya peluang berhasil.