İyi ya da kötü, tüm LAMP web uygulamamızı özel makinelerden buluta (Amazon EC2 makineleri) taşıdık. Şimdiye kadar harika gidiyor ama crons yapma şeklimiz yetersiz . Buluttaki cron işlerini "Amazon yöntemini" kullanarak en iyi şekilde nasıl yönetebileceğim konusunda Amazon'a özgü bir sorum var.
Sorun : Birden fazla web sunucumuz var ve RSS beslemeleri oluşturma, e-postaları tetikleme, aslında birçok farklı şey gibi toplu işler için cron'lar çalıştırmamız gerekiyor. ANCAK cron işlerinin yalnızca bir makinede çalışması gerekir, çünkü genellikle veritabanına yazarlar ve birden fazla makinede çalıştırılırsa sonuçları çoğaltır.
Şimdiye kadar, web sunucularından birini "ana web sunucusu" olarak belirledik ve diğer web sunucularının sahip olmadığı birkaç "özel" görevi var. Bulut bilişimin değiş tokuşu güvenilirliktir - "ana web sunucusu" istemiyoruz çünkü bu tek bir hata noktası. Bunların hepsinin aynı olmasını ve ana web sunucusunu kümeden çıkarmamayı hatırlamadan ölçeklendirip küçültebilmelerini istiyoruz.
Linux cron işlerini tek bir hata noktası olmayan geçici çalışma öğelerine dönüştürmek için uygulamamızı nasıl yeniden tasarlayabiliriz?
Şimdiye kadarki fikirlerim:
- Yalnızca çalışan cronlara ayrılmış bir makineye sahip olun. Bu biraz daha yönetilebilir, ancak yine de tek bir başarısızlık noktası olur ve fazladan bir örnekle biraz para israfına neden olur.
- Bazı işler muhtemelen Linux crons'tan MySQL Events'e taşınabilir, ancak uygulama mantığını veritabanı katmanına koymak istemediğim için bu fikrin büyük bir hayranı değilim.
- Belki tüm cronları tüm makinelerde çalıştırabiliriz, ancak cron betiklerimizi değiştirebiliriz, böylece hepsi bir kilitleme mekanizması uygulayan bir mantıkla başlar, böylece sadece bir sunucu gerçekten harekete geçer ve diğerleri sadece atlar. Potansiyel olarak hatalı göründüğü için bu fikrin hayranı değilim ve kendiminkini devirmek yerine Amazon'un en iyi uygulamasını kullanmayı tercih ederim.
- İşlerin bir yerde planlandığı, bir kuyruğa eklendiği ve ardından web sunucularının her birinin "hey, bunu alacağım" diyebilen birer işçi olabileceği bir durum hayal ediyorum. Amazon Simple Workflow Service tam olarak bu tür bir şey gibi görünüyor, ancak şu anda hakkında pek bir şey bilmiyorum, bu nedenle herhangi bir ayrıntı yardımcı olabilir. Bir cron kadar basit bir şey için biraz ağır gibi görünüyor? Doğru hizmet mi yoksa daha uygun bir Amazon hizmeti var mı?
Güncelleme: Soruyu sorduğumdan beri YouTube'da Amazon Simple Workflow Service web seminerini izledim ve 34:40 ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ) cron işlerinden örnek bir uygulama olarak bahseden slayt. Amazon , " Amazon SWF için AWS Flow Framework örnekleri " adlı belge sayfalarında, crons için örnek kodlara sahip olduklarını söylüyor:
... > Cron işleri Bu örnekte, uzun süren bir iş akışı periyodik olarak bir etkinlik yürütür. Yürütme işlemlerine yeni yürütmeler olarak devam etme yeteneği, böylece bir yürütmenin çok uzun süreler boyunca çalışabileceği gösterilmiştir. ...
AWS SDK for Java'yı ( http://aws.amazon.com/sdkforjava/ ) indirdim ve gülünç klasör katmanlarının içinde yeterince java kodu ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
) bulunduğundan eminim .
Sorun şu ki, eğer dürüst olursam, beceri setimle kolayca sindirebileceğim bir şey olmadığı için bu gerçekten yardımcı olmuyor. Aynı örnek PHP SDK'da eksik ve süreç boyunca yürüyen bir öğretici görünmüyor. Yani temelde, hala tavsiye veya ipucu arıyorum.