4 puan yazan GN⁺ 2024-09-15 | 1 yorum | WhatsApp'ta paylaş

Karmaşık bulut altyapısı gerçekten gerekli mi?

  • Pieter Levels’ın Lex Friedman Podcast’te anlattıklarını dinlerken birçok şey fark ettim
  • Pieter, uygulamalarını tek bir sunucuda çalıştırarak başarılı bir mikro SaaS işi kurdu
  • Bulut altyapısının karmaşıklığından kaçınıp ürün-pazar uyumuna odaklanmak önemli
  • Bu yaklaşım her startup için uygun olmayabilir, ancak karmaşıklık uğruna karmaşıklıktan kaçınmak gerekir

Son gözlemler

Proje 1: Lambda aşırı yükü

  • 20-30 Lambda fonksiyonuyla çeşitli servisler çalıştırılıyor
  • Arka plan işleri için SQS ve Lambda kullanılıyor
  • Loglar CloudWatch içinde dağınık durumda

Sonuç: Debug etmek zor, değişiklik yapmak güç ve deployment karmaşık. Bu yapı, tek bir NodeJS container’ı ya da Python Flask/FastAPI uygulaması ve Redis ile sadeleştirilebilirdi

Proje 2: Mikroservis karmaşası

  • Kubernetes (EKS) üzerinde 7 küçük mikroservis çalıştırılıyor
  • CRUD ve iş mantığı için ayrı servisler var

Sonuç: Altyapı yönetimine daha fazla zaman harcanıyor. Bu kadar ayrışmanın gerçekten gerekli olup olmadığı tartışmalı

Tek sunuculu kurulumun gücü

  • Modern sunucular güçlüdür. Hetzner ve latitude.sh, uygun fiyata güçlü VM’ler sunuyor
  • GCP VM ve EC2 instance’ları da makul fiyatlı
  • 40GB RAM ve çok çekirdekli güçlü compute kapasitesi sağlıyor
  • Her şey merkezi olduğu için yönetmesi kolay
  • Milyonlarca QPS’ye ölçeklenme problemi daha sonra çözülebilir

Tek bir VM kurulumu için gerekenler:

  1. Güçlü bir makine (EC2, GCP VM, Hetzner vb.)
  2. Güvenli erişim (HTTPS, IP kısıtlamalı SSH veya SSM)
  3. Kesintisiz deployment için CI/CD
  4. DNS yapılandırması
  5. Düzenli veritabanı yedekleri
  6. Beklemede duran bir VM ile yedeklilik

Docker Compose

  • Docker Compose, lokal geliştirme için harika
  • Birden fazla servisi tek komutla yönetmek mümkün
  • Production ortamında daha az kullanılıyor
  • Güncellemeler sırasında downtime yaşanabilir

Docker Compose Anywhere: hafta sonu projesi

  • Docker Compose Anywhere hafta sonu boyunca geliştirildi
  • Şu özellikleri sunuyor:
    • GitHub Actions ile tek tıkla Linux sunucu kurulumu
    • GitHub Container Registry ve Docker Rollout ile kesintisiz deployment
    • Ortam değişkeni ve secret yönetimi (age veya sops kullanımı düşünülüyor)
    • GitHub Actions ile otomatik Postgres yedekleme
    • Tek bir VM üzerinde çoklu uygulama desteği
    • Traefik ve Let's Encrypt ile otomatik SSL

Bazı noktalar

Güvenlik için:

  • Sıkı firewall kuralları ayarlayın (yalnızca gerekli portları açın)
  • SSH anahtarlarını güvenli tutun (AWS’de SSM, GCP’de CLI tercih edilir)
  • Güvenliği artırmak için bastion host kullanın
  • Secret koruması ve WAF veya Cloudflare kullanımını değerlendirin

Veri koruması:

  • Şifrelenmiş veritabanı yedeklerini güvenli cloud storage’a gönderin (ör. S3)
  • Ek yedeklilik için düzenli olarak disk snapshot’ları oluşturun
  • Yedekler ve snapshot’lar için saklama politikaları uygulayın

