Microsecond Cloud Computing nowym trendem w chmurze

Pojawienie się na rynku Lambdy i rozliczania milisekundowego pokazało, że przyszłość chmury to ciągłe optymalizowanie kodu oraz przyspieszanie jego wykonania przy jednoczesnej redukcji zapotrzebowania na pamięć RAM. Programistów czekają nowe wyzwania.

Artykuł ten pojawił się w ICT Professional 08/2015 w skróconej formie. Poniżej zamieszczam pełną treść.

Dużo w ostatnim czasie słyszy się o migracji aplikacji z modelu klasycznego – wewnątrz maszyn wirtualnych – do środowisk opartych o kontenery. Założeniem jest oddzielenie się od warstwy systemu operacyjnego i przechowywanie tylko kluczowych danych w postaci bibliotek oraz plików niezbędnych do uruchomienia aplikacji wewnątrz logicznie odseparowanych od siebie wirtualnych kontenerów. Mogą one być  w prosty sposób przenoszone i wersjonowane np. po wgraniu kolejnego wydania aplikacji tworzymy nowy punkt odniesienia, do którego w krótkim czasie możemy wrócić gdyby coś poszło nie tak.  Dzięki temu zespoły deweloperskie mogą w większym stopniu skupić się na tworzeniu aplikacji, pozostawiając utrzymanie systemów operacyjnych zespołom za to odpowiedzialnym. Nie uwalnia to jednak programistów od myślenia o swoim środowisku uruchomieniowym oraz dbałości o jego aktualność i bezpieczeństwo. Wszystko po to, by kod, który przygotują, działał dokładnie tak samo jak w środowisku testowym.

Lambda – przyszłość chmury

Gdy Amazon Web Services 14 listopada 2014 r. ogłosił uruchomienie wersji beta swojej unikalnej usługi Lambda, nikt nie słyszał o rozliczaniu usług w chmurze na poziomie milisekundowym. Nikt nie myślał o tym, że będzie mógł uruchamiać swój kod bez zastanawiania się na jakim serwerze aplikacja została wdrożona. Czym zatem jest Lambda? Można śmiało stwierdzić, że jest usługą polegającą na wypożyczaniu mocy obliczeniowej na wykonanie konkretnego bloku kodu w postaci funkcji (JavaScript lub Java). Co więcej, rozliczanie odbywa się na podstawie długości trwania takiego wywołania oraz ilości pamięci RAM, która tej funkcji została przydzielona. Usługa ta dba o wysoką dostępność, automatyczne skalowanie i przydzielanie zasobów. Kod uruchamiany jest na środowisku przygotowanym przez ekspertów, którzy zadbali o bezpieczeństwo, separację między klientami i odpowiednie wersje wszystkich komponentów uruchomieniowych. Dzięki temu Lambda jest usługą o zerowym poziomie administracji. Skupiamy się jedynie na kodzie oraz logice biznesowej, czyli na tym co jest dla nas najbardziej istotne.

Jak to wygląda w praktyce? Czyli Microsecond Cloud Computing

Przyjrzyjmy się przykładowej witrynie internetowej, której głównym celem jest przechowywanie i prezentowanie fotografii. Użytkownicy mają możliwość wykorzystania przeglądarki internetowej (HTTPs) lub aplikacji mobilnej (REST) do umieszczania, wyświetlania, aktualizowania i usuwania zdjęć. Wykorzystując gotowe funkcjonalności jakie dostarczają Lambda, API Gateway, S3, Route53 i DynamoDB – budujemy naszą aplikację bez wykorzystania maszyn wirtualnych czy nawet kontenerów. Możliwe jest to dzięki połączeniu zdarzeń (ang. event) inicjowanych przez użytkowników z odpowiednimi funkcjami Lambda. Wywoływać je mogą poniższe usługi AWS:

  • operacje na S3
  • strumienie DynamoDB
  • strumienie Kinesis
  • powiadomienia SNS
  • powiadomienia Cognito
  • wpisy w AWS CloudTrail
  • zewnętrzne wywołania API, np. poprzez wykorzystanie API Gateway

Z powodu pełnej dowolności w postaci wykonywanego kodu  możemy kolejnymi funkcjami umieścić zdjęcia na S3, dokonać ich automatycznego skalowania, zaś meta-dane przekazać do tabeli DynamoDB.

