• 3 way replicated default • Automatic distribution ◦ Amazon DynamoDB stores three geographically distributed replicas of each table to enable high availability and data durability. • SSD • In-place Atomic Updates • Tahmini maliyet hesaplama https://aws.amazon.com/dynamodb/faqs/
Bu key ile DynamoDb unordered hash index olusturur. ◦ Bu hash index tablonun bölüntülenmesini saglar. • Sort/Range Key ◦ (HashKey + RangeKey) = Composite Key
most out of DynamoDB throughput, create tables where the partition key has a large number of distinct values, and values are requested fairly uniformly, as randomly as possible.” http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html
doğrulama: OpenCV Haar Cascade Classifier ◦ Python ◦ CPU üzerinde ~30 ms • Doğrulanan resmi önceden verilen ünlülerden birine benzetme: Caffe ◦ Python ◦ Önceden eğitilmiş bir ağı kendi ünlü setimize adapte ettik. ◦ CPU üzerinde ~20s ◦ GPU üzerinde ~500ms
• Sunucu yapılacak işi mesaj kuyruğuna koyar • İşçilerden biri işi alır • Sonucu istemcinin erişebileceği bir yere koyar • İstemci “poll” yaparak sonuca ulaşır
Autoscaling Group(AWS) Onedio KV Store • Mesaj kuyruğu: Beanstalk • İşçiler: AWS Autoscaling Group içerisinde G2 (GPU) instance’ları • Sonuç tablosu: Onedio’nun özel key - value sunucusu
çok zahmetli Autoscaling Group(AWS) • Sorun: Geliştirme bilgisayarında altyapıyı kurmak çok zahmetli ve işlem çok uzun sürüyor • Çözüm: Yeniden kullanılabilir temel işlemleri “mikroservis” yapmak. • Sorun: Mesaj kuyruğu geleneksel istek-cevap çalışma şekline yabancı! (Cevaplar da kuyruğa koyulmalı)
olduğunu doğrula. 2. Yüz bulunamazsa KV store’a hatayı bildir, işlemi bitir. 3. Resmi Caffe modeliyle işle, ünlülere benzerliğini puanla. 4. Caffe’den gelen puanlara göre, kullanıcıya gösterilecek alternatifleri seç ve KV stora’a yaz. Yeniden Kullanılabilir Uygulamaya Özel
tutar, sunucu sadece isteği işler, sunucunun durumunda değişiklik olmaz. • İstemci isteği atar ve cevabı bekler, cevap geldiğinde ne yapacağını bilir. • Kuyruk merkezli akışta istemci sorguyu atar ama cevabı beklemez. Cevabın aynı işlem’e (process) hatta aynı bilgisayara döneceği bile garanti değildir! • Uygulamanın bütün durum verisi istekle birlikte mesaja eklenir, sunucu isteği işler, yerine mesajı koyar ve durum bilgisiyle birlikte cevabı döner. • Yani istemcinin durumunda da değişiklik olmaz! • Bütün global durum mesaj kuyruğunda tutulur! Mesaj Kuyruğu Merkezli Akış - Tartışma
İstek argümanları (resmin URL’i, caffe modelinin adı vs.) ◦ Uygulamanın durumu (uygulama sonunda cevabın nereye yazılacağı vs.) ▪ Not: cevabı işleyecek “handler”ın kodu durumun bir parçasıdır (Program counter). ◦ İsteği yapan uygulamanın mesaj kuyruk kodu. • İstekleri cevaplamak için şu prosedür takip edilir: ◦ İstek kuyruğundan bir mesaj alınır, cevap kuyruğu, argümanlar ve kalanı ayrıştırılır. ◦ Argümanlar işlenerek isteğin cevabı oluşturulur. ◦ İstekle bildirilen uygulama kuyruğuna cevap ve uygulama durumunu içeren mesaj eklenir. • Uygulamayı yürütmek için şu prosdür takip edilir: ◦ Uygulamanın kuyruğundan bir mesaj alınır ve bir sonraki handler tespit edilir. ◦ Bu handler, uygulama durumu ve mesaj cevabıyla çağırılır. Protokol Özeti
seksek düzenliyor. • Uygulama basamaklarında ya da sunuculardan birinde bir hata oluştuğunda, seksek hataya sebep olan mesajı “bury” ediyor. Bu mesajlar kaybolmuyor, kodda hatalar ayıklanırken kullanılabiliyorlar. • Uygulamayı ya da servisleri yürüten işlemlerden biri ölse bile işler kaybolmuyor. • Seksek protokolü her dilde gerçeklenebilir ve farklı dillerin uygulamaları ve sunucuları şeffaf bir şekilde konuşabilirler. Faydaları
otomatik olarak açılıp kapatılabiliyor. • Kullanılabilen metrikler: CPU kullanımı, RAM, Trafik etc. • İşçiler isteklere cevap verirken %100 kapasitede çalışıyorlar, ama bu sistemin ne kadar yoğun olduğunu temsil etmiyor. • İstek kuyruklarında biriken mesaj sayısı yoğunluğu çok isabetli temsil ediyor! • queue_manager.py: Kuyrukları takip edip AWS API’si üzerinden işçi sayısını artırıp azaltıyor.