Aplikacje Reaktywne - .Aplikacje Reaktywne i okolice. Aplikacje webowe kiedy›. Aplikacje...

download Aplikacje Reaktywne - .Aplikacje Reaktywne i okolice. Aplikacje webowe kiedy›. Aplikacje webowe

of 57

  • date post

    01-Mar-2019
  • Category

    Documents

  • view

    213
  • download

    0

Embed Size (px)

Transcript of Aplikacje Reaktywne - .Aplikacje Reaktywne i okolice. Aplikacje webowe kiedy›. Aplikacje...

Aplikacje Reaktywnei okolice

Aplikacje webowe kiedy

Aplikacje webowe dzisiaj

Problemy

Wydajno Tradycyjne blokujce woanie oraz obsuga to cios

dla klienta i serwera Niezawodno

Czci systemu mog ulec awarii Komunikacja jest niepewna Zaleymy od usug dostarczanych z zewntrz

Rozwizania wydajnociowe

Nieblokujce wywoania Biblioteki dziaajce na poziomie TCP, HTTP, a

nawet caego API Nieblokujca obsuga

Operacje dyskowe, dugotrwae przetwarzanie w tle Naley by konsekwentnym i nie symulowa

Pomaga nam system operacyjny (Linux), jzyki programowania oraz ich biblioteki

Nie-do-koca-Rozwizania komunikacyjne

Abstrakcje takie jak RPC

Z zaoenia s przezroczyste zdalny komponent jest traktowany jak lokalny obiekt S blokujce (ale nie tylko) Daj zudne wraenie niezawodnoci Nie pozwalaj zarzdza awaryjnymi

komponentami

Gone hasa

asynchronous

non-blocking

real-time

highly-availableloosely coupled

scalable

fault-tolerant

concurrent

reactive

event-driven

push instead of pull

distributed

low latency

high throughput

Podejcie reaktywne

Sterowane zdarzeniami (event-driven) systemy mog by: Skalowalne (scalable) Zdolne do samoleczenia (resilient)

Dziki czemu uytkownik obserwuje krtki czas reakcji (responsive)

Te zasady zostay niedawno sformuowane w manifecie epoki Stanowi swojego rodzaju koncepcyjny wzorzec

projektowy Istot jest uwzgldnianie powyszych cech od pocztku

tworzenia aplikacji, na jej wszystkich poziomach

Na przykadzie...

Jzyk: Scala Obiektowy Funkcyjna skadnia i filozofia (ale mona

zrezygnowa) Type-safety oraz immutability

Implementacja na JVM (s plusy i minusy)

The Future of Scala

Future to asynchroniczna operacja, ktra zwraca wynik lub wyjtek

Wykonuje si w kontekcie wtku, najczciej z puli

Obecno w Javie, ale tylko blokujce czekanie na wynik

Scala dodaje operacje (prawie) monadyczne Na Future mona rejestrowa przeksztacenia i

callbacki do (asynchronicznego) wykonania Funkcyjna notacja Scali pomaga to zwile zapisa

Na przykadzie, dalej...

Framework: Akka Bo (niskopoziomowa) wspbieno jest trudna Podstawowy byt: jednowtkowy Aktor Komunikacja za pomoc przesyania wiadomoci

pomidzy aktorami Wysyanie (z reguy) nie jest blokujce:

wiadomoci s buforowane w skrzynce odbiorczej

Akka dokadniej

Moliwe jest przezroczyste rozproszenie na wiele maszyn Automatyczna serializacja i deployment za pomoc

pliku konfiguracyjnego

Podstawowa wersja nie kontroluje typw komunikatw Prostota i elastyczno, ale Scala i pattern-matching

pozwala atwo decydowa, co zrobi

Akka reaktywnie

Event-driven:

Komunikaty opisuj zdarzenia, ktre s wspbienie przetwarzane

Scalable:

Dobrze napisana aplikacja z atwoci skaluje si na wiksz liczb rdzeni, a take wiksz liczb maszyn

Akka reaktywnie

Resilient:

Zakadamy, e aktor-odbiorca moe sta si niedostpny w dowolnej chwili Z powodu wewntrznego bdu logicznego, awarii

maszyny lub problemu z sieci Wysanie wiadomoci nie gwarantuje jej

dostarczenia, a tym bardziej pomylnego przetworzenia

Programista musi tak projektowa przepyw komunikatw, aby uwzgldni te ograniczenia

Akka reaktywnie

Responsive:

Wiemy, e nieblokujca architektura pozwala efektywnie wykorzysta CPU Programista nie jest ograniczony jednym wtkiem

moe dzieli dostpn moc pomidzy rne czci aplikacji majce rne wymagania

Celem jest minimalizacja opnie tam, gdzie to najbardziej podane

Resilient + responsive

Co zrobi gdy programista jednak si pomyli... Czasem blokujca operacja?

Bulkheading (jak w tankowcach) Tworzymy ograniczone pule wtkw z ktrych

korzystaj aktorzy-workerzy

Czasem bd logiczny? Let it crash (filozofia Akki, wzita z Erlangu) Rodzic aktora zostanie poinformowany i odpowiednio

zareaguje

Resilient + responsive

Podejcie reaktywne zakada dzielenie aplikacji na czci mogce dziaa niezalenie Czasowa niedostpno pewnych funkcji nie

musi oznacza zatrzymania systemu Akka wymusza hierarchi nadzoru

Jest to wysokopoziomowa, deklaratywna obsuga bdw, w ktrej instruujemy framework jak postpowa z zawodnymi aktorami

Zastosowania

Middleware koordynacja aktorw i komunikatw dynamiczna topologia przetwarzanie w tle

