Vaka çalışması 01 — Dil öğrenme uygulaması · iOS ve Android
Pingua
Pingua, iOS ve Android için bir dil öğrenme uygulaması. Backend’ini sıfırdan kurdum — yedi Node.js / TypeScript servisi ve bir Go real-time gateway — Back Office’i ve pingua.app web sitesini geliştirdim, hepsini production’da işlettim.
Problem
Auth, gamification, içerik, iletişim, yedekleme ve AI ayrı servisler olarak çalışıyordu. Sistemin bir bütün olarak servis sınırları boyunca tutarlı kalması, olayları gerçek zamanlı iletmesi ve okumaları hızlı tutması gerekiyordu; hem de production’da sağlıklı çalışmaya devam ederken.
01 / 07
Sıfırdan mikroservisler
Uygulamanın, servis servis gelişebilen ve yavaş işleri istek akışının dışında tutan bir backend’e ihtiyacı vardı.
Backend’i Node.js / TypeScript ve Express.js ile mikroservis mimarisinde sıfırdan kurdum: Auth, Gamification, Content, Communication, Backup, AI Manager API ve AI Automation. Servisler arası asenkron iletişimi ve e-posta gönderimi gibi arka plan işlerini AWS SQS ile kurguladım.
- Node.js / TypeScript
- Express.js
- Mikroservisler
- AWS SQS
- Asenkron servis iletişimi
- Arka plan işleri (e-posta)
02 / 07
Tasarım gereği tutarlılık
Birden fazla servise yayılan bir güncelleme, bir adım hata verdiğinde ya da mesaj iki kez geldiğinde yarım kalmamalı.
Transaction ve outbox pattern ile her olayı, onu doğuran yazma işlemiyle birlikte kaydettim; yarıda kalan çok servisli akışları saga / compensation ile geri aldım. Kuyruktaki işlerde idempotent consumer ve DLQ, eşzamanlı erişimde veritabanı lock’ları, dış çağrılarda circuit breaker kullandım.
- Transaction
- Outbox pattern
- Saga / compensation
- Idempotent consumer
- DLQ
- Veritabanı lock’ları
- Circuit breaker
03 / 07
Çevrimiçi olsun olmasın
Etkileşimler ve bildirimler çevrimiçi kullanıcıya anında ulaşmalı, çevrimdışı kullanıcıya da yine iletilmeliydi.
Go / WebSocket tabanlı gerçek zamanlı gateway’i geliştirdim ve teslimatı tek bir soru etrafında kurguladım: Kullanıcı çevrimiçi mi? Öyleyse olay socket üzerinden gider; değilse push notification olarak ulaşır.
- Go
- WebSocket
- Real-Time Gateway
- Çevrimiçiyse socket
- Çevrimdışıysa push notification
04 / 07
Zamanında gelen ödüller
Streak, haftalık görev ve sıralamalar ancak ödüller ve sıfırlamalar elle müdahale olmadan, zamanında gerçekleşirse işe yarar.
Öğrenmeyi oyunlaştıran mekanikleri geliştirdim: streak, XP ve rozetler, haftalık görevler ve sıralamalar. Ödül dağıtımını ve haftalık sıfırlamaları zamanlanmış görevlerle (cron) otomatikleştirdim; her hafta kendiliğinden kapanıp yeniden başladı.
- Streak
- XP
- Rozetler
- Haftalık görevler
- Sıralamalar
- Cron görevleri
05 / 07
Hızlı okuma, artımlı eşitleme
Okuma trafiği yazma işlemleriyle yarışmamalı, istemciler de değişmeyen veriyi yeniden indirmemeli.
Okuma ve yazmayı ayırdım: yazma işlemleri ana veritabanına giderken okuma yükünü read replica’lara dağıttım. Connection pooling ve çok katmanlı cache (in-memory, hybrid, Redis) tekrar eden işi azalttı; versiyon tabanlı artımlı veri senkronizasyonu istemcilere yalnızca değişeni gönderdi.
- Read replica
- Okuma/yazma ayrımı
- Connection pooling
- In-memory · hybrid · Redis cache
- Versiyon tabanlı artımlı senkronizasyon
06 / 07
AI destekli içerik hattı
Öğrenme içeriği metin, ses ve optimize edilmiş görsel ister; bunları elle hazırlamak yavaştır.
İçerik üretimini otomatikleştiren servisler geliştirdim: OpenAI, Claude ve Gemini ile metin, Azure TTS ve ElevenLabs ile ses üretimi, Sharp / TinyPNG ile görsel optimizasyonu. Süreçleri n8n ile orkestre edip Back Office’e bağladım.
- OpenAI · Claude · Gemini
- Azure TTS
- ElevenLabs
- Sharp / TinyPNG
- n8n
- Back Office entegrasyonu
07 / 07
Production’da işletmek
Dağıtık bir sistem en kötü gününde sınanır: hatalar görünür, sınırlı ve geri alınabilir olmalı.
AWS ve DigitalOcean üzerindeki production ortamlarını HAProxy load balancing ve tüm API’lerdeki health check’lerle işlettim; ekip içi araçları Docker Compose ile self-host ettim, k6 ile performans ve failover testleri yazdım. Grafana, Prometheus, Loki, OpenTelemetry ve Sentry ile izleme, kök neden analizi, hotfix ve rollback yaptım.
- AWS · DigitalOcean
- HAProxy + health check
- Docker Compose
- k6 performans ve failover testleri
- Grafana · Prometheus · Loki
- OpenTelemetry · Sentry
- Kök neden analizi · hotfix · rollback
