The European Union s Making the Labour Market more Inclusive III programme For North Cyprus Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals Module 3: Cloud Computing Modül 3: Bulut Bilişim Laboratuar Notları #8 A project implemented by CyberSoft Bilişim Teknolojileri Ltd. This project is funded by European Union. The contents of this publication are the sole responsibility of Cybersoft Bilişim Teknolojileri Ltd. and can in no way be taken to reflect the views of the European Union.
İçerik Bölüm 8: Amazon SQS 1. Eşzamanlı Olmayan (Asenkron) Mesajlaşma (Asynchronous messaging) nedir?...2 2. Amazon SQS Nedir?...............2 3. Amazon SQS de Programlama......... 3 3.1 Kuyruk Yaratma...............3 3.2 Kuyruk Listeleme.........4 3.3 Kuyruğa bilgi koyma.........5 3.4 Kuyruktan bilgi alma.........6 1
1. Eşzamanlı Olmayan (Asenkron) Mesajlaşma (Asynchronous messaging) nedir? Asenkron mesajlaşma, uygulamaların modüler bir şekilde çalışmasını sağlamak için kullanılmaktadır. Uygulamalar genellikle iki veya daha fazla işlem adımları içermektedir ve bu adımların çalışması genellikle pipeline (boru) şeklinde düzenlenmistir. Bu işlem adımları genellikle birbirlerine bağlıdırlar. Ardışık işlem adımları aynı sunucu üzerinde çalışabildiği gibi, bazen de aynı ağ üzerindeki değişik sunucularda da çalışabilirler. Eşzamanlı Olmayan (Asenkron) Mesajlaşmanın Avantajları Nelerdir? a) Her adım kendi hızında çalışır. Bir aşamadaki geçici yavaşlamalar bütün boru hattını durdurmak yerine sadece iş yavaşlaması ile sonuçlanır. b) Herhangi bir adım kilitlenmiş veya geçici olarak cok yüklenmiş olsa bile hiçbir iş kaybı olmaz. c) Adımlar birbirinden bağımsız olduğundan farklı sunucular üzerinden çalışabilirler ki bu da işlem yükü arttığı zaman sistemin yükünü farklı sunuculara dağıtmanıza yardımcı olur. d) Adımlar birbirinden bağımsız olduğunda test etmesi ve değiştirip geliştirilmesi daha kolay olur. 2. Amazon SQS Amazon SQS e başlamadan önce, AWS hesabınızdaki SQS hizmetinin etkin olduğundan emin olmalısınız. Amazon SQS hizmetini etkinleştirmek için Amazon SQS in ana sayfasına http://aws.amazon.com/sqs/ gidiniz ve Sign Up For Amazon SQS butonuna tıklayınız. Giriş yaptıktan sonra ekranınıza fiyatlandırma ve kredi kartı bilgilerini görüntüleyen sayfa gelecektir ve daha sonra SQS servisini etkin hale getirmek için Complete Sign Up butonuna tıklayınız. Amazon SQS, yüksek ölçeklenebilir sistemlerin yaratılmasında temel rolü üstelenen asenkron mesajlaşmayı sağlayan ilk Amazon altyapısıdır. AWS hesabınızı kullanarak istediğiniz kadar SQS kuyrukları (queue) yaratabilirsiniz. Ancak Amazon un 30 günden fazla mesaj göndermek veya almak için kullanılmayan kuyrukları silme hakkı vardır. Her SQS kuyruğunun bir ismi vardır ve benzersiz olmalıdır. Kuyruk isimleri en fazla 80 karakter olabilir ve alfanümerik karakterler, tire ve vurgular içerebilir. Her kuyruk benzersiz bir kuyruk URL ile tanımlanır. URL atandığında kuyruk oluşturulur. Kuyruklar mesajları saklamak için kullanılır. Mesajlar 8192 byte varsayılan uzunlukta olabilir; ancak set_queue_attributes fonksiyonu kullanılarak bu sınır 65.536 byte a yükseltilebilir. Mesajar otomatik olarak silinmek yerine geçici olarak görünmez olurlar. Kodunuz mesajı aldıktan sonra mesajın visibility timeout denilen işlem süresi vardır. Eğer mesajın iletilmesinde bir sorun olduysa, mesaj tekrardan görünür olur. Bu işlem modeli size veri kaybı olmayan uygulamalar yaratmanıza yardımcı olur. Visibility timeout süresi normalde 20saniye olarak ayarlanmıştır ancak istenilirse 12 saate kadar artırılabilir. SQS den mesajı aldığınız zaman aynı zamanda mesajın alındığına dair receipt handle da alınır. Denilen Bu handle ı mesajı silerken veya herhangi bir özelliğini değiştirirken kullanırsınız. Kuyruktaki mesajlar zaman sınırlamalıdırlar. Eğer herhangi bir sebepten dolayı mesajlar alınamamış ise 4 günden sonra kuyruktan silinirler. Ancak siz isterseniz set_queue_attributes fonksiyonunu kullanarak bu süreyi bir saate kadar düşürebilir veya iki haftaya kadar çıkarabilirsiniz. 2
Amazon SQS kullanarak yapılabilen işlemler: SQS programlama modeli cok basittir. Amazon hesabınızı kullanarak kuyruk yaratabilir ve silebilirsiniz. Kuyruğa mesaj gönderebilir, kuyruktan mesaj alabilir veya silebilirsiniz. Aynı zamanda mesaj görünebilirlik süresi gibi mesaj özelliklerini değişebilirsiniz. Kuyruk erişim izinlerini detaylı olarak kontrol edebilirsiniz. 3. Amazon SQS de Programlama 3.1 Kuyruk yaratma : öncelikle kuyruk yaratma ile başlayalım. Bunun için aşağıdaki kodu kullanabilrsiniz: if (count($argv) < 2) exit("usage: ". $argv[0]. " QUEUE...\n"); for ($i = 1; $i < count($argv); $i++) $queue = $argv[$i]; $res = $sqs->create_queue($queue); print("created queue '$queue'\n"); $error = (string) $res->body->error->message; print("could not create queue '$queue': $error.\n"); chapter_06/create_queues.php Bu program kodu, komut satırından kuyruk isimlerini kabul eder ve yeni bir AmazonSQS nesnesi yaratır. Daha sonra her kuyruk adı için create_queue yöntemini çağırır ve bazı yararlı mesajları ekrana basar. Örnek ekran çıktısı aşağıdaki gibidir: php create_queues.php A B C Created queue 'A' Created queue 'B' Created queue 'C' Not 1: Eğer kuyruk oluşturulamamışsa, hata iletisi döndürülür ve hata mesajı ekrana basılılr. 3
Not 2:Daha önceden varolan kuyruğu tekrar yaratmaya çalışmak herhangi bir problem yaratmaz ve kuyrukta herhangi bir soruna yol açmaz. 3.2 Kuyrukları listeleme chapter_06/list_queues.php $res = $sqs->list_queues(); $queues = $res->body->listqueuesresult->queueurl; for ($i = 0; $i < count($queues); $i++) print($queues[$i]. "\n"); print("could not retrieve list of SQS queues\n"); Bu program list_queues yöntemini çağırır ve daha sonra sonuç dizisini ekranda görüntüler. Eğer 1.000 den fazla kuyruğunuz varsa, bunları hepsini list_queues veya herhangi bir diğer SQS fonksiyonunu kullanarak listelemek imkansızdır. Gerçekci düşünürsek bir uygulamanın1000 den fazla kuyruğa ihtiyacı olma olasılığı yüksek değildir. Dolayısıyla bu kıstlama uygulamada sorun yaratmaz. 3.3 Kuyruğa bilgi koyma : Sıradaki adım yukarıda yarattığınız kuyruğuuza bazı bilgiler yüklemektir. Aşağıdaki program kodu kuyruğa bir veya birden fazla bilgi koyabilmenizi sağlar. if ($argc < 3) exit("usage: ". $argv[0]. " QUEUE_NAME ITEM...\n"); $queuename = $argv[1]; $queueurl = $sqs->create_queue($queuename)->body->createqueueresult ->QueueUrl; for *($i = 2; $i < $argc; $i++) 4
$message = $argv[$i]; $res = $sqs->send_message($queueurl, $message); print("posted '$message' to queue '$queuename'\n"); $error = $res->body->error->message; print("could not post message to queue: $error\n"); Kodu incelerseniz, kuyruğa bilgi koymanın ne kadar kolay olduğunu görebilirsiniz. send_message metodu bütün işi bizim için yapıyor...tek yapmanız gereken kuyruk URL ini ve kuyruğa koymak istediğiniz mesajı command line dan girmek olacaktır. php post_queue.php queue_name A B C Posted 'A' to queue queue_name Posted 'B' to queue queue_name Posted 'C' to queue queue_name 3.4 Kuyruktan bilgi alma: Şimdi de kuyruktan nasıl bilgi alabileceğimizi görelim. Aşağıdaki kod kuyruktan yeni bilgileri çeker, eğer receive_message metodundan herhangi bir bilgi dönmediyse, 1 saniye bekledikten sonra tekrardan dener. chapter_06/post_queue.php 154 Host Your Web Site in the Cloud if ($argc!= 2) exit("usage: ". $argv[0]. " QUEUE_NAME\n"); $queuename = $argv[1]; $queueurl = $sqs->create_queue($queuename)->body->createqueueresult ->QueueUrl; while (true) $res = $sqs->receive_message($queueurl); if (isset($res->body->receivemessageresult->message)) $message = $res->body->receivemessageresult->message; 5
$messagebody = $message->body; $receipthandle = (string)$message->receipthandle; print("message: '$messagebody'\n"); $sqs->delete_message($queueurl, $receipthandle); sleep(1); $error = $res->body->error->message; print("could not pull message from queue: $error\n"); Şimdi de sırada yukarıda gördüğümüz kuyruk manipülasyon komutlarını test edelim. En iyi sonuç için, ikinci bir terminal veya PuTTY penceresi açınız.ilk pencerede, bu komutu kullanarak bir kuyruk oluşturunuz: php create_queues.php my_queue İkinci pencerede ise aşağıdaki komutu kullanarak oluşturduğunuz kuyruktan bilgi çekmeye başlayınız: $ php pull_queue.php my_queue Kuyrukta herhangi bir bilgi yoktur dolayısıyla program sadece döngüde dönmektedir. Şimdi ilk pencerenize gidiniz ve kuyruğa birkacç tane mesaj koyunuz: $ php post_queue.php my_queue 1 2 3 4 5 Şimdi ikinci pencereye geri dönünüz ve gelen mesajlarınızı kontrol ediniz: Message: '3' Message: '4' Message: '1' Message: '5' Message: '2' Gördüğünüz gibi mesajlar gönderdiğinizden farklı sırada gelmektedir. Bu aslında beklenen bir sonuçtur ve SQS dağınık uygulama yapısından kaynaklanmaktadır. Uygulamanızı bitirdikten Ctrl+c ile ilk terminalinizi kapatmayı unutmayınız!!! 6