Genişleyen bir sağlık ve beslenme işletmesi için tek bir backend yetersiz kalıyordu. AI chatbot trafiği, yoğun giyilebilir veri alımı ve günlük API istekleri aynı kaynaklar için rekabet ediyordu; bu da sistemi ölçeklendirmeyi zorlaştırıyor ve dağıtımı riskli hale getiriyordu. Sistemi, AWS üzerinde çalışan, tek bir API gateway arkasında düzenlenen, odaklanmış, bağımsız olarak dağıtılabilir hizmetlere yeniden tasarladık.
Karşılaşılan Zorluk
- Tüm görevleri tek bir kod tabanıyla yönetme. Tek bir iş akışı kullanıcı yönetimi, AI chatbot çıkarımı, tarifler ve sağlık verisi analitiklerini içeriyordu. Herhangi bir alandaki ani bir yükseliş tüm platformun performansını düşürüyor ve her değişiklik tüm sistemin yeniden dağıtılması anlamına geliyordu.
- Son derece farklı kaynak profilleri. LLM destekli chatbot istekleri CPU ve bellek yoğundur ve ani yüklenmeler yaşar; giyilebilir veri alımı yazma yoğundur ve süreklidir; temel CRUD API'leri hafiftir ve sabittir. Üçü için de tek bir sunucu boyutlandırmak, bazı iş yükleri için fazla ödeme yapmak ve diğerlerini yetersiz bırakmak anlamına geliyordu.
- Bağımsız ölçeklendirme ve dağıtım. Ekip, temel API'ye dokunmadan AI iş yükünü ölçeklendirmeli ve diğerlerini riske atmadan bir alandaki değişiklikleri göndermeliydi.
Tek, güvenli bir giriş noktası. Birden fazla backend hizmetine rağmen, istemciler (mobil, web, admin) konuşmak için tutarlı, doğrulanmış tek bir yüzeye ihtiyaç duyuyordu — dahili hizmet topolojisinin dış dünyaya sızmaması gerekiyordu.
Çözümümüz
Platformu, bir AWS Application Load Balancer arkasında üç odaklanmış NestJS hizmetine böldük; ana sunucu bir API gateway ve orkestratör görevi görüyordu. Kimlik doğrulamasını ve temel alanları yönetiyor, özel işleri kimliği doğrulanmış REST üzerinden chatbot ve sağlık mikrohizmetlerine devrediyordu. Ortak bir veri ve mesajlaşma katmanı, hizmetleri gevşek bir şekilde bağlı ancak tutarlı tutuyor.

