<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Desain Sistem]]></title><description><![CDATA[Platform belajar system design dan arsitektur aplikasi untuk developer. Tutorial lengkap distributed systems, scalability, dan real-world case studies.]]></description><link>https://desainsistem.com</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 05:57:47 GMT</lastBuildDate><atom:link href="https://desainsistem.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Latency vs Throughput]]></title><description><![CDATA[Pengertian
Dalam system design, Latency dan Throughput adalah dua metrik performa yang fundamental namun sering disalahpahami. Keduanya mengukur aspek berbeda dari performa sistem dan sering kali memiliki trade-off satu sama lain.
Latency (Latensi)
L...]]></description><link>https://desainsistem.com/latency-vs-throughput</link><guid isPermaLink="true">https://desainsistem.com/latency-vs-throughput</guid><category><![CDATA[Design Systems]]></category><category><![CDATA[System Design]]></category><category><![CDATA[System Architecture]]></category><dc:creator><![CDATA[Desain Sistem]]></dc:creator><pubDate>Tue, 04 Nov 2025 16:17:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1763732955197/9676bd4f-235a-4b99-8f5e-db5a246e9ba9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-pengertian">Pengertian</h2>
<p>Dalam system design, <strong>Latency</strong> dan <strong>Throughput</strong> adalah dua metrik performa yang fundamental namun sering disalahpahami. Keduanya mengukur aspek berbeda dari performa sistem dan sering kali memiliki trade-off satu sama lain.</p>
<h3 id="heading-latency-latensi">Latency (Latensi)</h3>
<p><strong>Latency</strong> adalah waktu yang dibutuhkan untuk menyelesaikan satu operasi atau request dari awal hingga akhir. Latency diukur dalam satuan waktu seperti milidetik (ms) atau detik.</p>
<p><strong>Contoh Sederhana:</strong></p>
<ul>
<li><p>Waktu yang dibutuhkan dari user mengklik tombol "Submit" hingga menerima respons</p>
</li>
<li><p>Waktu round-trip dari client mengirim request hingga menerima response</p>
</li>
<li><p>Waktu query database dari eksekusi hingga mendapat hasil</p>
</li>
</ul>
<h3 id="heading-throughput">Throughput</h3>
<p><strong>Throughput</strong> adalah jumlah operasi atau data yang dapat diproses sistem dalam periode waktu tertentu. Throughput diukur dalam satuan seperti requests per second (RPS), transactions per second (TPS), atau megabytes per second (MB/s).</p>
<p><strong>Contoh Sederhana:</strong></p>
<ul>
<li><p>Jumlah transaksi yang dapat diproses per detik</p>
</li>
<li><p>Jumlah user yang dapat dilayani secara bersamaan</p>
</li>
<li><p>Bandwidth jaringan dalam MB/s</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763732635062/cc739b62-3d69-43f6-81b0-eb7cfda5107f.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-perbedaan-mendasar">Perbedaan Mendasar</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Aspek</td><td>Latency</td><td>Throughput</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Definisi</strong></td><td>Waktu untuk 1 operasi</td><td>Jumlah operasi per waktu</td></tr>
<tr>
<td><strong>Satuan</strong></td><td>Milidetik, detik</td><td>RPS, TPS, MB/s</td></tr>
<tr>
<td><strong>Fokus</strong></td><td>Kecepatan respons</td><td>Kapasitas sistem</td></tr>
<tr>
<td><strong>User Experience</strong></td><td>Responsiveness</td><td>Kemampuan menangani beban</td></tr>
<tr>
<td><strong>Contoh</strong></td><td>Halaman load dalam 200ms</td><td>Server handle 10,000 RPS</td></tr>
</tbody>
</table>
</div><h2 id="heading-mengapa-keduanya-penting">Mengapa Keduanya Penting?</h2>
<h3 id="heading-user-experience">User Experience</h3>
<ul>
<li><p><strong>Latency rendah</strong> = Sistem terasa cepat dan responsif</p>
</li>
<li><p><strong>Throughput tinggi</strong> = Sistem dapat melayani banyak user bersamaan</p>
</li>
</ul>
<h3 id="heading-business-impact">Business Impact</h3>
<ul>
<li><p><strong>Latency:</strong> Amazon menemukan bahwa setiap 100ms peningkatan latency menurunkan sales 1%</p>
</li>
<li><p><strong>Throughput:</strong> Sistem harus bisa handle traffic spike saat promo atau viral</p>
</li>
</ul>
<h2 id="heading-analogi-sederhana">Analogi Sederhana</h2>
<p><strong>Analogi Pipa Air:</strong></p>
<ul>
<li><p><strong>Latency</strong> = Waktu yang dibutuhkan setetes air untuk mengalir dari ujung ke ujung pipa</p>
</li>
<li><p><strong>Throughput</strong> = Jumlah total air yang bisa mengalir melalui pipa dalam satu menit</p>
</li>
</ul>
<p><strong>Analogi Jalan Tol:</strong></p>
<ul>
<li><p><strong>Latency</strong> = Waktu tempuh dari Jakarta ke Surabaya (misalnya 10 jam)</p>
</li>
<li><p><strong>Throughput</strong> = Jumlah mobil yang bisa melewati tol per jam (misalnya 1000 mobil/jam)</p>
</li>
</ul>
<p>Anda bisa menambah throughput dengan menambah jalur (horizontal scaling), tapi latency tetap 10 jam karena ditentukan oleh jarak dan kecepatan maksimal.</p>
<h2 id="heading-trade-off-antara-latency-dan-throughput">Trade-off antara Latency dan Throughput</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763732565994/fc67a27f-9c76-4285-87d6-659574d3552a.png" alt class="image--center mx-auto" /></p>
<p>Seringkali, optimasi untuk satu metrik dapat mengorbankan metrik lainnya:</p>
<h3 id="heading-skenario-1-batch-processing">Skenario 1: Batch Processing</h3>
<p><strong>Meningkatkan Throughput, Mengorbankan Latency</strong></p>
<ul>
<li><p>Sistem mengumpulkan 100 request dan memprosesnya sekaligus</p>
</li>
<li><p><strong>Throughput:</strong> Meningkat karena efisiensi batch processing</p>
</li>
<li><p><strong>Latency:</strong> Meningkat karena request pertama harus menunggu 99 request lainnya</p>
</li>
</ul>
<h3 id="heading-skenario-2-real-time-processing">Skenario 2: Real-time Processing</h3>
<p><strong>Menurunkan Latency, Mengorbankan Throughput</strong></p>
<ul>
<li><p>Setiap request langsung diproses tanpa waiting</p>
</li>
<li><p><strong>Latency:</strong> Sangat rendah, respons instant</p>
</li>
<li><p><strong>Throughput:</strong> Lebih rendah karena overhead per-request processing</p>
</li>
</ul>
<h2 id="heading-faktor-faktor-yang-mempengaruhi">Faktor-faktor yang Mempengaruhi</h2>
<h3 id="heading-faktor-yang-mempengaruhi-latency">Faktor yang Mempengaruhi Latency:</h3>
<ol>
<li><p><strong>Network Latency</strong></p>
<ul>
<li><p>Jarak geografis antara client dan server</p>
</li>
<li><p>Kualitas koneksi internet</p>
</li>
<li><p>Jumlah network hops</p>
</li>
</ul>
</li>
<li><p><strong>Processing Time</strong></p>
<ul>
<li><p>Kompleksitas algoritma</p>
</li>
<li><p>Performa CPU</p>
</li>
<li><p>Efisiensi kode</p>
</li>
</ul>
</li>
<li><p><strong>I/O Operations</strong></p>
<ul>
<li><p>Kecepatan disk (SSD vs HDD)</p>
</li>
<li><p>Database query optimization</p>
</li>
<li><p>External API calls</p>
</li>
</ul>
</li>
<li><p><strong>Queueing Delays</strong></p>
<ul>
<li><p>Waktu tunggu dalam antrian</p>
</li>
<li><p>Load balancer overhead</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-faktor-yang-mempengaruhi-throughput">Faktor yang Mempengaruhi Throughput:</h3>
<ol>
<li><p><strong>Resource Capacity</strong></p>
<ul>
<li><p>Jumlah CPU cores</p>
</li>
<li><p>Memory available</p>
</li>
<li><p>Network bandwidth</p>
</li>
</ul>
</li>
<li><p><strong>Concurrency</strong></p>
<ul>
<li><p>Jumlah threads/workers</p>
</li>
<li><p>Connection pooling</p>
</li>
<li><p>Async processing</p>
</li>
</ul>
</li>
<li><p><strong>Bottlenecks</strong></p>
<ul>
<li><p>Database connections</p>
</li>
<li><p>Lock contention</p>
</li>
<li><p>Single-threaded components</p>
</li>
</ul>
</li>
<li><p><strong>System Architecture</strong></p>
<ul>
<li><p>Load balancing</p>
</li>
<li><p>Caching strategy</p>
</li>
<li><p>Horizontal scaling</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-cara-mengukur-latency-dan-throughput">Cara Mengukur Latency dan Throughput</h2>
<h3 id="heading-mengukur-latency">Mengukur Latency</h3>
<p><strong>Metrik Penting:</strong></p>
<ul>
<li><p><strong>Average Latency:</strong> Rata-rata waktu respons</p>
</li>
<li><p><strong>Median Latency (P50):</strong> 50% request lebih cepat dari nilai ini</p>
</li>
<li><p><strong>P95 Latency:</strong> 95% request lebih cepat dari nilai ini</p>
</li>
<li><p><strong>P99 Latency:</strong> 99% request lebih cepat dari nilai ini</p>
</li>
<li><p><strong>Maximum Latency:</strong> Worst case scenario</p>
</li>
</ul>
<p><strong>Mengapa Percentile Penting?</strong> Average bisa menyesatkan jika ada outliers. P95 dan P99 memberikan gambaran user experience yang lebih akurat.</p>
<p><strong>Contoh:</strong></p>
<pre><code class="lang-plaintext">100 requests dengan latency:
- 95 requests: 100ms
- 4 requests: 200ms  
- 1 request: 5000ms (outlier)

