Programowanie reaktywne w jezyku Scala


Skalowanie oraz klastrowanie w Akka

  • Do skalowania aktorów wykorzystujemy koncepcję routingu dostepnego w routerach Akka
  • Pobranie i uruchomienie przykładowego projektu:
  •   git clone https://github.com/agh-reactive/reactive-lab6
      cd reactive-lab6
      sbt compile
      // for the rest, please take a look at the README file
    

akka-http jako prosty server HTTP

Wskazówka: Jeśli chcemy zobaczyć jak takie DSL zostało zbudowane i jakie mechanizmy `implicit` zostały użyte, to w Intellij: `ctrl + shift + alt + +`. Jeśli chcemy potem zwinąć to zamiast '+' wstawiamy '-'

Przygotowanie klastra w Akka

Wykorzystanie clustra razem z routingiem

Zaawansowane zrównoleglanie — Akka Sharding (nie będzie bezpośrednio tematem zadań)

Testy wydajnościowe za pomocą Gatling

  • https://gatling.io/
  • Aby uruchomić testy w projekcie:
    sbt gatling-it:test
    Trzeba pamiętać o uruchomieniu najpierw odpowiednich serwerów (zobacz plik `cluster_demo.sh`).
    Wyświetlenie bezpośrednio w przeglądarce ostatniego raportu:
    sbt gatling-it:lastReport

Zadanie

  1. (15 pkt) Skalowanie i testowanie obciążenia katalogu
    • Wyskalować katalog produktów za pomocą mechanizmu routingu
    • (lokalnie, jedna VM, wiele instancji katalogu jako routees)
    • Przeprowadzić testy obciążeniowe API wybranym narzędziem (w przykładzie z laboratoriów znajdziemy przykład testów w Gatlingu), krótko uzasadnić wybór narzędzia do testów
    • Oszacować liczbę użytkowników sklepu jaką możemy obsłużyć. Podać przyjęte założenia.
    • (Dla zainteresowanych). Można skorzystać z prawa Little'a, żeby obliczyć parametry wydajności (i testów) teoretycznie i porównać je z wynikami eksperymentalnymi.
  2. (15 pkt) Akka Cluster
    • Skonfigurować Akka Cluster dla 3 węzłów.
    • Każdy węzęł powinien udostępiać endpoint RESTowy.
    • (Opcjonalnie -- w Gatlingu można po prostu podać kilka adresów http) Skonfigurować load-balancer HTTP (nginx lub haproxy)
    • Powtórzyć testy
  3. (10 pkt) PubSub w klastrze
    • Stworzyć aktora zliczającego liczbę zapytań obsługiwanych przez poszczególne instancje katalogu produktów. Statystyka powinna być dostępna przez REST.
    • Stworzyć aktora logującego na konsolę (loggerem) wszystkie zapytania.
    • Katalog produktów wysyła informację o każdym zapytaniu korzystając z mechanizmu publish-subscribe wraz z identyfikatorem instancji katalogu obsługującej żądanie.
    • Oba aktory powinny być uruchomione na dedykowanym węźle (nie obsługującym żądań)


Bartosz Baliś, balis at agh edu pl
Krzysztof Borowski, kborowski at agh edu pl
Maciej Malawski, malawski at agh edu pl
Katarzyna Rycerz, kzajac at agh edu pl
Kamil Figiela, kfigiela at agh edu pl