Mimari
- Ana Sunucu (NestJS) — API gateway ve orkestratör: kimlik doğrulama, kullanıcılar, hedefler, tarifler, zamanlama ve bildirimler. Tüm istemciler tek bir genel giriş noktasına sahiptir.
- Chatbot Mikrohizmeti (NestJS) — LangChain/LangGraph aracılığıyla Azure OpenAI (GPT-4o) tarafından desteklenen AI konuşma hizmeti, tarif ve bilgi alımı için Elasticsearch destekli RAG ile birlikte.
- Sağlık Mikrohizmeti (NestJS) — giyilebilir ve manuel sağlık verilerini (Apple Health, Health Connect) alır ve birleştirir, analitik hizmeti sunar.
- AWS ECS Fargate, her biri kendi CPU/bellek boyutlandırma ve ölçeklendirme politikasına sahip olan üç konteynerleştirilmiş hizmeti çalıştırır.
- Application Load Balancer HTTPS'i sonlandırır ve trafiği doğru hizmete yol-yönlendirir.
- Paylaşımlı veri katmanı — MongoDB Atlas (birincil depolama), Redis (önbellek/oturumlar), Elasticsearch (arama), ActiveMQ (eşzamansız bildirim teslimi).
CI/CD — Docker çok aşamalı yapılar Amazon ECR'ye gönderilir, ECS'ye kademeli güncellemeler olarak dağıtılır.
Temel Özellikler
1. Orkestratör deseni. Ana sunucu, istemcilere açık olan tek hizmettir. Her isteği doğrular, ardından dahili hizmetten hizmete çağrılar yapar — böylece backend topolojisi gizli kalır ve istemci entegrasyonu basit olur.
2. Kimliği doğrulanmış hizmetten hizmete çağrılar. Hizmetler arası iletişim, paylaşımlı bir HTTP istemcisi üzerinden REST tabanlıdır ve hizmet başına bearer API anahtarlarıyla güvence altına alınmıştır:
// Ana sunucu, AI isteğini chatbot mikrohizmetine devrediyor const reply = await this.microserviceClient.post( this.chatbotApiKey, // hizmet başına bearer key `${this.chatbotUrl}/chat`, { user, question, sessionId, attachment }, ); |
3. İş yükü başına bağımsız ölçeklendirme. Her hizmet kendi boyutlandırmasına sahip ayrı bir Fargate görev tanımıdır — bellek yoğun chatbot hizmeti, hafif çekirdek API'sinden bağımsız olarak ölçeklenir, bu nedenle AI trafik artışları günlük istekleri asla engellemez.
4. Dahili dayanıklılığa sahip doğru boyutlandırılmış AI hizmeti. Chatbot hizmeti birden fazla Azure OpenAI anahtarı arasında dönüşümlü olarak çalışır, oran limitleri veya hatalarda otomatik olarak failover yapar — AI özelliklerini yük altında duyarlı tutar.
5. Eşzamansız mesajlaşma ile bildirimler. ActiveMQ gecikme kuyrukları zamana dayalı anımsatıcıları ve hatırlatıcıları istek akışından ayırdığı için, bildirim teslimi temel API trafiğini asla engellemez veya yavaşlatmaz.
6. Tekrarlanabilir, izole dağıtımlar. ECR'den ECS'ye kadar, her hizmet kendi Docker imajı olarak gönderilir. Sağlık hizmetinde yapılan bir değişiklik sadece sağlık hizmetini yeniden dağıtır — sağlık kontrolünden geçmiş, kademeli güncellemelerle hızlı, düşük riskli sürümler.
7. Tek tutarlı istemci sözleşmesi. Mobil (React Native) ve yönetici paneli, tek bir yük dengelemeli, HTTPS giriş noktasıyla iletişim kurar — mikrohizmetlere yapılan dahili ayrım onlar için görünmezdir.
Sonuçlar
- Bugünlerde, AI chatbot'ları, sağlık verileri ve temel API'ler için iş yükleri ayrı ayrı ölçeklenir; hiçbir görev diğerlerini bozamaz.
- Her hizmet kendi başına dağıtılır, bu da riskli platform çapındaki sürümleri hızlı, izole güncellemeler haline getirir.
- Hesaplama her hizmet için doğru boyutlandırılmıştır, böylece her şeye uyan tek bir sunucunun aşırı kaynak tahsisi ortadan kalkar.
- Tek bir güvenli, yük dengelemeli giriş noktası, istemci entegrasyonunu basit tutarken, backend'i gizli ve modüler tutar.
Teknoloji Yığını
NestJS · TypeScript · Node.js 20 · Azure OpenAI (GPT-4o) · LangChain · MongoDB Atlas · Redis · Elasticsearch · ActiveMQ · AWS ECS Fargate · Application Load Balancer · Amazon ECR · Docker
Diğer Bloglar
1. Video İşleme İş Yüklerini AWS ECS ile Nasıl Ölçeklendiriyoruz?
2. Konteyner İmajlarını Yönetmek ve Dağıtmak için AWS ECR'yi Nasıl Kullanıyoruz?
3. Yüksek Performanslı Video İş Yükleri için AWS EC2'yi Nasıl Kullanıyoruz?