Average: 247ms (misleading!)
P95: 200ms (lebih representatif)
P99: 5000ms (worst case)
</code></pre>
<h3 id="heading-mengukur-throughput">Mengukur Throughput</h3>
<p><strong>Metrik Penting:</strong></p>
<ul>
<li><p><strong>Requests Per Second (RPS)</strong></p>
</li>
<li><p><strong>Transactions Per Second (TPS)</strong></p>
</li>
<li><p><strong>Queries Per Second (QPS)</strong></p>
</li>
<li><p><strong>Concurrent Users</strong></p>
</li>
</ul>
<p><strong>Tools untuk Measurement:</strong></p>
<ul>
<li><p>Apache Bench (ab)</p>
</li>
<li><p>JMeter</p>
</li>
<li><p>Gatling</p>
</li>
<li><p>K6</p>
</li>
<li><p>Locust</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763733021646/7683e6c5-0855-4901-b234-5e4a05dcede9.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-studi-kasus-e-commerce-checkout">Studi Kasus: E-commerce Checkout</h2>
<h3 id="heading-situasi-awal">Situasi Awal</h3>
<p>Sebuah e-commerce menghadapi masalah pada sistem checkout mereka:</p>
<p><strong>Metrics:</strong></p>
<ul>
<li><p>Average Latency: 2 detik</p>
</li>
<li><p>P99 Latency: 8 detik</p>
</li>
<li><p>Throughput: 500 RPS</p>
</li>
<li><p>Peak Traffic: 2000 RPS (sistem overload)</p>
</li>
</ul>
<p><strong>Masalah:</strong></p>
<ul>
<li><p>Saat traffic normal (500 RPS), latency acceptable</p>
</li>
<li><p>Saat flash sale (2000 RPS), sistem melambat drastis</p>
</li>
<li><p>Banyak timeout dan failed transactions</p>
</li>
<li><p>User experience sangat buruk</p>
</li>
</ul>
<h3 id="heading-root-cause-analysis">Root Cause Analysis</h3>
<p><strong>Bottleneck yang Ditemukan:</strong></p>
<ol>
<li><p><strong>Database Connection Pool</strong> terbatas (max 100 connections)</p>
</li>
<li><p><strong>Payment Gateway API</strong> slow response (1-2 detik per call)</p>
</li>
<li><p><strong>Stock Checking</strong> melakukan database query setiap request</p>
</li>
<li><p><strong>No Caching</strong> untuk product data</p>
</li>
<li><p><strong>Synchronous Processing</strong> untuk email dan notification</p>
</li>
</ol>
<h3 id="heading-strategi-optimasi">Strategi Optimasi</h3>
<h4 id="heading-optimasi-1-connection-pool-management">Optimasi 1: Connection Pool Management</h4>
<p><strong>Masalah:</strong> Database connection pool habis saat high traffic</p>
<p><strong>Solusi:</strong></p>
<pre><code class="lang-plaintext">Sebelum:
- Max connections: 100
- Timeout: 5 detik
- Wait time saat pool penuh: indefinite

Sesudah:
- Max connections: 500
- Timeout: 2 detik
- Connection reuse optimization
- Read replica untuk query heavy operations
</code></pre>
<p><strong>Hasil:</strong></p>
<ul>
<li><p>Throughput meningkat dari 500 RPS → 1200 RPS</p>
</li>
<li><p>P99 latency turun dari 8s → 4s</p>
</li>
</ul>
<h4 id="heading-optimasi-2-async-processing-untuk-non-critical-operations">Optimasi 2: Async Processing untuk Non-Critical Operations</h4>
<p><strong>Masalah:</strong> Email notification dan logging memperlambat response</p>
<p><strong>Solusi:</strong></p>
<ul>
<li><p>Pisahkan critical path dan non-critical path</p>
</li>
<li><p>Gunakan message queue (RabbitMQ) untuk async processing</p>
</li>
<li><p>Email dan notification dikirim asynchronous</p>
</li>
</ul>
<p><strong>Critical Path (Synchronous):</strong></p>
<ol>
<li><p>Validate order</p>
</li>
<li><p>Check stock</p>
</li>
<li><p>Process payment</p>
</li>
<li><p>Create order record</p>
</li>
<li><p>Return success response</p>
</li>
</ol>
<p><strong>Non-Critical Path (Asynchronous):</strong></p>
<ol>
<li><p>Send email confirmation</p>
</li>
<li><p>Send SMS notification</p>
</li>
<li><p>Update analytics</p>
</li>
<li><p>Generate invoice PDF</p>
</li>
</ol>
<p><strong>Hasil:</strong></p>
<ul>
<li><p>Latency turun dari 2s → 800ms</p>
</li>
<li><p>Throughput meningkat karena freed up resources</p>
</li>
<li><p>User mendapat response lebih cepat</p>
</li>
</ul>
<h4 id="heading-optimasi-3-caching-strategy">Optimasi 3: Caching Strategy</h4>
<p><strong>Masalah:</strong> Product data dan stock check selalu query database</p>
<p><strong>Solusi:</strong></p>
<ul>
<li><p><strong>Redis Cache</strong> untuk product data (TTL: 5 menit)</p>
</li>
<li><p><strong>Local Cache</strong> untuk configuration data</p>
</li>
<li><p><strong>Cache warming</strong> untuk produk populer</p>
</li>
<li><p><strong>Cache aside pattern</strong> untuk cache misses</p>
</li>
</ul>
<p><strong>Implementation:</strong></p>
<pre><code class="lang-plaintext">Check Stock Flow:
1. Check Redis cache first
2. If cache hit → return stock info (latency: 5ms)
3. If cache miss → query database (latency: 50ms)
4. Update cache
5. Return result

Before: Every request = 50ms database query
After: 95% requests = 5ms cache hit
</code></pre>
<p><strong>Hasil:</strong></p>
<ul>
<li><p>Average latency turun dari 800ms → 400ms</p>
</li>
<li><p>Database load turun 80%</p>
</li>
<li><p>P95 latency turun dari 2s → 600ms</p>
</li>
</ul>
<h4 id="heading-optimasi-4-payment-gateway-optimization">Optimasi 4: Payment Gateway Optimization</h4>
<p><strong>Masalah:</strong> Payment gateway API call memakan 1-2 detik</p>
<p><strong>Solusi:</strong></p>
<ul>
<li><p><strong>Connection Pooling</strong> ke payment gateway</p>
</li>
<li><p><strong>Retry with exponential backoff</strong></p>
</li>
<li><p><strong>Circuit breaker pattern</strong> untuk handle gateway failures</p>
</li>
<li><p><strong>Async payment verification</strong> untuk slow gateways</p>
</li>
</ul>
<p><strong>Strategi:</strong></p>
<pre><code class="lang-plaintext">Before (Synchronous):
User Click Pay → Call Payment Gateway → Wait Response → Show Result
Total: 2000ms latency

