Tentukan satu unit pekerjaan yang berguna
Untuk ekspor CSV internal, sebuah permintaan membuat catatan ekspor; worker membaca kumpulan data terbatas, menulis objek keluaran, dan menandai catatan selesai. Tentukan cakupan berguna maksimum, batas waktu, dan perilaku pembatalan. Gunakan antrean, basis data uji, dan tujuan terisolasi yang tidak dapat memberi tahu pelanggan nyata.
Pisahkan waktu komputasi dari tunggu basis data dan penyimpanan. Satu angka durasi pekerjaan menyembunyikan perbedaan ini. Membangun seluruh file di memori berskala berbeda dari streaming batch terbatas. Jaga agar pesan antrean cukup kecil untuk mendeskripsikan pekerjaan tanpa menyematkan data pelanggan atau kredensial.
Buat pengiriman berulang aman secara desain
Gunakan pengenal ekspor yang tahan lama untuk menghubungkan percobaan dengan satu hasil logis. Tegakkan keunikan dan transisi kepemilikan/penyelesaian atomik dalam status yang tahan lama. Memeriksa apakah ekspor ada lalu menyisipkan dalam langkah terpisah yang tidak terlindungi memungkinkan percobaan bersamaan berlomba. Menerbitkan objek dan mengakui pesan antrean juga membentuk batas kegagalan.
# Illustrative contract, not queue implementation
job_type: export-account-report
logical_result: EXPORT_RECORD_ID
input_scope: AUTHORIZED_ACCOUNT_AND_DATE_RANGE
attempt_limit: REVIEWED_FINITE_LIMIT
completion: ONE_PUBLISHED_RESULT_FOR_THIS_EXPORT
retry: CLASSIFIED_TRANSIENT_FAILURES_ONLY
failed_result: INSPECTABLE_WITHOUT_CUSTOMER_SECRETSCelery menghubungkan pengakuan terlambat dengan tugas idempoten dan mendokumentasikan kasus di mana pengakuan tetap terjadi setelah penghentian proses anak. Opsi antrean tidak menciptakan eksekusi tepat sekali. Tinjau semantik pengiriman ulang sistem Anda dan rancang hasil aplikasi untuk menoleransi percobaan ulang.
Referensi teknis: Perilaku tugas Celery.
Tetapkan anggaran sebelum menambah proses
Untuk worker hipotetis yang menggunakan 300 MiB per ekspor aktif, empat ekspor simultan sudah menyiratkan sekitar 1,200 MiB sebelum overhead runtime. Ini adalah input perencanaan, bukan tolok ukur. Tambahkan koneksi basis data, memori kueri, disk sementara, dan bandwidth keluaran; jumlah proses hanyalah salah satu batas.
Latih dengan satu ekspor aktif dan backlog yang realistis. Tingkatkan menjadi dua sambil mengulangi lalu lintas API yang sama. Bandingkan ekspor berguna yang selesai, usia pekerjaan tertua, latensi, kegagalan, dan tekanan host. Jika throughput hampir tidak meningkat sementara tunggu basis data bertambah, hentikan peningkatan konkurensi. CPU tambahan mungkin tidak menghilangkan hambatan itu.
Hentikan kegagalan agar tidak menciptakan lebih banyak beban
Klasifikasikan error sebelum mencoba ulang. Gangguan penyimpanan sementara mungkin bersifat sementara; akun yang tidak sah atau format ekspor yang tidak didukung memerlukan error terminal atau intervensi. Gunakan anggaran percobaan yang terbatas dan percobaan ulang tertunda dengan backoff dan jitter jika didukung. Jaga agar pekerjaan yang gagal dapat diperiksa dengan bidang sensitif dihapus.
Terapkan timeout untuk panggilan eksternal dan anggaran tugas secara keseluruhan. Membatalkan upaya tidak membuktikan efek samping jarak jauhnya tidak terjadi. Publikasi yang timeout mungkin sudah menulis output. Rekonsiliasi berdasarkan ID ekspor alih-alih mempublikasikan hasil lain secara membabi buta.
Sertakan worker dalam deployment dan pemulihan
Hentikan pekerjaan baru pada worker lama menggunakan perilaku shutdown yang terdokumentasi. Biarkan pekerjaan yang sedang berjalan selesai atau interupsi dengan aman dalam tenggat yang diketahui. Uji crash setelah output ditulis tetapi sebelum penyelesaian tercatat; upaya pengganti harus menemukan hasil yang konsisten alih-alih menduplikasinya.
Jaga format pesan tetap kompatibel di seluruh rilis yang tumpang tindih. API baru dapat memasukkan payload yang tidak dapat dibaca worker lama. Versikan kontrak atau urutkan peluncuran sehingga konsumen yang didukung sudah ada sebelum pesan baru muncul. Sertakan penulis database ini dalam tinjauan kompatibilitas skema.
Pilih kendala berikutnya yang akan diubah
Tinggalkan pengaturan konkurensi, kebijakan retry, kontrak tugas dan aturan stop terukur. Jika ekspor mahal menunda pekerjaan kecil, pertimbangkan antrean terpisah dengan anggaran independen sebelum menaikkan batas global. Jika latensi API terganggu pada beban ekspor yang realistis, memisahkan worker mungkin lebih berguna daripada memperbesar satu host bersama.
Ulangi beban kerja yang sama setelah perubahan dan simpan perbandingannya. API dan worker menjelaskan di mana App 2 dan memori tambahan masuk dalam pilihan. Prosedur ini tidak menyiratkan antrean terkelola, pekerjaan tak terbatas atau penskalaan otomatis.
Referensi resmi
Dokumentasi telah ditinjau untuk artikel ini. Contoh adalah latihan perencanaan, bukan perintah yang diuji pada server PrivacyNodes. Periksa dokumentasi untuk versi yang terpasang.