GN⁺ özeti

  • Bu yazı, startup’ların karmaşık bulut altyapısından kaçınıp basit kurulumlarla ürün-pazar uyumuna odaklanması gerektiğini vurguluyor
  • Tek sunuculu kurulumun avantajlarını ve Docker Compose ile basit deployment yöntemlerini tanıtıyor
  • Karmaşık altyapı yönetimine zaman harcamak yerine çekirdek ürün geliştirmeye odaklanmak önemli
  • Benzer işlevlere sahip projeler arasında Heroku ve DigitalOcean da bulunuyor

1 yorum

 
GN⁺ 2024-09-15
Hacker News görüşleri
  • Birçok projede en yeni teknolojileri kullanmak isteyen ekipler çoğu zaman düşük kaliteli çıktılar üretiyor

    • Kubernetes'i anlamadan onu kullanmaya çalışan olgunlaşmamış ekipler var
    • Puppet kullanarak çeşitli VM'lerde Docker servislerini çalıştıran veya Python backend'ini işleten otomatik süreçler kuruyorlar
    • Startup'lar bulutta çok para harcarken, 2017'nin DevOps öncülerinden daha kötü çıktılar üretiyor
    • İlgili blog yazısı: The Emperor's New clouds
  • Küçük bir startup'ta nginx, webapp, postgres, redis vb. tek bir VM üzerinde çalıştırılıyor

    • Geliştiriciler aynı yapılandırmayla yerelde çalışabildiği için debug etmek kolay oluyor
    • Dikey ölçekleme mümkün olduğu için ilk aşamada uygun
  • SaaS tek bir sunucuda başlayıp birden fazla sunucuya ölçekleniyor

    • Kubernetes kullanmadan da dağıtık veritabanı çalıştırılıyor
    • Bulut sağlayıcısının sanal makineleri yerine daha güçlü bare-metal sunucular kullanılıyor
    • Sunucuları yönetmek için otomasyon araçları olarak ansible ve terraform kullanılıyor
  • Kubernetes'in temel işlevleri olan deployment, pod servisleri ve blue-green deployment kullanışlı

    • Cloud-native ortamda çeşitli açık kaynak sistemleri kullanmak işleri karmaşıklaştırabiliyor
  • Birçok kişi Kubernetes öğrenmek için karmaşık altyapılar kuruyor

    • Büyük ölçekli müşterilere genişlerken faydalı olabilir
    • Kurucu ya da CTO için daha az faydalı olabilir
  • Mikroservis kitapları bile "önce monolith kurun" diye öneriyor

    • Başlangıçta monolith kullanmak debug etmeyi kolaylaştırıyor
    • Docker kullanarak ilk aşama basitleştiriliyor
    • İş ihtiyaçlarına göre Kubernetes'e geçiliyor
  • Başından itibaren karmaşık framework'ler seçmek önerilmiyor

    • Kendi araçlarını kullanmak her zaman daha verimli olmayabilir
    • Standart araçları kullanmak uzun vadede daha verimli olabilir
  • Bulutta yalnızca VM, block ve blob storage, DNS, IdP ve domain registrar kullanılıyor

    • FaaS gibi servisler karmaşık ve debug etmesi zor
    • Tek bir VM ve monolitik codebase ideal
  • 6 yıl boyunca tek bir aylık 10 dolarlık VPS üzerinde proje işletiliyor

    • VPS teknolojisi çok geliştiği için güvenilirlik yüksek
    • Bulut altyapısı işbirliği ve operasyon yönetimi özellikleri için kullanılıyor
  • Bulut tabanlı çözümler tercih ediliyor ama seçici biçimde kullanılıyor

    • Google Cloud Platform(GCP) kullanarak maliyet azaltılıyor
    • Kubernetes kullanılmıyor
    • Docker kullanarak deployment basitleştiriliyor
    • GCP'nin yönetilen servisleri zaman kazandırıyor