yciowe przykady Gry internetowe, zakady bukmacherskie Finanse, telekomunikacja Media spoecznociowe (Twitter, LinkedIn)

Indeksowanie, wyszukiwanie z wielu rde Aktualizacje dla uytkownika

Single page web applications

Plan prezentacji

Single page web application (w skrcie SPA) AngularJS

SPA - charakterystyka

aplikacja w przegldarce strona pobierana raz mnstwo logiki po stronie klienta strona nie przeadowywuje si dane (JSON, asynch, PUSH)

SPA - cecha nr 1

SPA potrafi renderowa si

jak aplikacja desktopowa

SPA - cecha nr 2

SPA potrafi reagowa jak

aplikacja desktopowa

SPA - cecha nr 3

SPA potrafi powiadomi

uytkownika o stanie

aplikacji jak aplikacja

desktopowa

SPA - cecha nr 4

Wysoka dostpno

SPA - cecha nr 5

Cross-platformowo

SPA w Javascriptcie vs Flash i Java

nie wymaga wtyczek lejszy jeden jzyk po stronie klienta jednolity wygld strony

SPA w Javascriptcie

przegldarka jest najczciej uywan aplikacj Javascript sta si szybki ewoluowanie Javascriptu (zaawansowane featurey) wdroenie strony w Javascripcie jest trywialne Javascript w caym stosie technologicznym aplikacji

Podsumowanie: SPA - zalety

lepszy User Experience wysza wydajno dane musz by dostpne przez API

Podsumowanie: SPA - wady

duy load na pocztku duplikacja kodu potrzebny wystarczajco mocny klient Javascript wycieki pamici

Architektura

framework do tworzenia SPA prace od 2009 roku wspierany przez Google projekt open-source (lic. MIT)

Filozofia AngularJSa

1. programowanie deklaratywne (UI, czenie

komponentw oprogramowania), programowanie

imperatywne (logika biznesowa)

2. oddzielenie manipulowania DOMem od logiki aplikacji

3. pisanie kodu aplikacji tak samo wane, jak pisanie

testw

4. oddzielenie warstwy klienckiej od warstwy serwerowej

AngularJS - feature 1

Dwukierunkowe wizanie

danych(ang. two way data-binding)

AngularJS - feature 2

Szablony(ang. templates)

AngularJS - feature 3

MVC

AngularJS - feature 4

Wstrzykiwanie zalenoci(ang. dependency injection)

AngularJS - feature 5

Dyrektywy(ang. directives)

Technologie, narzdzia

1. yeoman

2. bower

3. grunt

4. bootstrap

5. jasmine

6. karma

7. underscore.js

Standardy komunikacji serwer-klient

1. WebSocket

2. Server-Sent Events w HTML5

3. Aplety Javaowe, wtyczki Flashowe

4. AJAX

5. SocketIO

Warstwa przechowywania

Wymagania

Efektywno (opnienie, przepustowo) Transakcyjno

atomowo, wspbieno, izolacja, trwao Funkcjonalno Skalowalno Niezawodno Bezpieczestwo Replikacja

By moe nie potrzebujemy wszystkiego

Efektywno (opnienie, przepustowo) Transakcyjno

atomowo, wspbieno, izolacja, trwao Funkcjonalno Skalowalno Niezawodno Bezpieczestwo Replikacja

MySQL

Transakcyjno Funkcjonalno Niezawodno Bezpieczestwo

Skalowalno

Redis

Baza typu klucz warto Udoskonalony memcached a raczej

memcachedb Efektywny Jednowtkowy Mimo wszystko moe zgubi dane

Redis

Efektywno Transakcyjno Funkcjonalno Niezawodno

Skalowalno Bezpieczestwo

Szybki i funkcjonalny, ale nie gwarantuje bezpieczestwa danych i sabo si skaluje.

MongoDB

Baza przechowuje dokumenty (Document-oriented storage)

Dopuszcza modyfikacje dokumentw Szerokie zastosowania Ograniczona transakcyjno Najpopularniejsza baza NOSQL

MongoDB

MongoDB Efektywno Funkcjonalno Niezawodno Skalowalno Bezpieczestwo

Transakcyjno

Oferuje skalowalno i bezpieczestwo, jednak kosztem transakcyjnoci

Riak

Zaprojektowany pod ktem skalowalnoci i replikacji

Wysoki poziom gwarancji (Unexpected is expected)

Ograniczony zestaw operacji Brak atomowych operacji trzeba

rozwizywa konflikty

Riak

Riak Efektywno Niezawodno Skalowalno Bezpieczestwo

Transakcyjno Funkcjonalno

Vector clocks moe si okaza niewygodnym rozwizaniem. Kada modyfikacja wymaga odczytania caej wartoci.

CouchDB

Nigdy nie modyfikuje danych Odczyt nigdy nie jest wstrzymywany Moemy wysa skrypt do wykonywania

odczytw i modyfikacji Konflikty rozwizujemy podobnie jak w GIT

CouchDB

CouchDB Niezawodno Skalowalno Bezpieczestwo Funkcjonalno

Efektywno

Czsto zmieniajce si dane mog powodowa problemy wydajnociowe

rda http://www.reactivemanifesto.org/

http://highscalability.com/blog/2013/5/8/typesafe-interview-scala-akka-is-an-iaas-for-your-process-ar.html

http://net.tutsplus.com/tutorials/javascript-ajax/5-awesome-angularjs-features

http://angularjs.org/

http://singlepageappbook.com/goal.html

Michael S. Mikowski, Josh C. Powell. Single Page Web Applications, JavaScript end-to-end

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis