Scaling Aplikasi Flask: Horizontal Scaling dan Caching dengan Redis

Scaling Aplikasi Flask: Horizontal Scaling dan Caching dengan Redis

Sun Jun 07 2026
614 words · 5 minutes

Di artikel ini, kita akan membahas secara mendalam cara scaling aplikasi Flask, dengan fokus pada Horizontal Scaling dan Caching menggunakan Redis — dua teknik paling efektif dan umum digunakan.


1. Mengapa Perlu Scaling?

Beberapa tanda bahwa aplikasi Anda perlu di-scale:

  • Response time semakin lambat saat traffic naik
  • Server sering mengalami high CPU atau memory usage
  • Database query menjadi bottleneck
  • User mengalami timeout atau error 5xx
  • Ingin meningkatkan availability (high availability)

2. Vertical Scaling vs Horizontal Scaling

AspekVertical ScalingHorizontal Scaling
Cara kerjaMenambah resource (CPU/RAM)Menambah jumlah instance/server
BiayaMahal (hardware lebih mahal)Lebih murah & fleksibel
KompleksitasRendahLebih tinggi
DowntimeSering dibutuhkan restartBisa zero-downtime
Scalability limitTerbatas oleh hardwareHampir tidak terbatas
Rekomendasi untuk FlaskCocok untuk tahap awalPaling direkomendasikan untuk production

Kesimpulan: Untuk aplikasi Flask modern, Horizontal Scaling adalah pilihan yang lebih baik dan sustainable.


3. Horizontal Scaling untuk Flask

Untuk melakukan horizontal scaling, Anda perlu:

  1. Menjalankan multiple instance aplikasi Flask
  2. Menggunakan Load Balancer di depan
  3. Menyimpan session dan cache di tempat terpusat (Redis)
  4. Menggunakan shared database

Arsitektur Dasar Horizontal Scaling

User → Load Balancer (Nginx/HAProxy/Cloud)
[Flask App 1] [Flask App 2] [Flask App 3]
↓ ↓ ↓
Redis (Cache + Session)
PostgreSQL / MySQL (Database)

4. Caching dengan Redis (Sangat Penting)

Redis adalah in-memory data store yang sangat cepat. Caching adalah salah satu cara paling efektif untuk meningkatkan performa aplikasi Flask.

Instalasi Redis

Terminal window
# Ubuntu/Debian
sudo apt install redis-server
# Atau menggunakan Docker
docker run -d --name redis -p 6379:6379 redis

Integrasi Redis dengan Flask

Gunakan ekstensi Flask-Caching atau redis-py:

Terminal window
pip install flask-caching redis

Contoh Penggunaan Caching

from flask_caching import Cache
cache = Cache(config={'CACHE_TYPE': 'redis', 'CACHE_REDIS_URL': 'redis://localhost:6379/0'})
def create_app():
app = Flask(__name__)
cache.init_app(app)
return app
@app.route('/api/posts')
@cache.cached(timeout=300) # Cache selama 5 menit
def get_posts():
posts = Post.query.all()
return jsonify([post.to_dict() for post in posts])

Strategi Caching yang Baik

Tipe DataWaktu Cache yang DirekomendasikanAlasan
Data yang jarang berubah5 - 60 menitMengurangi beban database
User sessionSesuai kebutuhanHarus konsisten antar instance
API response1 - 10 menitMeningkatkan response time
Static contentSangat lama / immutableBisa pakai CDN

5. Session Management dengan Redis

Saat menggunakan multiple instance Flask, session tidak boleh disimpan di memory lokal karena user bisa diarahkan ke instance berbeda.

Solusi: Simpan session di Redis.

Konfigurasi Flask Session dengan Redis

from flask import Flask
from flask_session import Session
import redis
app = Flask(__name__)
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.from_url('redis://localhost:6379')
Session(app)

Dengan cara ini, session user akan tersedia di semua instance Flask.


6. Load Balancer

Menggunakan Nginx sebagai Load Balancer

upstream flask_app {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://flask_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

Alternatif Load Balancer

  • HAProxy (sangat powerful)
  • Traefik (bagus untuk Docker)
  • Cloud Load Balancer (AWS ALB, DigitalOcean Load Balancer, Cloudflare, dll)

7. Background Tasks dengan Celery + Redis

Untuk tugas yang berat (mengirim email, generate laporan, resize gambar), jangan jalankan di request cycle.

Gunakan Celery dengan Redis sebagai message broker.

Terminal window
pip install celery redis

Contoh Penggunaan Celery

from celery import Celery
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def send_welcome_email(user_id):
# proses berat di sini
pass

8. Arsitektur yang Direkomendasikan untuk Scaling

Berikut arsitektur production yang umum digunakan:

Internet
Cloudflare / CDN (Static + DDoS Protection)
Load Balancer (Nginx / Traefik / Cloud LB)
Flask App Instances (Docker / Kubernetes)
Redis Cluster (Cache + Session + Celery Broker)
PostgreSQL (Primary + Read Replicas)

9. Best Practices Scaling Flask

PraktikRekomendasi
Gunakan Redis untuk cachingHampir wajib untuk performa
Simpan session di RedisWajib saat horizontal scaling
Hindari menyimpan state di memoryAplikasi harus stateless
Gunakan database connection poolingSQLAlchemy sudah support
Implementasikan rate limitingGunakan Flask-Limiter
Monitor performaGunakan Prometheus + Grafana atau Sentry
Gunakan CDN untuk static filesCloudflare, Bunny.net, dll
Siapkan auto-scalingJika menggunakan Kubernetes atau cloud platform

Kesimpulan

Scaling aplikasi Flask tidak harus rumit jika dilakukan secara bertahap:

  1. Mulai dengan caching menggunakan Redis (impact paling besar)
  2. Pindahkan session ke Redis
  3. Tambahkan multiple instance + Load Balancer
  4. Gunakan Celery untuk background jobs
  5. Monitor dan optimalkan secara terus-menerus

Dengan kombinasi Horizontal Scaling dan Redis Caching, aplikasi Flask Anda bisa menangani traffic yang jauh lebih tinggi dengan tetap menjaga performa dan stabilitas.

Scaling adalah proses iteratif. Mulailah dari yang paling memberikan dampak besar (caching), lalu lanjutkan ke arsitektur yang lebih kompleks sesuai kebutuhan.


Thanks for reading!

Scaling Aplikasi Flask: Horizontal Scaling dan Caching dengan Redis

Sun Jun 07 2026
614 words · 5 minutes