Teori Antrean (Queue Theory) di Kasir Indomaret (Part 2)
Dulu gue pernah ngebedah kelakuan orang di kasir minimarket pake Queue Theory (M/M/1 atau M/M/c). Di situ gue jelasin kalo jumlah orang (N) ga sepenting lamanya waktu layanan (service time) tiap individu. Nah, kemaren pas gue mau beli minum buat buka puasa di minimarket deket kampus, teori itu dapet challenge baru.
Kalo di hari biasa kedatangan pelanggan (arrival rate) itu bisa diprediksi pake distribusi Poisson yang relatif konstan, pas jam lima sore di bulan puasa, sistemnya berubah total jadi model antrean dengan pola kedatangan bursty traffic.
Di dunia networking, bursty traffic itu kondisi di mana ribuan request masuk ke server di satu waktu yang bersamaan, disusul sama periode sepi yang lumayan panjang. Di minimarket, ini berarti dari jam lima sampe setengah enam, semua mahasiswa di radius satu kilometer tiba-tiba punya kebutuhan mendesak buat beli es teh botol, kurma, sama gorengan dingin.
Lu bisa nebak apa yang terjadi? Antreannya mengular sampe ke rak sampo di ujung toko.
Kalo lu pake strategi gue yang lama (ngeliatin barang belanjaan orang di depan lu), itu udah ga relevan lagi. Karena di bursty traffic, semua orang beli barang yang sama (takjil) dengan jumlah yang dikit. Service time-nya seragam dan pendek banget. Tapi karena N-nya (jumlah orang) membludak eksponensial dalam waktu sepuluh menit, waktu tunggu lu tetep bakal kerasa kayak selamanya.
Dalam skenario overcapacity kayak gini, lu lagi nyaksiin gimana sebuah sistem fail gracefully (mati dengan elegan) atau crash and burn (hancur lebur).
Minimarket yang bagus bakal nerapin Load Balancing. Kasir yang tadinya cuma satu, bakal manggil temennya dari gudang belakang buat buka mesin kasir kedua dan ketiga. Mereka memecah traffic jadi beberapa node. Tapi kadang, itu pun ga cukup kalo sistem backend-nya (misalnya mesin EDC buat gesek kartu atau jaringan e-wallet) ikutan down gara-gara semua toko di se-Indonesia ngelakuin transaksi di detik yang sama.
Terus gimana cara bertahan hidup di situasi ini?
Pertama, pake konsep Time Shifting. Di komputasi, ini artinya mindahin task berat ke jam-jam di mana resource lagi nganggur. Dalam konteks buka puasa, jangan beli takjil jam lima seperempat. Beli jam tiga sore, taro kulkas. Kalo lu maksa beli jam lima, lu secara sukarela nawarin diri buat jadi korban DDOS attack (Distributed Denial of Service) secara fisik.
Kedua, kalo lu terpaksa kejebak di antrean bursty, bawa uang pas. Jangan ngeluarin kartu ATM, jangan buka aplikasi e-wallet yang muter-muter nyari sinyal, apalagi ngasih duit pecahan seratus ribu buat bayar es teh lima ribu. Kalo lu ngelakuin itu, lu bukan cuma ngerusak sistem kasir, tapi lu juga jadi bottleneck yang bikin puluhan orang di belakang lu telat buka puasa. Di mata Queue Theory, lu adalah anomali yang harusnya di-drop dari antrean.
Ketiga, belajar nerima kenyataan kalo kadang algoritma lu sebagus apa pun ga bisa ngalahin hukum fisika. Kapasitas ruang itu terbatas, dan waktu berjalan ke depan tanpa bisa dipause.
Jadi, stop ngeluh dan terapin time shifting besok-besok. Kalo ngga, siap-siap aja ngebuka puasa pake ludah sendiri sambil meratapi rak sampo.
- Khay