Menagih Database Berdasarkan Apa yang Benar-Benar Dipakai
Setiap aplikasi Mythex yang membutuhkan penyimpanan data mendapat database Postgres sendiri, dan pemakaian database aplikasi yang dipublikasikan berasal dari saldo kredit yang sama dengan saat membangun. Sampai akhir September, kami memperkirakan pemakaian itu dari lamanya server aplikasi berjalan. Perkiraan itu ternyata keliru dengan cara yang berarti, sehingga kami menggantinya: setiap database sekarang ditagih dari komputasi yang diukur penyedianya, satu jam yang sudah selesai dalam satu waktu, dan setiap jam hanya bisa ditagih sekali.
Cara kerja database
Setiap database berjalan di Postgres serverless yang diskalakan ke nol: setelah beberapa menit menganggur, ia tidur, dan bangun saat ada query berikutnya. Saat aktif, ia bisa menaikkan dan menurunkan komputasinya sesuai beban. Itulah yang membuat “satu database per aplikasi” terjangkau: sebagian besar aplikasi sepi sebagian besar waktu, dan database yang tidur hampir tidak memakan biaya.
Artinya, biaya database bergantung pada dua hal yang tidak bisa kami lihat dari luar: berapa lama ia terjaga dan seberapa besar ia saat terjaga.
Apa yang salah dari perkiraan
Meter awal kami membuat satu asumsi: untuk setiap jam server aplikasi yang dipublikasikan berjalan, tagih database pada ukuran komputasi terkecil.
Itu salah dalam tiga hal:
- Ukurannya salah. Database sebenarnya berjalan pada ukuran default yang lebih besar daripada yang diasumsikan perkiraan.
- Database melakukan autoscale. Di bawah beban, mereka membesar, dan perkiraan tidak pernah melihatnya.
- Database tidak mengikuti server aplikasi. Database tetap terjaga setiap kali apa pun melakukan query padanya, yaitu aplikasi, job terjadwal, atau skrip yang terus-menerus memeriksanya, terlepas dari apakah server aplikasi sedang berjalan.
Hasil bersihnya: perkiraan itu menagih pengguna sekitar setengah dari biaya sebenarnya database. Itu tidak berkelanjutan bagi kami, dan juga membuat angka pemakaian di aplikasi tidak berarti seperti yang dipikirkan orang.
Mengukur, bukan menebak
Penyedia database kami melaporkan compute-unit-seconds per jam untuk setiap proyek, yaitu berapa banyak komputasi yang benar-benar dipakai, termasuk ukurannya. Jadi meter sekarang bekerja seperti ini:
- Untuk setiap aplikasi yang dipublikasikan dan memiliki database, ambil pemakaian terukur untuk setiap jam yang sudah selesai sejak aplikasi live.
- Konversi pemakaian itu menjadi biaya dengan harga penyedia, terapkan tarif paket, dan tagihkan ke kredit pemilik aplikasi.
- Lihat ke belakang hingga satu hari setiap kali, sehingga jam yang terlewat saat API kami sedang restart tetap ditagih kemudian.
Penyimpanan ditagih terpisah, berdasarkan ukuran, karena tidak bergantung pada aktivitas.
Tidak pernah menagih jam yang sama dua kali
Meter penagihan yang berjalan di lebih dari satu server, dan bisa crash lalu mencoba lagi, harus berhati-hati agar tidak menagih ganda. Setiap jam dari setiap database diklaim di baris database-nya sendiri sebelum ditagih, dengan constraint unik pada pasangan (database, jam). Jika dua server, atau sebuah percobaan ulang, mencoba menagih jam yang sama, hanya satu klaim yang berhasil.
Kami juga membuat pilihan yang disengaja untuk kasus gagal yang jarang: jika proses crash di antara mengklaim sebuah jam dan menagihnya, jam itu tetap diklaim dan belum ditagih. Kehilangan sedikit pendapatan dalam crash yang jarang lebih baik daripada menagih seseorang dua kali.
Dan ketika penagihan terukur diaktifkan, ia dimulai dari jam penuh berikutnya. Jam-jam sebelumnya sudah ditagih oleh perkiraan lama; menagihnya lagi dari data terukur akan menagih rentang itu dua kali.
Apa artinya jika Anda membangun di Mythex
- Tagihan database Anda sekarang mencerminkan apa yang dilakukan database Anda. Aplikasi yang jarang dipakai biayanya sangat kecil; aplikasi yang terus-menerus melakukan query ke database akan membuatnya tetap terjaga dan biayanya lebih besar.
- Pengungkit terbesar adalah cara aplikasi Anda memakai database. Melakukan polling ke database setiap beberapa detik membuatnya tetap terjaga sepanjang waktu. Meminta AI mengambil data saat dibutuhkan, atau menyimpannya di cache, membiarkan database tidur. Panduan kami tentang apa itu database membahas dasarnya.
- Paket Pro membayar setengah dari tarif Free untuk hosting, database, dan penyimpanan. Rinciannya ada di dokumentasi kredit.
Yang kami pelajari
- Perkiraan biaya yang berbasis pemakaian akan menyimpang. Ketika penyedia di hulu bisa memberi tahu apa yang dipakai, tagihlah dari situ.
- Buat penagihan idempoten pada satuan terkecil yang Anda tagih. Bagi kami, satuan itu adalah satu jam database.
- *Ketika harus gagal, gagallah demi kepentingan pelanggan.