54 poin oleh xguru 2022-09-26 | 8 komentar | Bagikan ke WhatsApp
  • Menjalankan beberapa aplikasi SaaS di satu server besar dari OVH Cloud
    • Menangani sekitar 6 juta request tanpa cache per hari
    • Backend-nya Django/Python + MySQL + Redis + WebSocket (Pub/Sub)
    • Rahasia saya adalah OpenResty (platform web dinamis berbasis NGINX dan LuaJIT)
      • Menggunakan skrip Lua untuk menangani caching halaman yang kompleks, memblokir DDoS, menangani websocket, dan meng-offload request yang berjalan lama
      • Sebuah "Cloudflare untuk orang miskin" yang terdiri dari 1500 baris kode Lua
    • Aplikasi-aplikasi ini dibuat sebelum Docker, jadi dijalankan begitu saja sebagai proses (systemd)
    • Awalnya memakai uwsgi, tetapi gunicorn jauh lebih efisien jadi sekarang sudah sepenuhnya pindah
    • SPOF saya adalah DNS. Saya punya hubungan baik dengan DNSMadeEasy jadi tidak terlalu khawatir soal auto-ban, tetapi sekarang mereka sudah diakuisisi DigiCert jadi jadi masalah
    • Pembayaran diproses dengan Stripe dan PayPal. Saya menambahkan PayPal meski tidak suka, karena kita tidak pernah tahu kapan Stripe akan memblokir tanpa peringatan
    • Upload pengguna dikirim oleh server Python aiohttp ke Wasabi dan Backblaze lalu di-cache oleh nginx. Jadi biaya bandwidth cloud = 0
    • Layer websocket agak tidak stabil. Awalnya saya menangani semuanya dengan library websocket asyncio Python, dan sampai titik tertentu memang bekerja, tetapi saat nanti dicoba untuk diproses multiproses, konsumsi resource mulai sangat besar
    • Jadi saya memutuskan memakai websocket dari OpenResty, tetapi saya tidak ingin menulis logika kompleks dalam Lua
      • Diubah agar pesan diteruskan ke proses Python menggunakan Redis Pub/Sub
    • Tetapi saya tidak akan memberitahu nama layanannya (saya tidak mau menambah pesaing!)
  • Saya cenderung memilih opsi yang kurang populer, dan menurut saya itu produktif untuk developer solo
    • PostgreSQL + SQLite
    • Bahasa utama Rust
    • Frontend-nya htmx + tailwindcss
    • Hosting CloudFlare + Vultr
    • nginx + nixos + circle ci
  • Mungkin ada yang tidak suka, tetapi memilih Wordpress adalah keputusan terbaik bagi saya
    • Forum memakai bbPress
    • Komunitas tempat anggota membuat posting memakai buddyPress
    • Newsletter memakai plugin mailster.co yang murah (menggunakan Critsend.com) alih-alih SaaS yang sangat mahal
    • Sebagian besar fitur yang saya inginkan tersedia sebagai plugin: FAQ yang bisa dicari, Captcha, iklan, posting ke Discord, sistem pelaporan pengguna, dll.
    • Mengelola https://rpgplayground.com/
  • Menjalankan https://text-generator.io, layanan yang bersaing dengan OpenAI
    • Dulu memakai Kubernetes di GCP, sekarang dijalankan dari rumah lewat Cloudflare Tunnel dengan GPU milik sendiri. Dengan cara ini, biaya GPU menjadi 10 kali lebih murah.
    • Menganalisis tautan atau gambar yang dimasukkan melalui Tesseract / Unified IO / OFA / Beautiful Soup, lalu menjawab pertanyaan tentang gambar/struk
    • Situsnya sendiri berjalan di AppEngine dengan Python + Stripe + Firebase UI, jadi biaya operasional mingguannya rendah
  • Hosting di Render
  • Menjalankan https://allaboutberlin.com
    • Berjalan dengan Craft CMS di Docker milik DigitalOcean
    • Craft memudahkan pembuatan custom post type dengan custom field, sesuatu yang sulit dibuat di WordPress
    • Tetapi karena ini bukan WordPress, jumlah plugin yang dibutuhkan tidak banyak
    • Menangani caching dan banyak hal lain dengan nginx
  • Jika ingin lebih produktif, coba PETAL
    • Phoenix + Elixir + Tailwind + Alpine.js + LiveView
  • Rails + Postgres + Redis + SideKiq
    • Hosting di Herokus, pelacakan error dengan Sentry, pemantauan performa dengan New Relic, email dengan Send Grid
    • Baru-baru ini mengganti Google Analytics dengan Plausible, dan memakai Ahoy (Rails Middleware) untuk analitik internal yang lebih mendalam
    • Saat ini memakai Intercom untuk dukungan pelanggan/chat, tetapi berencana pindah ke Chatwoot
    • Berencana keluar dari Heroku, tetapi Render sebagai alternatif utama masih belum punya opsi HA Postgres dengan failover otomatis
    • Jika push ke branch master GitHub, otomatis deploy ke production.
      • Merge ke branch master hanya bisa lewat PR, dan hanya boleh jika Linter (Rubocop) + Tests (Rspec di CircleCI) + cakupan 100% (codecov.io) semuanya hijau
    • UI-nya Bootstrap, dan rendering dilakukan server-side dengan JavaScript
      • Untuk UI yang membutuhkan lebih banyak interaksi, sedang mempertimbangkan Hotwire/Turbo vs. Alpine vs. Stimulus vs. React
  • Sedang mengembangkan platform agtech
    • Backend: Rust, Rocket, sqlx, Postgres, sedikit Ansible
    • Frontend: Rescript + React. Cukup banyak memakai Rust/WASM, dan itu ternyata sebuah kesalahan. Sedang mencoba untuk memundurkannya

8 komentar

 
qkreoaksn 2022-09-29

Wah, sendirian semua ini dikelolanya gimana sih? deg-degan

 
galadbran 2022-09-27

Saya benar-benar penasaran apa maksud dari meng-offload permintaan web yang memakan waktu lama untuk diproses, karena hampir tidak ada penjelasannya ^^;

 
bohblue23 2022-09-26

Dammm

 
yshrust 2022-09-26

Wah, ternyata dipakai dengan sangat beragam,, kombinasi seperti PETAL ini baru pertama kali saya lihat, bagus

 
kandk 2022-09-26

馃憤

 
jujumilk3 2022-09-26

Artikel yang benar-benar sangat berguna, terima kasih banyak!

 
xguru 2022-10-02

Silakan lihat juga tulisan lama yang pernah naik di HN
tahun 2021 https://news.ycombinator.com/item?id=28299053
tahun 2020 https://news.ycombinator.com/item?id=25465582
tahun 2019 https://news.ycombinator.com/item?id=21024041