After (Asynchronous):
User Click Pay → Create Pending Order → Return "Processing" → Background verify
Total: 200ms response latency
User gets real-time update via websocket
</code></pre>
<p><strong>Hasil:</strong></p>
<ul>
<li><p>Initial response latency: 200ms</p>
</li>
<li><p>User experience: Lebih baik dengan real-time updates</p>
</li>
<li><p>Throughput: Meningkat karena tidak blocking</p>
</li>
</ul>
<h4 id="heading-optimasi-5-load-balancing-amp-auto-scaling">Optimasi 5: Load Balancing &amp; Auto-scaling</h4>
<p><strong>Masalah:</strong> Single server tidak bisa handle peak traffic</p>
<p><strong>Solusi:</strong></p>
<ul>
<li><p>Deploy multiple server instances</p>
</li>
<li><p>Nginx load balancer dengan least connection algorithm</p>
</li>
<li><p>Auto-scaling based on CPU dan RPS metrics</p>
</li>
<li><p>Health check dan automatic failover</p>
</li>
</ul>
<p><strong>Configuration:</strong></p>
<pre><code class="lang-plaintext">Auto-scaling Rules:
- CPU &gt; 70% → add 2 instances
- RPS &gt; 1500 → add 2 instances
- CPU &lt; 30% for 10 minutes → remove 1 instance

Load Balancing:
- Algorithm: Least connections
- Health check: Every 10 seconds
- Timeout: 30 seconds
- Max retries: 2
</code></pre>
<p><strong>Hasil:</strong></p>
<ul>
<li><p>Throughput: 1200 RPS → 5000+ RPS</p>
</li>
<li><p>System dapat handle flash sale tanpa downtime</p>
</li>
<li><p>Cost efficient dengan auto-scaling down saat traffic normal</p>
</li>
</ul>
<h3 id="heading-hasil-akhir">Hasil Akhir</h3>
<p><strong>Before Optimization:</strong></p>
<ul>
<li><p>Average Latency: 2000ms</p>
</li>
<li><p>P95 Latency: 5000ms</p>
</li>
<li><p>P99 Latency: 8000ms</p>
</li>
<li><p>Throughput: 500 RPS</p>
</li>
<li><p>Peak Capacity: 500 RPS (crash beyond this)</p>
</li>
<li><p>Success Rate: 85% during peak</p>
</li>
<li><p>Cost per Transaction: High (fixed infrastructure)</p>
</li>
</ul>
<p><strong>After Optimization:</strong></p>
<ul>
<li><p>Average Latency: 400ms (↓ 80%)</p>
</li>
<li><p>P95 Latency: 600ms (↓ 88%)</p>
</li>
<li><p>P99 Latency: 1200ms (↓ 85%)</p>
</li>
<li><p>Throughput: 5000+ RPS (↑ 900%)</p>
</li>
<li><p>Peak Capacity: 10,000+ RPS</p>
</li>
<li><p>Success Rate: 99.5% during peak</p>
</li>
<li><p>Cost per Transaction: ↓ 60% (auto-scaling)</p>
</li>
</ul>
<p><strong>Business Impact:</strong></p>
<ul>
<li><p>Conversion rate meningkat 45%</p>
</li>
<li><p>Cart abandonment turun 50%</p>
</li>
<li><p>Customer complaints turun 80%</p>
</li>
<li><p>Revenue during flash sale meningkat 3x</p>
</li>
<li><p>Infrastructure cost per transaction turun 60%</p>
</li>
</ul>
<h2 id="heading-best-practices">Best Practices</h2>
<h3 id="heading-untuk-optimasi-latency">Untuk Optimasi Latency:</h3>
<ol>
<li><p><strong>Minimize Network Hops</strong></p>
<ul>
<li><p>Gunakan CDN untuk static content</p>
</li>
<li><p>Deploy servers dekat dengan users (multi-region)</p>
</li>
<li><p>HTTP/2 atau HTTP/3 untuk multiplexing</p>
</li>
</ul>
</li>
<li><p><strong>Database Optimization</strong></p>
<ul>
<li><p>Add proper indexes</p>
</li>
<li><p>Query optimization</p>
</li>
<li><p>Use read replicas</p>
</li>
<li><p>Connection pooling</p>
</li>
</ul>
</li>
<li><p><strong>Caching</strong></p>
<ul>
<li><p>Cache frequently accessed data</p>
</li>
<li><p>Use appropriate TTL</p>
</li>
<li><p>Implement cache warming</p>
</li>
<li><p>Multi-layer caching (CDN, Redis, application)</p>
</li>
</ul>
</li>
<li><p><strong>Code Optimization</strong></p>
<ul>
<li><p>Remove unnecessary computations</p>
</li>
<li><p>Optimize algorithms</p>
</li>
<li><p>Reduce object allocations</p>
</li>
<li><p>Use async I/O</p>
</li>
</ul>
</li>
<li><p><strong>Async Processing</strong></p>
<ul>
<li><p>Move non-critical operations to background</p>
</li>
<li><p>Use message queues</p>
</li>
<li><p>Implement event-driven architecture</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-untuk-optimasi-throughput">Untuk Optimasi Throughput:</h3>
<ol>
<li><p><strong>Horizontal Scaling</strong></p>
<ul>
<li><p>Add more server instances</p>
</li>
<li><p>Implement load balancing</p>
</li>
<li><p>Design stateless applications</p>
</li>
<li><p>Use auto-scaling</p>
</li>
</ul>
</li>
<li><p><strong>Concurrency</strong></p>
<ul>
<li><p>Multi-threading</p>
</li>
<li><p>Async I/O</p>
</li>
<li><p>Non-blocking operations</p>
</li>
<li><p>Worker pools</p>
</li>
</ul>
</li>
<li><p><strong>Resource Management</strong></p>
<ul>
<li><p>Connection pooling</p>
</li>
<li><p>Thread pooling</p>
</li>
<li><p>Memory management</p>
</li>
<li><p>Efficient resource allocation</p>
</li>
</ul>
</li>
<li><p><strong>Batch Processing</strong></p>
<ul>
<li><p>Process multiple items together</p>
</li>
<li><p>Reduce per-item overhead</p>
</li>
<li><p>Optimize for throughput over latency (when appropriate)</p>
</li>
</ul>
</li>
<li><p><strong>Remove Bottlenecks</strong></p>
<ul>
<li><p>Identify and fix bottlenecks</p>
</li>
<li><p>Scale bottleneck components</p>
</li>
<li><p>Distribute load evenly</p>
</li>
<li><p>Monitor and optimize continuously</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-monitoring-dan-alerting">Monitoring dan Alerting</h2>
<h3 id="heading-metrics-yang-harus-dimonitor">Metrics yang Harus Dimonitor:</h3>
<p><strong>Latency Metrics:</strong></p>
<ul>
<li><p>Average, P50, P95, P99, P99.9</p>
</li>
<li><p>Per endpoint/API</p>
</li>
<li><p>Per user segment</p>
</li>
<li><p>Per geographic region</p>
</li>
</ul>
<p><strong>Throughput Metrics:</strong></p>
<ul>
<li><p>Requests per second</p>
</li>
<li><p>Concurrent users</p>
</li>
<li><p>Active connections</p>
</li>
<li><p>Queue depth</p>
</li>
</ul>
<p><strong>System Metrics:</strong></p>
<ul>
<li><p>CPU usage</p>
</li>
<li><p>Memory usage</p>
</li>
<li><p>Network bandwidth</p>
</li>
<li><p>Disk I/O</p>
</li>
</ul>
<h3 id="heading-alerting-rules">Alerting Rules:</h3>
<pre><code class="lang-plaintext">Critical Alerts:
- P99 latency &gt; 3 seconds
- Error rate &gt; 5%
- Throughput drop &gt; 50%
- System availability &lt; 99.5%

