4 poin oleh GN⁺ 2024-09-15 | 1 komentar | Bagikan ke WhatsApp

Apakah infrastruktur cloud yang kompleks benar-benar diperlukan?

  • Mendengarkan pembahasan Pieter Levels di Lex Friedman Podcast memberikan banyak wawasan
  • Pieter membangun bisnis mikro SaaS yang sukses dengan menjalankan aplikasi di satu server saja
  • Penting untuk menghindari kompleksitas infrastruktur cloud dan fokus pada product-market fit
  • Ini mungkin tidak cocok untuk semua startup, tetapi kita perlu menghindari kompleksitas demi kompleksitas itu sendiri

Pengamatan terbaru

Proyek 1: Lambda yang berlebihan

  • Menjalankan berbagai layanan dengan 20-30 fungsi Lambda
  • Pekerjaan latar belakang menggunakan SQS dan Lambda
  • Log yang tersebar di CloudWatch

Hasil: debugging sulit, perubahan sulit dilakukan, dan deployment menjadi rumit. Ini sebenarnya bisa disederhanakan dengan satu container NodeJS atau aplikasi Python Flask/FastAPI dan Redis

Proyek 2: Kekacauan microservice

  • Menjalankan 7 microservice kecil di Kubernetes (EKS)
  • Layanan terpisah untuk CRUD dan business logic

Hasil: lebih banyak waktu dihabiskan untuk mengelola infrastruktur. Muncul pertanyaan apakah pemisahan sejauh ini memang diperlukan

Kekuatan konfigurasi satu server

  • Server modern sangat kuat. Hetzner dan latitude.sh menyediakan VM yang kuat dengan harga terjangkau
  • VM GCP dan instance EC2 juga memiliki harga yang masuk akal
  • Menyediakan daya komputasi yang kuat dengan RAM 40GB dan multi-core
  • Semuanya terpusat sehingga lebih mudah dikelola
  • Masalah penskalaan hingga jutaan QPS bisa diselesaikan nanti

Yang dibutuhkan untuk konfigurasi satu VM:

  1. Mesin yang kuat (EC2, GCP VM, Hetzner, dll.)
  2. Akses yang aman (HTTPS, SSH dengan pembatasan IP, atau SSM)
  3. CI/CD untuk deployment tanpa downtime
  4. Konfigurasi DNS
  5. Backup database secara berkala
  6. Redundansi dengan VM siaga

Docker Compose

  • Docker Compose sangat bagus untuk pengembangan lokal
  • Dapat mengelola banyak layanan dengan satu perintah
  • Lebih jarang digunakan di lingkungan production
  • Ada kemungkinan downtime saat update

Docker Compose Anywhere: proyek akhir pekan

  • Docker Compose Anywhere dikembangkan selama akhir pekan
  • Menyediakan fitur berikut:
    • Penyiapan server Linux sekali klik melalui GitHub Actions
    • Deployment tanpa downtime menggunakan GitHub Container Registry dan Docker Rollout
    • Pengelolaan environment variable dan secret (mempertimbangkan penggunaan age atau sops)
    • Backup Postgres otomatis melalui GitHub Actions
    • Dukungan multi-app di satu VM
    • SSL otomatis melalui Traefik dan Let's Encrypt

Beberapa hal yang perlu dipertimbangkan

Untuk keamanan:

  • Tetapkan aturan firewall yang ketat (buka hanya port yang diperlukan)
  • Jaga keamanan SSH key (di AWS lebih memilih SSM, di GCP lebih memilih CLI)
  • Gunakan bastion host untuk memperkuat keamanan
  • Pertimbangkan perlindungan secret serta penggunaan WAF atau Cloudflare

Untuk perlindungan data:

  • Kirim backup database terenkripsi ke cloud storage yang aman (misalnya S3)
  • Buat snapshot disk secara berkala untuk redundansi tambahan
  • Terapkan kebijakan retensi untuk backup dan snapshot

Ringkasan GN⁺

  • Artikel ini menekankan bahwa startup sebaiknya menghindari infrastruktur cloud yang kompleks dan fokus pada product-market fit dengan konfigurasi yang sederhana
  • Artikel ini memperkenalkan kelebihan konfigurasi satu server dan cara deployment sederhana dengan memanfaatkan Docker Compose
  • Penting untuk fokus pada pengembangan produk inti tanpa membuang waktu untuk mengelola infrastruktur yang rumit
  • Proyek dengan fungsi serupa antara lain Heroku dan DigitalOcean

1 komentar

 
GN⁺ 2024-09-15
Komentar Hacker News
  • Dalam banyak proyek, tim yang ingin memakai teknologi terbaru sering kali menghasilkan keluaran yang berkualitas rendah

    • Ada tim yang belum matang yang mencoba menggunakan Kubernetes tanpa benar-benar memahaminya
    • Mereka membangun proses otomatis dengan Puppet untuk menjalankan layanan Docker di berbagai VM atau menjalankan backend Python
    • Startup menghabiskan banyak biaya di cloud tetapi tetap menghasilkan keluaran yang lebih buruk dibanding para pelopor DevOps pada 2017
    • Tulisan blog terkait: The Emperor's New clouds
  • Di startup kecil, satu VM digunakan untuk menjalankan nginx, webapp, postgres, redis, dan lain-lain

    • Developer dapat bekerja di lingkungan lokal dengan konfigurasi yang sama sehingga debugging lebih mudah
    • Bisa diskalakan secara vertikal sehingga cocok untuk tahap awal
  • SaaS dimulai di satu server lalu diperluas ke beberapa server

    • Menjalankan database terdistribusi tanpa menggunakan Kubernetes
    • Menggunakan server bare metal yang lebih kuat daripada mesin virtual dari penyedia cloud
    • Mengelola server dengan ansible dan terraform sebagai alat otomatisasi
  • Fitur inti Kubernetes seperti deployment, layanan pod, dan blue-green deployment memang berguna

    • Namun, penggunaan berbagai sistem open source di lingkungan cloud-native bisa menjadi rumit
  • Banyak orang membangun infrastruktur yang rumit untuk mempelajari Kubernetes

    • Ini bisa berguna saat harus berkembang ke klien berskala besar
    • Namun bisa jadi kurang berguna bagi pendiri atau CTO
  • Bahkan buku tentang microservices juga menyarankan, "bangun monolith terlebih dahulu"

    • Pada tahap awal, memakai monolith lebih mudah untuk debugging
    • Docker digunakan untuk menyederhanakan tahap awal
    • Beralih ke Kubernetes sesuai kebutuhan bisnis
  • Tidak disarankan memilih framework yang rumit sejak awal

    • Menggunakan alat buatan sendiri belum tentu selalu lebih efisien
    • Menggunakan alat standar bisa lebih efisien dalam jangka panjang
  • Di cloud, hanya menggunakan VM, block dan blob storage, DNS, IdP, serta registrar domain

    • Layanan seperti FaaS itu rumit dan sulit di-debug
    • Satu VM dan codebase monolitik adalah pilihan yang ideal
  • Selama 6 tahun, proyek dijalankan di satu VPS seharga $10/bulan

    • Teknologi VPS sudah berkembang pesat sehingga sangat andal
    • Infrastruktur cloud digunakan untuk fitur kolaborasi dan pengelolaan operasional
  • Lebih menyukai solusi berbasis cloud, tetapi menggunakannya secara selektif

    • Menggunakan Google Cloud Platform (GCP) untuk menghemat biaya
    • Tidak menggunakan Kubernetes
    • Menggunakan Docker untuk menyederhanakan deployment
    • Layanan terkelola GCP membantu menghemat waktu