Mensimulasikan network conditions yang realistis: latency addition, bandwidth throttling, packet loss, dan geographic testing untuk memahami dampak network terhadap performa aplikasi dari berbagai lokasi.

Setelah di episode 17 kita memahami tuning & optimization, kini saatnya membahas komponen yang sering dilupakan tetapi sangat mempengaruhi user experience: network. Sebagus apapun server merespons, jika network antara client dan server lambat, user tetap menunggu lama. Network latency adalah komponen yang paling sulit dikontrol oleh engineer — tetapi bisa dimengerti dan diantisipasi dengan testing yang tepat.
Episode ini membawa kalian memahami bagaimana network mempengaruhi performa, cara mensimulasikan kondisi network yang realistis, dan strategi untuk mengoptimasi aplikasi di bawah kondisi network yang buruk.
Network latency adalah waktu yang dibutuhkan data untuk menempuh perjalanan dari client ke server dan sebaliknya. Latency ditentukan oleh jarak fisik dan jumlah hop (router/switch) di jalur.
| Koneksi | Latency Typical |
|---|---|
| Same data center | 0.1-1ms |
| Same city | 1-10ms |
| Cross-country | 20-50ms |
| Cross-continent | 100-300ms |
| Satellite | 500ms+ |
Bandwidth adalah kapasitas maksimum data yang bisa ditransfer per detik. Bandwidth terbatas oleh ISP, network equipment, dan physical link capacity.
Packet loss terjadi saat data packet hilang selama transmisi — bisa disebabkan oleh network congestion, hardware failure, atau wireless interference. TCP akan retransmit packet yang hilang, menambah latency.
Dalam development, client dan server biasanya berada di jaringan yang sama — latency ~0.1ms. Di production, user bisa berada di belahan dunia lain dengan latency 200ms+. Testing harus mensimulasikan kondisi production.
Linux punya built-in tool untuk mensimulasikan network conditions: tc (traffic control).
# Tambahkan latency 100ms ke interface eth0
sudo tc qdisc add dev eth0 root netem delay 100ms
# Tambahkan jitter ±20ms
sudo tc qdisc change dev eth0 root netem delay 100ms 20ms
# Tambahkan packet loss 5%
sudo tc qdisc change dev eth0 root netem loss 5%
# Hapus semua aturan
sudo tc qdisc del dev eth0 rootk6 bisa mensimulasikan latency via tags dan monitoring:
// k6: monitor network latency per request
export default function () {
const res = http.get('https://api.example.com/products');
// res.timings Contains detailed timing breakdown
check(res, {
'DNS lookup < 50ms': (r) => r.timings.dns < 50,
'TCP connect < 100ms': (r) => r.timings.connecting < 100,
'TLS handshake < 200ms': (r) => r.timings.tls_handshake < 200,
'Server processing < 300ms': (r) => r.timings.waiting < 300,
});
}Banyak user mengakses aplikasi dari mobile network dengan bandwidth terbatas. Testing harus mempertimbangkan skenario ini:
# Limit bandwidth ke 1Mbps
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 50ms
# Bandwidth asymmetric: 10Mbps down, 1Mbps up
sudo tc qdisc add dev eth0 root handle 1: htb default 10
sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 10mbit
sudo tc class add dev eth0 parent 1: classid 1:20 htb rate 1mbitAplikasi yang tidak dirancang untuk bandwidth rendah akan terasa lambat — images yang tidak di-compress, scripts yang tidak di-minify, dan responses yang terlalu besar.
# 10% packet loss (realistis untuk mobile/satellite)
sudo tc qdisc add dev eth0 root netem loss 10%
# Burst packet loss: 20% chance kehilangan 5 packet berturut-turut
sudo tc qdisc add dev eth0 root netem loss 20% 5| Packet Loss | Dampak |
|---|---|
| 0-1% | Tidak terasa untuk user |
| 1-5% | Re-transmissions menambah latency |
| 5-10% | Signifikan; TCP throughput menurun drastis |
| 10%+ | Sangat buruk; connection timeout sering |
Untuk aplikasi yang melayani user global, testing harus dilakukan dari berbagai region:
// k6: geographic testing
const REGIONS = [
{ name: 'jakarta', latency: '20ms' },
{ name: 'singapore', latency: '40ms' },
{ name: 'tokyo', latency: '80ms' },
{ name: 'us-west', latency: '180ms' },
];
export default function () {
const res = http.get('https://api.example.com/products');
check(res, {
'status 200': (r) => r.status === 200,
'acceptable latency': (r) => r.timings.duration < 500,
});
}HTTP/2 mengurangi latency dengan multiplexing — banyak request dalam satu koneksi. HTTP/3 (QUIC) mengurangi latency lebih jauh dengan menghilangkan TCP handshake.
Mempertahankan koneksi terbuka mengurangi latency untuk request berikutnya — tidak perlu TCP/TLS handshake ulang.
Gzip atau Brotli compression mengurangi ukuran payload — mengurangi transfer time di bandwidth rendah.
Content-Encoding: gzip
Content-Encoding: br # Brotli, lebih baik dari gzipDi episode 18 ini kalian telah memahami network & latency testing:
Di episode 19 selanjutnya, kita akan membahas Security in Load Tests — bagaimana menjalankan load test dengan aman tanpa mempengaruhi production, rate limiting, dan DDoS-aware testing. Siapkan security checklist kalian!