Baik atau buruk, kami telah memigrasikan seluruh aplikasi web LAMP kami dari mesin khusus ke cloud (mesin Amazon EC2). Sejauh ini hasilnya bagus, tetapi cara kami membuat crons kurang optimal. Saya memiliki pertanyaan khusus Amazon tentang cara terbaik mengelola pekerjaan cron di cloud menggunakan "cara Amazon".
Masalahnya : Kami memiliki banyak server web, dan perlu menjalankan crons untuk pekerjaan batch seperti membuat RSS feed, memicu email, banyak hal berbeda sebenarnya. TETAPI tugas cron hanya perlu dijalankan di satu mesin karena sering menulis ke database sehingga akan menduplikasi hasil jika dijalankan di beberapa mesin.
Sejauh ini, kami menetapkan salah satu server web sebagai "master-webserver" dan memiliki beberapa tugas "khusus" yang tidak dimiliki server web lain. Kompromi untuk komputasi awan adalah keandalan - kami tidak menginginkan "server web master" karena ini adalah satu titik kegagalan. Kami ingin semuanya identik dan dapat meningkatkan dan menurunkan skala tanpa mengingat untuk tidak mengeluarkan server web master dari cluster.
Bagaimana kita dapat mendesain ulang aplikasi kita untuk mengonversi pekerjaan cron Linux menjadi item pekerjaan sementara yang tidak memiliki satu titik kegagalan?
Ide saya sejauh ini:
- Miliki mesin yang didedikasikan hanya untuk menjalankan cron. Ini akan menjadi sedikit lebih mudah dikelola tetapi masih akan menjadi titik kegagalan tunggal, dan akan membuang-buang uang dengan memiliki contoh tambahan.
- Beberapa pekerjaan mungkin dapat dipindahkan dari Linux crons ke MySQL Events namun saya bukan penggemar ide ini karena saya tidak ingin memasukkan logika aplikasi ke dalam lapisan database.
- Mungkin kita dapat menjalankan semua cron di semua mesin tetapi mengubah skrip cron kita sehingga semuanya dimulai dengan sedikit logika yang menerapkan mekanisme penguncian sehingga hanya satu server yang benar-benar mengambil tindakan dan yang lainnya langsung saja. Saya bukan penggemar ide ini karena kedengarannya berpotensi buggy dan saya lebih suka menggunakan praktik terbaik Amazon daripada menjalankan praktik kami sendiri.
- Saya membayangkan situasi di mana pekerjaan dijadwalkan di suatu tempat, ditambahkan ke antrean dan kemudian server web masing-masing bisa menjadi pekerja, yang dapat berkata "hei, saya ambil yang ini". Amazon Simple Workflow Service terdengar persis seperti ini, tetapi saat ini saya tidak tahu banyak tentangnya sehingga informasi spesifik apa pun akan membantu. Tampaknya cukup berat untuk sesuatu yang sederhana seperti cron? Apakah ini layanan yang tepat atau apakah ada layanan Amazon yang lebih cocok?
Pembaruan: Sejak mengajukan pertanyaan, saya telah menonton webinar Amazon Simple Workflow Service di YouTube dan memperhatikan pada 34:40 ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ) saya melihat sekilas slide yang menyebutkan tugas cron sebagai aplikasi sampel. Di halaman dokumentasi mereka, " Sampel AWS Flow Framework untuk Amazon SWF ", Amazon mengatakan mereka memiliki kode sampel untuk cron:
... > Cron job Dalam contoh ini, alur kerja yang berjalan lama secara berkala menjalankan aktivitas. Kemampuan untuk melanjutkan eksekusi sebagai eksekusi baru sehingga eksekusi bisa berjalan untuk waktu yang sangat lama ditunjukkan. ...
Saya mendownload AWS SDK untuk Java ( http://aws.amazon.com/sdkforjava/ ) dan cukup yakin terkubur di dalam lapisan folder yang konyol ada beberapa kode java ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
).
Masalahnya adalah, jika saya jujur, ini tidak terlalu membantu karena ini bukan sesuatu yang dapat dengan mudah saya cerna dengan keahlian saya. Contoh yang sama hilang dari PHP SDK dan sepertinya tidak ada tutorial yang menjelaskan prosesnya. Jadi intinya, saya masih mencari nasehat atau tips.