Warning Alerts:
- P95 latency &gt; 1 second
- CPU usage &gt; 80%
- Memory usage &gt; 85%
- Queue depth &gt; 1000
</code></pre>
<h2 id="heading-kapan-fokus-ke-latency-vs-throughput">Kapan Fokus ke Latency vs Throughput?</h2>
<h3 id="heading-prioritas-latency">Prioritas Latency:</h3>
<ul>
<li><p><strong>User-facing applications:</strong> Web apps, mobile apps</p>
</li>
<li><p><strong>Real-time systems:</strong> Trading platforms, gaming</p>
</li>
<li><p><strong>Interactive services:</strong> Chat, video calls</p>
</li>
<li><p><strong>APIs dengan SLA ketat:</strong> Payment, authentication</p>
</li>
</ul>
<h3 id="heading-prioritas-throughput">Prioritas Throughput:</h3>
<ul>
<li><p><strong>Batch processing:</strong> Data analytics, ETL</p>
</li>
<li><p><strong>Background jobs:</strong> Email sending, report generation</p>
</li>
<li><p><strong>Log processing:</strong> Centralized logging</p>
</li>
<li><p><strong>Data pipeline:</strong> Stream processing</p>
</li>
</ul>
<h3 id="heading-butuh-keduanya-balanced">Butuh Keduanya (Balanced):</h3>
<ul>
<li><p><strong>E-commerce:</strong> Low latency checkout + high throughput untuk traffic</p>
</li>
<li><p><strong>Social media:</strong> Fast feed loading + handle millions of users</p>
</li>
<li><p><strong>Streaming:</strong> Low latency start + high bandwidth throughput</p>
</li>
<li><p><strong>Search engines:</strong> Fast results + handle massive queries</p>
</li>
</ul>
<h2 id="heading-tools-untuk-testing-dan-monitoring">Tools untuk Testing dan Monitoring</h2>
<h3 id="heading-load-testing-tools">Load Testing Tools:</h3>
<ol>
<li><p><strong>Apache Bench (ab)</strong> - Simple CLI tool</p>
</li>
<li><p><strong>JMeter</strong> - Feature-rich GUI tool</p>
</li>
<li><p><strong>Gatling</strong> - Scala-based, code as config</p>
</li>
<li><p><strong>K6</strong> - Modern, JavaScript-based</p>
</li>
<li><p><strong>Locust</strong> - Python-based, distributed testing</p>
</li>
</ol>
<h3 id="heading-monitoring-tools">Monitoring Tools:</h3>
<ol>
<li><p><strong>Prometheus + Grafana</strong> - Metrics collection and visualization</p>
</li>
<li><p><strong>New Relic</strong> - APM (Application Performance Monitoring)</p>
</li>
<li><p><strong>Datadog</strong> - Full-stack monitoring</p>
</li>
<li><p><strong>Elastic APM</strong> - Application performance monitoring</p>
</li>
<li><p><strong>CloudWatch</strong> - AWS native monitoring</p>
</li>
</ol>
<h3 id="heading-profiling-tools">Profiling Tools:</h3>
<ol>
<li><p><strong>Chrome DevTools</strong> - Frontend performance</p>
</li>
<li><p><strong>Java Flight Recorder</strong> - JVM profiling</p>
</li>
<li><p><strong>pprof</strong> - Go profiling</p>
</li>
<li><p><strong>py-spy</strong> - Python profiling</p>
</li>
<li><p><strong>perf</strong> - Linux system profiler</p>
</li>
</ol>
<h2 id="heading-kesimpulan">Kesimpulan</h2>
<p>Latency dan Throughput adalah dua metrik fundamental dalam system design yang harus dipahami dan dioptimalkan secara berbeda:</p>
<p><strong>Key Takeaways:</strong></p>
<ol>
<li><p><strong>Latency = Speed per operation</strong> → Fokus pada responsiveness</p>
</li>
<li><p><strong>Throughput = Volume per time</strong> → Fokus pada capacity</p>
</li>
<li><p><strong>Trade-off exists</strong> → Optimasi satu bisa mengorbankan yang lain</p>
</li>
<li><p><strong>Context matters</strong> → Pilih prioritas sesuai use case</p>
</li>
<li><p><strong>Measure everything</strong> → Gunakan P95/P99, bukan hanya average</p>
</li>
<li><p><strong>Continuous optimization</strong> → System perlu monitoring dan tuning berkelanjutan</p>
</li>
</ol>
<p>Seperti yang terlihat dari studi kasus e-commerce, dengan strategi optimasi yang tepat, kita bisa meningkatkan <strong>kedua metrik sekaligus</strong>. Kuncinya adalah:</p>
<ul>
<li><p>Identifikasi bottleneck dengan data</p>
</li>
<li><p>Prioritaskan optimasi yang berdampak besar</p>
</li>
<li><p>Implement caching strategis</p>
</li>
<li><p>Pisahkan critical dan non-critical path</p>
</li>
<li><p>Scale horizontal untuk throughput</p>
</li>
<li><p>Optimize code dan infrastructure untuk latency</p>
</li>
</ul>
<p>Ingat: <strong>"You can't improve what you don't measure."</strong> Selalu mulai dengan monitoring dan measurement yang solid sebelum melakukan optimasi.</p>
]]></content:encoded></item><item><title><![CDATA[Availability]]></title><description><![CDATA[Pengertian
Availability atau ketersediaan adalah proporsi waktu di mana sistem beroperasi secara normal dan dapat diakses ketika dibutuhkan. Availability mengukur seberapa andal sistem dalam memberikan layanan kepada pengguna.
Availability dihitung d...]]></description><link>https://desainsistem.com/availability</link><guid isPermaLink="true">https://desainsistem.com/availability</guid><category><![CDATA[Design Systems]]></category><category><![CDATA[design system]]></category><dc:creator><![CDATA[Desain Sistem]]></dc:creator><pubDate>Mon, 03 Nov 2025 14:26:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179693525/574602a9-ffd1-42b3-ab6f-b215ae9575d1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-pengertian">Pengertian</h2>
<p>Availability atau ketersediaan adalah proporsi waktu di mana sistem beroperasi secara normal dan dapat diakses ketika dibutuhkan. Availability mengukur seberapa andal sistem dalam memberikan layanan kepada pengguna.</p>
<p>Availability dihitung dengan formula:</p>
<pre><code class="lang-plaintext">Availability = Uptime / (Uptime + Downtime)
</code></pre>
<p>Dimana:</p>
<ul>
<li><p><strong>Uptime:</strong> Periode waktu ketika sistem berfungsi dan dapat diakses</p>
</li>
<li><p><strong>Downtime:</strong> Periode waktu ketika sistem tidak tersedia karena kegagalan, maintenance, atau masalah lainnya</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179190893/8d629356-911a-4c9c-8019-0e6a0419fa77.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-mengapa-availability-penting">Mengapa Availability Penting?</h2>
<p>Downtime dapat berakibat fatal bagi bisnis:</p>
<ul>
<li><p>Kehilangan revenue secara langsung</p>
</li>
<li><p>Kerusakan reputasi brand</p>
</li>
<li><p>Hilangnya kepercayaan pelanggan</p>
</li>
<li><p>Kerugian produktivitas</p>
</li>
<li><p>Potensi kehilangan pelanggan ke kompetitor</p>
</li>
</ul>
<p><strong>Contoh Dampak Downtime:</strong></p>
<ul>
<li><p>Amazon: Kehilangan $220.000 per menit downtime</p>
</li>
<li><p>Facebook: Kehilangan $90.000 per menit downtime</p>
</li>
<li><p>E-commerce lokal: Kehilangan ribuan transaksi selama peak hours</p>
</li>
</ul>
<h2 id="heading-availability-tiers-tingkatan">Availability Tiers (Tingkatan)</h2>
<p>Industri menggunakan sistem "nines" untuk mengukur availability:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Availability</td><td>Downtime per Tahun</td><td>Downtime per Bulan</td><td>Sebutan</td></tr>
</thead>
<tbody>
<tr>
<td>99%</td><td>3.65 hari</td><td>7.31 jam</td><td>Two nines</td></tr>
<tr>
<td>99.9%</td><td>8.76 jam</td><td>43.83 menit</td><td>Three nines</td></tr>
<tr>
<td>99.99%</td><td>52.56 menit</td><td>4.38 menit</td><td>Four nines</td></tr>
<tr>
<td>99.999%</td><td>5.26 menit</td><td>26.30 detik</td><td>Five nines</td></tr>
<tr>
<td>99.9999%</td><td>31.56 detik</td><td>2.63 detik</td><td>Six nines</td></tr>
</tbody>
</table>
</div><p><strong>Target Availability Berdasarkan Industri:</strong></p>
<ul>
<li><p>E-commerce: Minimal 99.9% (Three nines)</p>
</li>
<li><p>Banking/Finance: 99.99% - 99.999% (Four to Five nines)</p>
</li>
<li><p>Healthcare: 99.99% - 99.999% (Four to Five nines)</p>
</li>
<li><p>Social Media: 99.9% - 99.99% (Three to Four nines)</p>
</li>
<li><p>Enterprise SaaS: 99.9% - 99.99% (Three to Four nines)</p>
</li>
</ul>
<h2 id="heading-komponen-komponen-availability">Komponen-komponen Availability</h2>
<h3 id="heading-1-reliability-keandalan">1. <strong>Reliability (Keandalan)</strong></h3>
<p>Kemampuan sistem untuk berfungsi dengan benar dalam kondisi tertentu selama periode waktu tertentu.</p>
<h3 id="heading-2-fault-tolerance">2. <strong>Fault Tolerance</strong></h3>
<p>Kemampuan sistem untuk tetap beroperasi meskipun ada komponen yang gagal.</p>
<h3 id="heading-3-redundancy">3. <strong>Redundancy</strong></h3>
<p>Memiliki komponen cadangan yang dapat mengambil alih ketika komponen utama gagal.</p>
<h3 id="heading-4-recoverability">4. <strong>Recoverability</strong></h3>
<p>Kemampuan sistem untuk pulih dengan cepat setelah terjadi kegagalan.</p>
<h2 id="heading-strategi-meningkatkan-availability">Strategi Meningkatkan Availability</h2>
<h3 id="heading-1-redundancy-redundansi">1. <strong>Redundancy (Redundansi)</strong></h3>
<p>Memiliki backup untuk setiap komponen kritis.</p>
<p><strong>Jenis-jenis Redundancy:</strong></p>
<ul>
<li><p><strong>Active-Active:</strong> Semua server aktif menangani traffic</p>
</li>
<li><p><strong>Active-Passive:</strong> Server backup standby sampai server utama gagal</p>
</li>
<li><p><strong>N+1 Redundancy:</strong> N server untuk menangani load, +1 sebagai backup</p>
</li>
<li><p><strong>2N Redundancy:</strong> Dua kali jumlah komponen yang dibutuhkan</p>
</li>
</ul>
<h3 id="heading-2-load-balancing">2. <strong>Load Balancing</strong></h3>
<p>Mendistribusikan traffic ke multiple servers untuk mencegah overload.</p>
<h3 id="heading-3-health-checks-amp-monitoring">3. <strong>Health Checks &amp; Monitoring</strong></h3>
<p>Monitoring real-time untuk deteksi masalah sebelum berdampak pada pengguna.</p>
<h3 id="heading-4-failover-mechanisms">4. <strong>Failover Mechanisms</strong></h3>
<p>Automatic switching ke backup system ketika komponen utama gagal.</p>
<h3 id="heading-5-geographic-distribution">5. <strong>Geographic Distribution</strong></h3>
<p>Mendistribusikan sistem ke multiple data centers di lokasi geografis berbeda.</p>
<h3 id="heading-6-database-replication">6. <strong>Database Replication</strong></h3>
<p>Replikasi data ke multiple database servers.</p>
<p><em>(ini hanyalah contoh studi kasus saja, bisa jadi ini bukan kejadian aslinya)</em></p>
<h2 id="heading-studi-kasus-gojek">Studi Kasus: Gojek</h2>
<h3 id="heading-latar-belakang">Latar Belakang</h3>
<p>Gojek adalah super app yang menyediakan berbagai layanan dari transportasi, food delivery, hingga pembayaran digital. Dengan jutaan pengguna aktif harian dan ribuan driver partner, availability adalah hal yang sangat kritis. Downtime berarti driver tidak bisa menerima orderan dan pelanggan tidak bisa memesan layanan.</p>
<h3 id="heading-tantangan-availability">Tantangan Availability</h3>
<p><strong>Insiden Awal (2016-2017):</strong></p>
<ul>
<li><p>Aplikasi sering crash saat jam sibuk (7-9 pagi, 5-8 malam)</p>
</li>
<li><p>Driver kehilangan orderan karena sistem tidak responsif</p>
</li>
<li><p>Customer tidak bisa melakukan pembayaran</p>
</li>
<li><p>Downtime mencapai 2-3 jam per bulan (availability ~99.5%)</p>
</li>
</ul>
<p><strong>Dampak Bisnis:</strong></p>
<ul>
<li><p>Kehilangan revenue Rp 500 juta per jam downtime</p>
</li>
<li><p>Ribuan komplain di social media</p>
</li>
<li><p>Driver beralih ke kompetitor</p>
</li>
<li><p>Trust pelanggan menurun drastis</p>
</li>
</ul>
<h3 id="heading-solusi-yang-diterapkan">Solusi yang Diterapkan</h3>
<h4 id="heading-1-multi-region-architecture">1. <strong>Multi-Region Architecture</strong></h4>
<p>Gojek mendeploy infrastruktur di multiple availability zones dan regions:</p>
<p><strong>Implementasi:</strong></p>
<ul>
<li><p><strong>Primary Region:</strong> Jakarta (Google Cloud Asia-Southeast1)</p>
</li>
<li><p><strong>Secondary Region:</strong> Singapore (Google Cloud Asia-Southeast2)</p>
</li>
<li><p><strong>Tertiary Region:</strong> Australia (Google Cloud Australia-Southeast1)</p>
</li>
</ul>
<p><strong>Manfaat:</strong> Jika satu region down, traffic otomatis di-route ke region lain.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179129059/3d05c3db-5b60-4f19-bcff-60d652675e47.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-2-database-replication-strategy">2. <strong>Database Replication Strategy</strong></h4>
<p>Implementasi database replication dengan multiple layers:</p>
<p><strong>Master-Slave Replication:</strong></p>
<pre><code class="lang-plaintext">Master DB (Jakarta) 
  ├─&gt; Slave 1 (Jakarta - Different Zone)
  ├─&gt; Slave 2 (Singapore)
  └─&gt; Slave 3 (Australia)