Microsecond_Cloud_Computing

Schemat aplikacji opartej o AWS Lambda

Zobaczmy teraz ile będzie nas kosztować wywołanie naszych funkcji Lambda.  W poniższej tabeli uwzględniono: ilość wywołań, czasy wykonania, przydzieloną pamięć RAM poszczególnych funkcji oraz obliczony koszt.

Funkcja Wywołania Czas [ms] RAM [MB] Koszt [USD]
list    50 000 000 100 256 30,84
create      5 000 000 400 512 17,67
get  100 000 000 100 128 40,84
update      2 000 000 200 128 1,23
delete      1 000 000 100 128 0,41
SUMA 90,99

Na koszt składają się dwa elementy:

  • cena za GB-sekundę (zadeklarowana pamięć RAM pomnożona przez czas wykonania funkcji) – 0,00001667 USD
  • cena za wywołanie funkcji (pojedyncze zlecenie uruchomienia) – 0,0000002 USD.

Dla funkcji „list” czas wykonania liczymy jako 50 000 000 x 100ms x (256MB/1024MB) = 1 250 000 GB-s, czyli 20,84 USD. Dodając do tego 10 USD kosztu wywołań funkcji, w kwocie ok. 100 zł zamykamy miesięczny koszt kodu wykonywanego w Lambda dla jednej funkcji, poniżej 400 zł za wszystkie funkcje naszej aplikacji. Biorąc pod uwagę fakt, że nie zarządzamy żadnymi serwerami, przez co nie musimy dbać o wysoką dostępność i skalowanie środowiska, można stwierdzić, że jest to naprawdę niska cena za tak wiele możliwości. Dodatkowo na uwagę zasługuje informacja, że miesięcznie pierwszy milion wywołań oraz pierwsze 400 tys. GB-s są darmowe.

Poniżej umieszczam przykładowy fragment kodu w JavaScript, który mógłby zostać wykonany:

console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});

exports.handler = function(event, context) {
  console.log('Received event:', JSON.stringify(event, null, 2));
  // Get the object from the event and show its content type
  var bucket = event.Records[0].s3.bucket.name;
  var key = event.Records[0].s3.object.key;
  s3.getObject({Bucket: bucket, Key: key}, function(err, data) {
    if (err) {
      console.log("Error getting object " + key + " from bucket " + bucket + ". Make sure they exist and your bucket is in the same region as this function.");
      context.fail ("Error getting file: " + err) 
    } else {
      console.log('CONTENT TYPE:', data.ContentType);
      context.succeed();
    }
  });
};

Co oprócz ceny przemawia za Lambdą? Szerokie spektrum zastosowań do monitoringu i reagowania na zdarzenia, systemów komunikacji (chat, powiadomienia, kolejki), rozwiązań komunikacji w IoT, automatyzacji zadań, czy optymalizacji istniejących procesów wewnątrz aplikacji.

Na koniec dobre słowo

Rozliczanie za usługę Lambda odbywa się w kwancie 100ms – usługa jest na rynku przez niecały rok. Dlatego też usługę Lambda ochrzciłem mianem Microsecond Cloud Computing. Do tej pory polityką AWS było obniżanie cen, ale można się domyślać że pojawi się także skrócenie okresów rozliczeniowych do mikrosekund, dając jeszcze lepszą kontrolę nad kosztami.  Od strony programistycznej już teraz jest to sygnał, by dodatkowo optymalizować kod, przyspieszać jego wykonanie redukując zapotrzebowanie na pamięć RAM. Zainteresowanie usługą jest na tyle duże, że skłoni innych graczy na rynku cloud computing do pójścia tą drogą i w niedługim czasie doczekamy się produktów konkurencyjnych.

Poprzez korzystanie ze strony flexray.pl wyrażają Państwo zgodę na używanie cookies, a także akceptują Politykę dotyczącą tych plików. Nie, chcę się dowiedzieć więcej

Aby zapewnić Tobie najwyższy poziom realizacji usługi, opcje ciasteczek na tej stronie są ustawione na "zezwalaj na pliki cookies". Kontynuując przeglądanie strony bez zmiany ustawień lub klikając przycisk "Akceptuję" zgadzasz się na ich wykorzystanie.

Zamknij