Dosya transferi sistemleri için mikro hizmet mimarisi
Mikro hizmet mimarisiyle dosya transferi sistemleri tasarlayın. Hizmet ayrıştırma, mesaj kuyrukları ve ölçeklenebilirlik kalıpları.
Dosya transferi için mikro hizmet mimarisi, sistemi odaklanmış hizmetlere ayrıştırır: biri yüklemeler için, biri metadata için, biri bildirimler için, biri virüs taraması için ve bunun gibi. Her biri bağımsız olarak ölçeklenir, bağımsız olarak başarısız olur ve ekip değerli bulduğu zaman farklı dillerde yeniden yazılabilir. Kazanç; operasyonel esneklik ve daha net sahiplik yapısıdır. Maliyeti ise dağıtık sistem karmaşıklığı, ağ yükü ve sağlam gözlemlenebilirlik gereksinimidir. İşte dosya transferi iş yükleri için pragmatik bir ayrıştırma ve parçaların nasıl iletişim kurduğu.
Anlamlı Hizmet Sınırları
Her işlev kendi servisini hak etmez. Bir dosya transfer platformu için makul bir ayrıştırma: Upload Service (önceden imzalanmış URL oluşturma, çok parçalı koordinasyon), Metadata Service (PostgreSQL'de transfer kayıtları, paylaşılabilir bağlantı oluşturma), Notification Service (SendGrid veya Postmark üzerinden e-posta, webhook'lar), Scanning Service (kötü amaçlı yazılım kontrolleri için ClamAV veya ticari AV), Billing Service (Stripe entegrasyonu) ve bir Frontend API Gateway (Kong, Traefik veya AWS API Gateway). Altı ile sekiz servis genellikle tatlı noktayı yakalar: bağımsız ölçekleme için yeterli ayrışma, bir isteği içlerinde izlemenin arkeolojiye dönmeyeceği kadar az servis.
Durumsuz Upload Servisleri
Upload Service, durumsuz ve yatay olarak ölçeklenebilir olmalıdır. Görevi, önceden imzalanmış URL'ler oluşturmak, çok parçalı yükleme oturumlarını koordine etmek ve kimlik doğrulama jetonlarını doğrulamaktır. Tüm durum bir önbellekte (Redis) veya veritabanında (PostgreSQL, DynamoDB) yaşar, yerel süreç belleğinde hiçbir zaman değil. Bu, herhangi bir örneğin herhangi bir isteği işleyebileceği anlamına gelir; mavi/yeşil dağıtımları ve otomatik ölçeklemeyi basit kılar. CPU veya istek hızı üzerinde Horizontal Pod Autoscaler ile Kubernetes dağıtımları trafik artışlarını karşılar. Yükleme başlatmada 100 ms'nin altında p99 gecikmeyi hedefleyin; gerçek baytlar, bu servis üzerinden değil, doğrudan istemciden nesne depolamaya gider.
Async İşler İçin Mesaj Kuyrukları
Antivirüs taraması, küçük resim oluşturma, webhook teslimi ve e-posta gönderimi; yükleme tamamlanmasını engellememelidir. Bir mesaj kuyruğu kullanın: basitlik ve maliyet için AWS SQS, yüksek aktarım hızı ve yeniden oynatma için Apache Kafka, esnek yönlendirme için RabbitMQ veya GCP'deyseniz Google Pub/Sub. Bir yükleme tamamlandığında Upload Service, "transfer.created" olayı yayınlar. Aboneler alır: Scanning Service ClamAV çalıştırır, Notification Service paylaşım e-postasını gönderir, Webhook Service yapılandırılmış uç noktalara POST atar. Her abone, zehirli mesajlar için üstel geri çekilme ve işlenemeyen mesaj kuyrukları ile başarısızlıkta yeniden dener.
Olay Şemaları ve Sözleşme Testi
Olay şemaları üzerinde anlaşın ve bunları sürümlendirin. JSON Schema veya Avro işe yarar; gRPC aracılığıyla Protobuf, güçlü tipli sözleşmeler için popülerdir. {"type": "transfer.created", "version": "1.0", "id": "uuid", "sizeBytes": 5242880000, "createdAt": "2026-11-20T12:00:00Z"} gibi bir olay, yeni alanlar ekleyici nitelikteyse geliştirilmesi kolaydır. Kırılgan değişiklikler, bir geçiş süresi boyunca her iki sürüm desteklenerek "transfer.created v2.0"a gider. Pact gibi sözleşme test araçları, üretici ve tüketicinin dağıtımdan önce mutabık olduğunu doğrular; şema kaymasını production yerine CI'da yakalar.
Metadata Depolama Seçimleri
PostgreSQL, dosya transferi metadata iş yüklerinin büyük çoğunluğunu iyi yönetir: transferler, kullanıcılar, paylaşımlar, denetim günlükleri, faturalama kayıtları. Tablolar 100 GB'ı aştığında created_at'a göre bölümleme sorguları hızlı tutar. Daha yüksek aktarım hızı için bileşik anahtarlı (user_id, created_at) DynamoDB, öngörülebilir gecikmeyle milyonlarca kayda ölçeklenir. Okuma ağırlıklı iş yükleri, okuma kopyalarından veya DB'nin önündeki bellek içi önbellekten (Redis, Memcached) faydalanır. Transfer metadata'sı, S3'teki dosya baytlarına kıyasla kayıt başına küçüktür (birkaç KB); bu nedenle doğru dizinlemeyle mütevazı bir PostgreSQL örneği milyarlarca kaydı tutabilir.
Servisler Arası İletişim
gRPC, Protobuf ile hızlı ve tür güvenlidir; yüksek RPS dahili API'ler için iyidir. OpenAPI şemalarıyla REST daha basit ve curl ile hata ayıklanabilirdir. Istio veya Linkerd gibi servis ağları, servisler arasına mTLS ekler, canary dağıtımları için trafik kaydırma yapar ve kod değişikliği olmadan otomatik yeniden denemeler sağlar. Dosya transferi sistemleri için dahili çağrıların çoğu düşük RPS koordinasyonudur, bu nedenle REST artı küçük bir istemci kütüphanesi genellikle yeterlidir. gRPC'yi kritik yollar için saklayın: Upload Service'ten Metadata Service aramalar her yükleme başlatmada gerçekleşir, bu nedenle HTTP üzerinden JSON'a kıyasla 5-10x hız farkı önemlidir.
Servisler Arası Kimlik Doğrulama ve Yetkilendirme
Her servisin kimin aradığını bilmesi gerekir. Bir Auth Service (Auth0, Keycloak veya özel) tarafından verilen JWT, istek zinciri boyunca yayılır. Her servis sınırında JWT imzasını doğrulayın; hiçbir zaman taleplere doğrulama yapmadan güvenmeyin. Kullanıcı bağlamı olmayan servisler arası çağrılar için SPIFFE/SPIRE aracılığıyla servis kimlikleriyle mTLS güçlü kimlik sağlar. OPA (Open Policy Agent) ara yazılımları yetkilendirme politikalarını değerlendirir: "Kullanıcı X, Y transferini okuyabilir mi?" tek bir politika sorgusu olarak. Politikayı OPA'da merkezileştirmek, "if user.id == transfer.owner_id" kontrollerini her servise dağıtmaktan çok daha iyidir.
Gözlemlenebilirlik: Günlükler, Metrikler ve İzler
Gözlemlenebilirlik olmadan mikro hizmetler opak kara kutulara dönüşür. OpenTelemetry enstrümantasyonu izleri, metrikleri ve günlükleri Jaeger, Tempo veya Datadog gibi arka uçlara aktarır. Dağıtık bir iz, tam isteği gösterir: frontend, Upload Service'i çağırır, bu Metadata Service'i çağırır, bu PostgreSQL'i sorgular; toplamda 47 ms sürer, bunun 12 ms'si DB'dedir. Prometheus ve Grafana'daki metrikler; servis başına RPS, hata oranı ve gecikmeyi izler. Loki veya Elasticsearch aracılığıyla JSON yapılandırılmış günlükler, iz kimliğine göre arama yapmanıza olanak tanır. Hata bütçesi tüketimi üzerine uyarı vermek (SRE tarzı SLO'lar), kullanıcılar şikâyet etmeden önce gerilemeleri yakalar.
Dağıtım Pipeline'ları ve Yayın Stratejileri
Her servisin kendi deposu ve pipeline'ı vardır ya da servis başına yapılarla bir monorepo kullanılır (Bazel, Nx, Turborepo). Kubernetes aracılığıyla Helm şartları veya GitOps için Argo CD ile dağıtın. Yayın stratejileri: rutin değişiklikler için yuvarlanan güncellemeler, riskli değişiklikler için Istio veya Flagger aracılığıyla canary dağıtımları, veritabanı geçişleri için mavi/yeşil. LaunchDarkly veya Unleash aracılığıyla özellik bayrakları, devre dışı bırakılmış kodu göndermenize ve kullanıcıların %1'i için açmanıza izin verir; kademeli olarak artırırsınız. Günde milyonlarca transfer yöneten bir dosya transfer servisi, yüksek hata oranında otomatik geri alma ile canary dağıtımlarından faydalanır.
Hata Modları ve Esneklik Kalıpları
Dağıtık sistemler yaratıcı şekillerde başarısız olur. Devre kesiciler (Hystrix, resilience4j), bir bağımlılık yavaşladığında basamaklı hataları durdurur. Bölmeler, aşağı akış servisi başına iş parçacığı havuzlarını izole eder. Üstel geri çekilme ve jitter ile yeniden denemeler, şimşek sürüsünü önler. API çağrılarındaki idempotency anahtarları, istemcilerin çift işlem olmadan yeniden denemesine izin verir. Chaos Mesh veya LitmusChaos gibi kaos mühendisliği araçları, sistemin zarif biçimde bozulduğunu doğrulamak için staging'de hatalar enjekte eder. Dosya transferi için özellikle, Upload Service'in Metadata Service erişilemez olduğunda yeni yüklemeleri tamamen reddetmek yerine salt okunur moda geçmesi gerekir.
Mikro Hizmetlerin Gereğinden Fazla Olduğu Durumlar
Bir veya iki geliştirici ve ayda 100.000 transfer ile küçük bir dosya transfer servisi 8 mikro hizmete ihtiyaç duymaz. Go, Node.js veya Rails'ta iyi organize edilmiş bir monolith, bu iş yükünü iki mütevazı VM üzerinde yönetir, dakikalar içinde dağıtılır ve ekibe servis ağlarında hata ayıklamak yerine özellik geliştirme zamanı bırakır. Mikro hizmetler, 20+ mühendislik ekiplerinde veya farklı bileşenlerin birbirinden çok farklı ölçekleme ihtiyaçları olduğunda karşılığını verir. HexaTransfer'in mimarisi, S3 uyumlu depolamaya ve CDN'e yoğun bağımlılıkla az sayıda odaklanmış servis kullanır; bu operasyonel karmaşıklığı yönetilebilir düzeyde tutarken dünya genelinde düşük gecikmeyle 10 GB transferleri destekler.
hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, maksimum 10 GB.
Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin
Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.
Dosya gönder