</code></pre>
<p><strong>Karakteristik:</strong></p>
<ul>
<li><p>Write operations ke Master</p>
</li>
<li><p>Read operations ke Slaves</p>
</li>
<li><p>Automatic failover jika Master down</p>
</li>
<li><p>Replication lag &lt; 1 detik</p>
</li>
</ul>
<h4 id="heading-3-circuit-breaker-pattern">3. <strong>Circuit Breaker Pattern</strong></h4>
<p>Implementasi circuit breaker untuk mencegah cascading failures:</p>
<p><strong>Cara Kerja:</strong></p>
<ul>
<li><p>Monitor failure rate setiap service</p>
</li>
<li><p>Jika failure &gt; 50% dalam 10 detik → Circuit OPEN</p>
</li>
<li><p>Request langsung return error tanpa hit service</p>
</li>
<li><p>Setelah 30 detik → Circuit HALF-OPEN</p>
</li>
<li><p>Test dengan beberapa request</p>
</li>
<li><p>Jika success → Circuit CLOSED (normal)</p>
</li>
</ul>
<p><strong>Hasil:</strong> Mencegah satu service yang bermasalah menjatuhkan seluruh sistem.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179632117/f928d345-40d1-40a2-9976-cbefb271a523.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-4-comprehensive-monitoring">4. <strong>Comprehensive Monitoring</strong></h4>
<p>Implementasi monitoring system yang robust:</p>
<p><strong>Tools yang Digunakan:</strong></p>
<ul>
<li><p><strong>Prometheus:</strong> Untuk metrics collection</p>
</li>
<li><p><strong>Grafana:</strong> Untuk visualization</p>
</li>
<li><p><strong>PagerDuty:</strong> Untuk alerting dan on-call management</p>
</li>
<li><p><strong>ELK Stack:</strong> Untuk log aggregation dan analysis</p>
</li>
</ul>
<p><strong>Metrics yang Dimonitor:</strong></p>
<ul>
<li><p>Response time per endpoint</p>
</li>
<li><p>Error rate per service</p>
</li>
<li><p>Database connection pool</p>
</li>
<li><p>CPU, memory, disk usage</p>
</li>
<li><p>Network latency</p>
</li>
<li><p>Request throughput</p>
</li>
</ul>
<p><strong>Alert Configuration:</strong></p>
<pre><code class="lang-plaintext">- Response time &gt; 500ms selama 2 menit → Warning
- Response time &gt; 1000ms selama 1 menit → Critical
- Error rate &gt; 1% → Warning
- Error rate &gt; 5% → Critical
- CPU usage &gt; 80% → Warning
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179481701/01e43ff8-565f-4bff-b37d-4575bdb3c9dd.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-5-graceful-degradation">5. <strong>Graceful Degradation</strong></h4>
<p>Implementasi graceful degradation untuk layanan non-critical:</p>
<p><strong>Contoh Implementasi:</strong></p>
<ul>
<li><p>Ketika sistem overload, fitur recommendation dimatikan</p>
</li>
<li><p>Promo dan ads tidak ditampilkan</p>
</li>
<li><p>Historical data ditampilkan dari cache</p>
</li>
<li><p>Core function (booking, payment) tetap berjalan</p>
</li>
</ul>
<p><strong>Prioritas Service:</strong></p>
<pre><code class="lang-plaintext">Priority 1 (Must Work): Order placement, Payment, Driver matching
Priority 2 (Important): Order tracking, Customer support
Priority 3 (Nice to Have): Recommendations, Ads, Analytics
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179409800/8bee8c76-cc77-437a-992c-b5b71a8e9313.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-6-chaos-engineering">6. <strong>Chaos Engineering</strong></h4>
<p>Gojek menerapkan chaos engineering untuk test system resilience: (<a target="_blank" href="https://www.gojek.io/blog/loki-our-chaos-engineering-tool-for-data-infrastructure-at-go-jek">https://www.gojek.io/blog/loki-our-chaos-engineering-tool-for-data-infrastructure-at-go-jek</a>)</p>
<p><strong>Praktik yang Dilakukan:</strong></p>
<ul>
<li><p>Randomly kill service instances di production</p>
</li>
<li><p>Simulate network latency</p>
</li>
<li><p>Simulate database failover</p>
</li>
<li><p>Inject errors secara random</p>
</li>
<li><p>Test backup &amp; recovery procedures</p>
</li>
</ul>
<p><strong>Tool:</strong> Netflix Chaos Monkey</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762179325468/ef902364-2fe3-426d-9496-04325348b5f2.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-7-rate-limiting-amp-throttling">7. <strong>Rate Limiting &amp; Throttling</strong></h4>
<p>Implementasi rate limiting untuk mencegah system overload:</p>
<p><strong>Configuration:</strong></p>
<pre><code class="lang-plaintext">API Rate Limits:
- Per User: 100 requests/minute
- Per IP: 500 requests/minute
- Per Service: 10,000 requests/second

Throttling Rules:
- Non-critical API: 50% bandwidth saat high load
- Background jobs: Pause saat CPU &gt; 90%
</code></pre>
<h4 id="heading-8-zero-downtime-deployment">8. <strong>Zero-Downtime Deployment</strong></h4>
<p>Implementasi blue-green deployment dan canary releases:</p>
<p><strong>Blue-Green Deployment:</strong></p>
<ul>
<li><p>Deploy versi baru ke environment terpisah (Green)</p>
</li>
<li><p>Test di Green environment</p>
</li>
<li><p>Switch traffic dari Blue ke Green</p>
</li>
<li><p>Rollback instant jika ada masalah</p>
</li>
</ul>
<p><strong>Canary Release:</strong></p>
<ul>
<li><p>Deploy ke 5% traffic dulu</p>
</li>
<li><p>Monitor error rate dan performance</p>
</li>
<li><p>Gradually increase ke 100%</p>
</li>
<li><p>Automatic rollback jika error spike</p>
</li>
</ul>
<h3 id="heading-hasil-implementasi">Hasil Implementasi</h3>
<p><strong>Metrik Availability:</strong></p>
<ul>
<li><p><strong>Sebelum:</strong> 99.5% availability (~3.65 jam downtime/bulan)</p>
</li>
<li><p><strong>Sesudah:</strong> 99.95% availability (~21.6 menit downtime/bulan)</p>
</li>
<li><p><strong>Target 2024:</strong> 99.99% availability (Four nines)</p>
</li>
</ul>
<p><strong>Metrik Teknis:</strong></p>
<ul>
<li><p><strong>MTBF (Mean Time Between Failures):</strong> Meningkat dari 30 hari menjadi 180 hari</p>
</li>
<li><p><strong>MTTR (Mean Time To Recovery):</strong> Turun dari 45 menit menjadi 5 menit</p>
</li>
<li><p><strong>Incident Response Time:</strong> Turun dari 15 menit menjadi 2 menit</p>
</li>
<li><p><strong>False Positive Alerts:</strong> Turun dari 40% menjadi 5%</p>
</li>
</ul>
<p><strong>Impact Bisnis:</strong></p>
<ul>
<li><p>Revenue loss karena downtime turun 85%</p>
</li>
<li><p>Customer satisfaction score meningkat dari 3.8 menjadi 4.6</p>
</li>
<li><p>Driver retention rate meningkat 25%</p>
</li>
<li><p>Cost of downtime turun dari Rp 1.5M/bulan menjadi Rp 200K/bulan</p>
</li>
<li><p>Jumlah incident critical turun dari 8/bulan menjadi 1/bulan</p>
</li>
</ul>
<h3 id="heading-pelajaran-yang-dapat-diambil">Pelajaran yang Dapat Diambil</h3>
<ol>
<li><p><strong>Monitoring adalah Fundamental:</strong> Tidak bisa meningkatkan yang tidak diukur</p>
</li>
<li><p><strong>Automate Everything:</strong> Manual intervention lambat dan error-prone</p>
</li>
<li><p><strong>Plan for Failure:</strong> Assume setiap komponen akan gagal</p>
</li>
<li><p><strong>Test in Production:</strong> Chaos engineering mengungkap masalah yang tidak terlihat</p>
</li>
<li><p><strong>Gradual Rollout:</strong> Canary deployment mencegah large-scale failure</p>
</li>
<li><p><strong>Prioritize Services:</strong> Tidak semua service harus always available</p>
</li>
<li><p><strong>Fast Recovery &gt; No Failure:</strong> Focus pada MTTR, bukan hanya prevent failure</p>
</li>
</ol>
<hr />
<h2 id="heading-trade-offs-dalam-availability">Trade-offs dalam Availability</h2>
<h3 id="heading-1-availability-vs-cost">1. <strong>Availability vs Cost</strong></h3>
<p>Higher availability = Higher cost</p>
<p><strong>Contoh:</strong></p>
<ul>
<li><p>99.9% availability → 1x cost</p>
</li>
<li><p>99.99% availability → 5-10x cost</p>
</li>
<li><p>99.999% availability → 50-100x cost</p>
</li>
</ul>
<h3 id="heading-2-availability-vs-consistency">2. <strong>Availability vs Consistency</strong></h3>
<p>CAP Theorem: Tidak bisa achieve ketiganya (Consistency, Availability, Partition Tolerance) secara bersamaan.</p>
<p><strong>Pilihan:</strong></p>
<ul>
<li><p><strong>CP Systems:</strong> Prioritize Consistency over Availability (Banking)</p>
</li>
<li><p><strong>AP Systems:</strong> Prioritize Availability over Consistency (Social Media)</p>
</li>
</ul>
<h3 id="heading-3-availability-vs-complexity">3. <strong>Availability vs Complexity</strong></h3>
<p>System yang highly available cenderung lebih complex.</p>
<p><strong>Balance yang Harus Dijaga:</strong></p>
<ul>
<li><p>Complexity → Harder to maintain</p>
</li>
<li><p>More components → More potential failures</p>
</li>
<li><p>Over-engineering → Waste resources</p>
</li>
</ul>
<h2 id="heading-calculating-availability">Calculating Availability</h2>
<h3 id="heading-formula-dasar">Formula Dasar</h3>
<pre><code class="lang-plaintext">Availability = Uptime / (Uptime + Downtime) × 100%
</code></pre>
<h3 id="heading-composite-availability">Composite Availability</h3>
<p>Untuk sistem dengan multiple components:</p>
<p><strong>Serial Components (all must work):</strong></p>
<pre><code class="lang-plaintext">Total Availability = A1 × A2 × A3 × ... × An

Example:
Load Balancer (99.9%) × App Server (99.9%) × Database (99.9%)
= 0.999 × 0.999 × 0.999
= 0.997 = 99.7%
</code></pre>
<p><strong>Parallel Components (any can work):</strong></p>
<pre><code class="lang-plaintext">Total Availability = 1 - [(1-A1) × (1-A2) × ... × (1-An)]

Example: 2 servers with 99% availability each
= 1 - [(1-0.99) × (1-0.99)]
= 1 - [0.01 × 0.01]
= 1 - 0.0001
= 0.9999 = 99.99%
</code></pre>
<h2 id="heading-sla-service-level-agreement">SLA (Service Level Agreement)</h2>
<h3 id="heading-komponen-sla">Komponen SLA</h3>
<ul>
<li><p><strong>SLI (Service Level Indicator):</strong> Metrics yang diukur</p>
</li>
<li><p><strong>SLO (Service Level Objective):</strong> Target internal</p>
</li>
<li><p><strong>SLA (Service Level Agreement):</strong> Kontrak dengan customer</p>
</li>
</ul>
<p><strong>Contoh:</strong></p>
<pre><code class="lang-plaintext">SLI: API response time &lt; 200ms
SLO: 99.9% of requests &lt; 200ms (internal target)
SLA: 99.5% of requests &lt; 200ms (customer guarantee)
</code></pre>
<h2 id="heading-tools-untuk-monitoring-availability">Tools untuk Monitoring Availability</h2>
<h3 id="heading-1-uptime-monitoring">1. <strong>Uptime Monitoring</strong></h3>
<ul>
<li><p>Pingdom</p>
</li>
<li><p>UptimeRobot</p>
</li>
<li><p>StatusCake</p>
</li>
<li><p>Site24x7</p>
</li>
</ul>
<h3 id="heading-2-apm-application-performance-monitoring">2. <strong>APM (Application Performance Monitoring)</strong></h3>
<ul>
<li><p>New Relic</p>
</li>
<li><p>Datadog</p>
</li>
<li><p>Dynatrace</p>
</li>
<li><p>AppDynamics</p>
</li>
</ul>
<h3 id="heading-3-infrastructure-monitoring">3. <strong>Infrastructure Monitoring</strong></h3>
<ul>
<li><p>Prometheus + Grafana</p>
</li>
<li><p>Nagios</p>
</li>
<li><p>Zabbix</p>
</li>
<li><p>CloudWatch (AWS)</p>
</li>
</ul>
<h3 id="heading-4-log-management">4. <strong>Log Management</strong></h3>
<ul>
<li><p>ELK Stack (Elasticsearch, Logstash, Kibana)</p>
</li>
<li><p>Splunk</p>
</li>
<li><p>Sumo Logic</p>
</li>
<li><p>Papertrail</p>
</li>
</ul>
<hr />
<h2 id="heading-kesimpulan">Kesimpulan</h2>
<p>Availability adalah aspek krusial dalam system design yang berdampak langsung pada user experience dan business revenue. Seperti yang ditunjukkan dalam studi kasus Gojek, pencapaian high availability memerlukan kombinasi dari:</p>
<ol>
<li><p><strong>Redundancy</strong> di semua layer</p>
</li>
<li><p><strong>Monitoring</strong> yang comprehensive</p>
</li>
<li><p><strong>Automated failover</strong> mechanisms</p>
</li>
<li><p><strong>Geographic distribution</strong></p>
</li>
<li><p><strong>Chaos engineering</strong> untuk testing</p>
</li>
<li><p><strong>Clear incident response</strong> procedures</p>
</li>
</ol>
<p>Kunci sukses adalah memahami bahwa availability bukan hanya masalah teknis, tetapi juga <em>business decision</em>. Organisasi harus menentukan level availability yang sesuai dengan kebutuhan bisnis dan budget yang tersedia, kemudian secara konsisten maintain dan improve sistem untuk mencapai target tersebut.</p>
<p>Ingat: <strong>"Hope is not a strategy"</strong> - Selalu memiliki rencana untuk gagal dan membangun sistem yang dapat menghandle dan recover dari kegagalan tersebut</p>
]]></content:encoded></item><item><title><![CDATA[Skalabilitas]]></title><description><![CDATA[Pengertian
Scalability atau skalabilitas adalah kemampuan suatu sistem untuk menangani peningkatan beban kerja dengan cara menambahkan sumber daya ke dalam sistem. Seiring pertumbuhan sistem, performa akan mulai menurun kecuali kita mengadaptasinya u...]]></description><link>https://desainsistem.com/skalabilitas</link><guid isPermaLink="true">https://desainsistem.com/skalabilitas</guid><category><![CDATA[dasar]]></category><dc:creator><![CDATA[Desain Sistem]]></dc:creator><pubDate>Sun, 02 Nov 2025 15:03:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1762097194732/22094bf0-40d9-45df-af9a-27863a75254f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-pengertian">Pengertian</h2>
<p>Scalability atau skalabilitas adalah kemampuan suatu sistem untuk menangani peningkatan beban kerja dengan cara menambahkan sumber daya ke dalam sistem. Seiring pertumbuhan sistem, performa akan mulai menurun kecuali kita mengadaptasinya untuk menghadapi pertumbuhan tersebut.</p>
<p>Sebuah sistem yang dapat terus berkembang untuk mendukung peningkatan jumlah pekerjaan disebut sebagai sistem yang <strong>scalable</strong> (dapat diskalakan).</p>
<h2 id="heading-mengapa-skalabilitas-penting">Mengapa Skalabilitas Penting?</h2>
<p>Dalam era digital saat ini, aplikasi dan layanan online dapat mengalami pertumbuhan pengguna yang sangat cepat. Tanpa skalabilitas yang baik, sistem akan:</p>
<ul>
<li><p>Mengalami penurunan performa</p>
</li>
<li><p>Meningkatkan waktu respons</p>
</li>
<li><p>Berpotensi mengalami downtime</p>
</li>
<li><p>Memberikan pengalaman pengguna yang buruk</p>
</li>
</ul>
<h2 id="heading-jenis-jenis-scalability">Jenis-jenis Scalability</h2>
<h3 id="heading-1-vertical-scaling-scale-up">1. <strong>Vertical Scaling (Scale Up)</strong></h3>
<p>Menambah kapasitas server yang ada dengan meningkatkan spesifikasi hardware seperti CPU, RAM, atau storage.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762095625449/e433c107-9430-4185-bd48-15c48d2b007d.png" alt class="image--center mx-auto" /></p>
<p><strong>Kelebihan:</strong></p>
<ul>
<li><p>Implementasi lebih sederhana</p>
</li>
<li><p>Tidak perlu mengubah arsitektur aplikasi</p>
</li>
<li><p>Tidak ada kompleksitas distributed system</p>
</li>
</ul>
<p><strong>Kekurangan:</strong></p>
<ul>
<li><p>Ada batasan maksimal upgrade hardware</p>
</li>
<li><p>Biaya meningkat drastis untuk hardware kelas atas</p>
</li>
<li><p>Single point of failure</p>
</li>
</ul>
<h3 id="heading-2-horizontal-scaling-scale-out">2. <strong>Horizontal Scaling (Scale Out)</strong></h3>
<p>Menambah jumlah server atau node untuk mendistribusikan beban kerja.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762096775677/f2c63a34-1ad6-4b24-807f-8bbbfbb0557a.png" alt class="image--center mx-auto" /></p>
<p><strong>Kelebihan:</strong></p>
<ul>
<li><p>Tidak ada batasan teoritis untuk pertumbuhan</p>
</li>
<li><p>Lebih cost-effective</p>
</li>
<li><p>Meningkatkan redundancy dan availability</p>
</li>
</ul>
<p><strong>Kekurangan:</strong></p>
<ul>
<li><p>Implementasi lebih kompleks</p>
</li>
<li><p>Memerlukan load balancer</p>
</li>
<li><p>Perlu menangani konsistensi data</p>
</li>
</ul>
<h2 id="heading-studi-kasus-tokopedia">Studi Kasus: Tokopedia</h2>
<h3 id="heading-latar-belakang">Latar Belakang</h3>
<p>Tokopedia adalah salah satu e-commerce terbesar di Indonesia yang mengalami pertumbuhan pesat sejak didirikan tahun 2009. Pada event-event besar seperti Harbolnas (Hari Belanja Online Nasional), traffic bisa melonjak hingga 10-20 kali lipat dari hari biasa.</p>
<h3 id="heading-tantangan-scalability">Tantangan Scalability</h3>
<p><strong>Sebelum Implementasi:</strong></p>
<ul>
<li><p>Server sering down saat traffic tinggi</p>
</li>
<li><p>Waktu loading halaman mencapai 10-15 detik saat peak hour</p>
</li>
<li><p>Proses checkout gagal karena database overload</p>
</li>
<li><p>Banyak komplain pengguna di media sosial</p>
</li>
</ul>
<p><strong>Masalah Teknis:</strong></p>
<ul>
<li><p>Database monolitik tidak mampu menangani ribuan transaksi per detik</p>
</li>
<li><p>Frontend dan backend dalam satu server</p>
</li>
<li><p>Tidak ada caching mechanism</p>
</li>
<li><p>Image hosting di server utama memperlambat loading</p>
</li>
</ul>
<h3 id="heading-solusi-yang-diterapkan">Solusi yang Diterapkan</h3>
<h4 id="heading-1-microservices-architecture">1. <strong>Microservices Architecture</strong></h4>
<p>Tokopedia memecah aplikasi monolitik menjadi microservices:</p>
<ul>
<li><p>Service untuk product catalog</p>
</li>
<li><p>Service untuk user authentication</p>
</li>
<li><p>Service untuk payment</p>
</li>
<li><p>Service untuk cart dan checkout</p>
</li>
<li><p>Service untuk search</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762096806198/c9b128ac-4992-4fbc-8e27-88961abb05a7.png" alt class="image--center mx-auto" /></p>
<p><strong>Manfaat:</strong> Setiap service dapat di-scale secara independen sesuai kebutuhan.</p>
<h4 id="heading-2-database-sharding">2. <strong>Database Sharding</strong></h4>
<p>Membagi database menjadi beberapa shard berdasarkan:</p>
<ul>
<li><p>Region geografis (Jakarta, Surabaya, Medan, dll)</p>
</li>
<li><p>User ID range</p>
</li>
<li><p>Product categories</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762096867364/647221f9-aa92-4d8b-87b9-283c472e75b1.png" alt class="image--center mx-auto" /></p>
<p><strong>Contoh Implementasi:</strong></p>
<pre><code class="lang-plaintext">Shard 1: User ID 1-1.000.000 → Server DB Jakarta
Shard 2: User ID 1.000.001-2.000.000 → Server DB Bandung
Shard 3: User ID 2.000.001-3.000.000 → Server DB Surabaya
</code></pre>
<h4 id="heading-3-caching-strategy">3. <strong>Caching Strategy</strong></h4>
<p>Implementasi multi-layer caching:</p>
<ul>
<li><p><strong>CDN (Content Delivery Network):</strong> Untuk static assets (gambar, CSS, JS)</p>
</li>
<li><p><strong>Redis Cache:</strong> Untuk data produk populer, session data</p>
</li>
<li><p><strong>Application Cache:</strong> Untuk query results yang sering diakses</p>
</li>
</ul>
<p><strong>Hasil:</strong> Loading halaman homepage turun dari 10 detik menjadi 2 detik.</p>
<h4 id="heading-4-load-balancing">4. <strong>Load Balancing</strong></h4>
<p>Menggunakan load balancer untuk mendistribusikan traffic:</p>
<ul>
<li><p>Round-robin untuk distribusi merata</p>
</li>
<li><p>Least connection untuk server yang paling tidak sibuk</p>
</li>
<li><p>Geographic routing untuk latency minimal</p>
</li>
</ul>
<h4 id="heading-5-auto-scaling-dengan-cloud">5. <strong>Auto-Scaling dengan Cloud</strong></h4>
<p>Implementasi auto-scaling di cloud infrastructure:</p>
<ul>
<li><p>Monitoring CPU usage, memory, dan request rate</p>
</li>
<li><p>Automatic spin up server baru ketika threshold tercapai</p>
</li>
<li><p>Automatic scale down saat traffic normal</p>
</li>
</ul>
<p><strong>Konfigurasi Auto-Scaling:</strong></p>
<pre><code class="lang-plaintext">- CPU Usage &gt; 70% → tambah 2 server
- CPU Usage &gt; 85% → tambah 5 server
- CPU Usage &lt; 30% selama 10 menit → kurangi 1 server
</code></pre>
<h4 id="heading-6-message-queue">6. <strong>Message Queue</strong></h4>
<p>Menggunakan message queue (seperti RabbitMQ/Kafka) untuk:</p>
<ul>
<li><p>Proses asynchronous (email notification, SMS)</p>
</li>
<li><p>Mengurangi beban real-time processing</p>
</li>
<li><p>Buffering request saat traffic tinggi</p>
</li>
</ul>
<h3 id="heading-hasil-implementasi">Hasil Implementasi</h3>
<p>Ini adalah contoh dari metrik setelah dilakukan proses sebelumnya</p>
<p><strong>Metrik Performa:</strong></p>
<ul>
<li><p><strong>Response Time:</strong> Turun dari 10 detik menjadi 1-2 detik</p>
</li>
<li><p><strong>Throughput:</strong> Meningkat dari 1.000 request/detik menjadi 50.000 request/detik</p>
</li>
<li><p><strong>Availability:</strong> Meningkat dari 95% menjadi 99.9% (Three nines)</p>
</li>
<li><p><strong>Cost Efficiency:</strong> Biaya per transaksi turun 40% dengan cloud auto-scaling</p>
</li>
</ul>
<p><strong>Impact Bisnis:</strong></p>
<ul>
<li><p>Peningkatan conversion rate 35%</p>
</li>
<li><p>Pengurangan cart abandonment 50%</p>
</li>
<li><p>Customer satisfaction score meningkat dari 3.2 menjadi 4.5</p>
</li>
<li><p>Mampu menangani 2 juta concurrent users saat Harbolnas</p>
</li>
</ul>
<h3 id="heading-pelajaran-yang-dapat-diambil">Pelajaran yang Dapat Diambil</h3>
<ol>
<li><p><strong>Mulai dengan Monitoring:</strong> Tidak bisa mengoptimalkan yang tidak bisa diukur</p>
</li>
<li><p><strong>Incremental Scaling:</strong> Tidak perlu langsung microservices, bisa bertahap</p>
</li>
<li><p><strong>Database adalah Bottleneck:</strong> Seringkali database menjadi bottleneck pertama</p>
</li>
<li><p><strong>Caching is King:</strong> Implementasi caching yang tepat memberikan hasil signifikan</p>
</li>
<li><p><strong>Prepare for Failure:</strong> Sistem harus dirancang dengan asumsi komponen akan gagal</p>
</li>
</ol>
<h2 id="heading-best-practices-untuk-scalability">Best Practices untuk Scalability</h2>
<ol>
<li><p><strong>Stateless Application:</strong> Hindari menyimpan state di application server</p>
</li>
<li><p><strong>Database Connection Pooling:</strong> Reuse koneksi database</p>
</li>
<li><p><strong>Asynchronous Processing:</strong> Pisahkan proses yang bisa dilakukan async</p>
</li>
<li><p><strong>Content Delivery Network:</strong> Gunakan CDN untuk static content</p>
</li>
<li><p><strong>Monitoring dan Alerting:</strong> Real-time monitoring untuk deteksi masalah dini</p>
</li>
</ol>
<h2 id="heading-kesimpulan">Kesimpulan</h2>
<p>Skalabilitas (Scalability) adalah aspek fundamental dalam system design modern. Seperti yang ditunjukkan dalam studi kasus Tokopedia, implementasi strategi scalability yang tepat tidak hanya meningkatkan performa teknis, tetapi juga berdampak langsung pada kepuasan pengguna dan pertumbuhan bisnis.</p>
<p>Kunci keberhasilan skalabilitas adalah perencanaan yang matang, monitoring yang konsisten, dan kesediaan untuk terus beradaptasi dengan pertumbuhan sistem.</p>
]]></content:encoded></item></channel></rss>