Technologia Programowania 2016/2017 Wykªad 9

Podobne dokumenty
Technologia Programowania 2016/2017 Wykªad 10

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Język programowania Scala + aktorzy Akka

Wzorce projektowe strukturalne cz. 1

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Programowanie wspóªbie»ne

Programowanie obiektowe

Aplikacje RMI

Programowanie wspóªbie»ne

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Rozwi zania klasycznych problemów w Rendezvous

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

Aplikacja wielow tkowa prosty komunikator

Praca Dyplomowa Magisterska

MiASI. Modelowanie analityczne. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Java wybrane technologie

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Zadanie 2: transakcyjny protokół SKJ (2015)

Mechanizmy pracy równoległej. Jarosław Kuchta

Podstawy modelowania w j zyku UML

Aplikacje RMI Lab4

Programowanie obiektowe

Platformy Programistyczne Zagadnienia sieciowe i wątki

Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

Wzorce projektowe kreacyjne

Programowanie zespołowe

ProActive Parallel Suite

Enkapsulacja, dziedziczenie, polimorfizm

1 Wprowadzenie do J2EE

Lab. 02: Algorytm Schrage

Komponenty sterowane komunikatami

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie rozproszone w języku Java

Metody Metody, parametry, zwracanie wartości

Podstawy modelowania w j zyku UML

Java: interfejsy i klasy wewnętrzne

Technologie i usługi internetowe cz. 2

Kompozycja i dziedziczenie klas

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Podstawy modelowania w j zyku UML

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Programowanie obiektowe w C++ Wykªad 4

Języki i metody programowania Java. Wykład 2 (część 2)

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Tworzenie i wykorzystanie usług

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie i struktury danych

Klasy abstrakcyjne i interfejsy

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

Aplikacja Sieciowa wątki po stronie klienta

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Wywoływanie metod zdalnych

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Forum Client - Spring in Swing

Wzorce projektowe. Wstęp

Programowanie obiektowe

Builder (budowniczy) Cel: Przykład:

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Współbieżność w środowisku Java

Sposoby przekazywania parametrów w metodach.

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Prosta aplikacja klient - serwer na bazie protokoªu UDP. Sprawozdanie.

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Model obiektu w JavaScript

Programowanie obiektowe

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Propozycja integracji elementów ±wiata gry przy u»yciu drzew zachowa«

Systemy Rozproszone - Ćwiczenie 6

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Wywoływanie metod zdalnych

Programowanie wielowarstwowe i komponentowe

Zaawansowane Aplikacje Internetowe

Analiza i projektowanie aplikacji Java

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Aplikacja wielowątkowa prosty komunikator

Scala - programowanie obiektowo-funkcyjne

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Projektowanie algorytmów rekurencyjnych


Transkrypt:

Technologia Programowania 2016/2017 Wykªad 9 Programowanie sieciowe, Akka Jakub Lemiesz

Podsumowanie poj Przetwarzanie wspóªbie»ne vs. równolegªe (Concurrency vs. Parallelism) 1 Concurrency - dwa albo wi cej zada«mo»e robi post py, nawet je±li nie s wykonywane równolegle 2 Parallelism - wykonania zada«s naprawd równolegªe 2 / 35

Podsumowanie poj Model synchroniczny vs. asynchroniczny 1 W modelu synchronicznym czekaj c na rezultat» dania 'blokujemy' dost p do procesora 2 W modelu asynchronicznym czekaj c na rezultat» dania nie blokujemy, b dziemy powiadomieni gdy rezultat si pojawi 3 Asynchroniczno± cz sto jest preferowana, gwarantuje post p 3 / 35

Model asynchroniczny 4 / 35

Model asynchroniczny 4 / 35

Model asynchroniczny motywacja Model asynchroniczny sprawdza si gdy: 1 wiele zada«(szansa,»e b dzie niezablokowane) 2 zadania wykonuj wiele operacji I/O 3 zadania s w niewielki stopniu zale»ne od siebie (nie musz si nawzajem komunikowa ) Warunki te charakteryzuj architektur klient-serwer: 1» dania klientów s niezale»ne (np. web-server) 2 mamy wiele operacji I/O - klient wysyªa» danie i dostaje odpowied¹, któr dªugo przetwarza... 5 / 35

Komunikacja klient-serwer w Java 6 / 35

Architektura klient-serwer 1 Jak zorganizowa prac Selectora? C10K Problem 2 Handler dla klienta czy dla typu zadania? 3 Osobny w tek dla ka»dego klienta? Thread Pool? 7 / 35

Selector: event-driven programming 8 / 35

Wzorzec Reactor: diagram klas EventHandler: interfejs, konkretne handler'y sªu» do obsªugi zdarze«okre±lonego typu. S rejestrowane i wywoªywane kiedy pojawi si odpowiednie zdarzenie ( callbacks, handler==agent) Handle: uchwyt do ¹ródªa zdarzenia (np. gniazdo, widget, plik) 9 / 35

Wzorzec Reactor: diagram klas EventHandler: interfejs, konkretne handler'y sªu» do obsªugi zdarze«okre±lonego typu. S rejestrowane i wywoªywane kiedy pojawi si odpowiednie zdarzenie ( callbacks, handler==agent) Handle: uchwyt do ¹ródªa zdarzenia (np. gniazdo, widget, plik) ródªo diagramów: Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects by Schmidt et al., strona 159 9 / 35

1 Rejestrujemy EventHandler z uchwytem (handle), np. gniazdem 2 Reactor pobiera uchwyty od zarejestrowanych EventHandlers 3 Reactor uruchamia Selectora (EventDemux) i przekazuje uchwyty 4 Selector informuje Reactor gdy które± uchwyty gotowe (np. gniazda) 5 Reactor u»ywa otrzymany od Selecotra podzbiór uchwytów do wywoªania metod handle_event() w odpowiednich EventHadnler'ach 6 handle_event() wywoªuje odpowiedni usªug która mo»e odpowiedzie od razu klientowi maj c dost p do uchwytu 10 / 35

Wzorzec Reactor: model asynchroniczny Selector dziaªa na zasadzie 'event-loop': gdy nast pi zdarzenie uruchamiamy odpowiedniego EventHandler'a ródªo diagramu 11 / 35

Wzorzec Reactor: wiele implementacji Implementacje wzorca Reactor: 1 Skromna przykªadowa implementacja: http:// assorted.sourceforge.net/java-reactor/ 2 Staranna implementacja z dobrym opisem: http://jeewanthad.blogspot.com/2013/02/ reactor-pattern-explained-part-1.html 3 Reactor gotowiec we freameworku Spring https://spring.io/guides/gs/ messaging-reactor/ 12 / 35

Reactor w Spring // Domy±lny reactor Reactor reactor = R.create(); // Interesujemy si zdarzeniami, które maj w opisie String topic = "wakacje"; // Rejestrujemy typ zdarzenia w reactor reactor.on($(topic), new Consumer<Event<String() { public void call(event<string> ev) { service.handleevent(ev); //odpowiednia obsªuga }}); // Gdy si kiedy± pojawi, mo»na poinformowa reactor reactor.notify("wakacje", Event.wrap(znow beda wakacje)); 13 / 35

Reactor: podsumowanie 1 Korzy±ci: rozwi zanie efektywne, ªatwa obsªuga (w praktyce programista deniuje event handler'y, reszt robi biblioteki) 2 Wada: trudne do zdebugowania, np. mo»e nie by jasne dlaczego dany event handler byª u»yty i trudno powtórzy dokªadnie te same warunki 3 Inne, ogólniejsze rozwi zanie: system Akka Reactor vs. Akka - dyskusja http://stackoverflow.com/questions/ 16595393/akka-or-reactor 14 / 35

Typesafe Inc. Typesafe zaªo»yª w 2011 Martin Odersky (EPFL). Prowadzi nast puj ce projekty open-source: 1 Scala 2 Akka 3 Play framework 4 sbt build tool 5 Scala IDE for Eclipse 6... Firmy deklaruj ce u»ycie Scala/Akka/Play to m.in: Twitter, The Guardian, Netix, LinkedIn (warto przeczyta opis) 15 / 35

Scala 1 Š czy programowanie obiektowe i funkcjonalne (kod bardziej zwi zªy ni» w Java) 2 Dziaªa na JVM, mo»na ª czy z kodem Javy (wszystkie biblioteki, frameworki Java) 3 Aplikacje Akka i Play mog by w Java i w Scali 4 Chyba warto si uczy 16 / 35

Technology Radar: Search A-Z: Scala 17 / 35

Czym jest Akka? We think that writing correct concurrent and scalable applications is now too hard (...) Akka authors 1 Akka daje wysokopoziomow abstrakcja dla programowania wspóªbie»nego: system aktorów 2 Aktorzy porozumiewaj si wyª cznie za pomoc niezmiennych (ang. immutable) komunikatów 3 Akka uªatwia stworzenie bezpiecznego modelu asynchronicznego, sterowanego zdarzeniami 18 / 35

Czym jest Akka? 19 / 35

Przykªadowa aplikacja przybli»anie liczby pi Wzór Leibniz'a: Im wi cej wyrazów uwzgl dnimy tym lepsze przybli»enie. Zadanie ªatwo jest przyspieszy, mo»emy podzieli sumowanie na niezale»ne zadania, wykona je równolegle i poª czy wyniki W 1874 W. Shanks 707 cyfr, 15 lat liczenia, 180 ostatnich cyfr obliczyª bª dnie... W 2010, 2 10 15 cyfr, 23 dni na 1000 maszynach 20 / 35

PiSystem aktorzy i wiadomosci 21 / 35

Wiadomo±ci s niezmienne (ang. immutable) static class Calculate {} static class Work { private final int start; private final int nrofelements; } static class Result { private final double value; } static class PiApproximation { private final double pi; private final Duration duration; } 22 / 35

Akka aktorzy system hierarechiczny mvn compile exec:java -Dexec.mainClass="$package$.Pi" // Use of the ActorSystem will create top-level actor, // that can create child actors, that can create child actors... final ActorSystem system = ActorSystem.create("PiSystem final ActorRef myactor = system.actorof(props.create(master.class,"master")); class Master extends UntypedActor { @Override public void onreceive(object message) { //Actor's message handlers...} 23 / 35

Tworzenie aktorów na przykladzie Pi.java ActorSystem system = ActorSystem.create("PiSystem"); class Listener extends UntypedActor {... class Master extends UntypedActor {... class Worker extends UntypedActor {... //create the master - jaki to wzorzec GoF? ActorRef master = system.actorof(new Props( new UntypedActorFactory() { UntypedActor create() {return new Master(parametry);} //master tworzy workerów... workerrouter = this.getcontext().actorof( new Props(Worker.class).withRouter( new RoundRobinRouter(nrOfWorkers))); //...i wysyla im polecenia workerrouter.tell(new Work(start, nrofelements), getself()); 24 / 35

Aktor Router Router jest aktorem, który przekazuje nadchodz ce wiadomo±ci do swoich potomków w okre±lony sposób: RoundRobinRouter, RandomRouter, SmallestMailboxRoute int nrofinst = 5; ActorRef router = system.actorof( new Props(Child.class).withRouter(new RandomRouter(nrOfInst router.tell(message, getself()); 25 / 35

Komunikacja mi dzy aktorami Aktorzy komunikuj wysyªaj c wiadomo±ci (metoda tell()), które s umieszczane Mailbox odbiorcy class Master extends UntypedActor{... public void onreceive(object message) { if (message instanceof Calculate) for (int start = 0; start < nrofmessages; start++) workerrouter.tell(new Work(start,elements), getself()) else if (message instanceof Result) { Result result = (Result) message; pi += result.getvalue();...} else unhandled(message); 26 / 35

Podsumowuj c, co robimy? 1 Deniujemy klasy wiadomo±ci. Wiadomo±ci s niezmienne (immutable), wszystkie pola nal 2 Deniujemy klasy-aktorów (extends UntypdActor) i przesªaniamy onrecive(...), która okre±la akcje w zale»no±ci od rodzaju wiadomo±ci 3 Okre±lamy hierarchie aktorów (kto kogo tworzy) 4 Aktorzy komunikuj si wyª cznie poprzez wymian wiadomo±ci: tell() i OnRecive(...) (aktorzy raczej nie powinni miec innych publicznych metod Akka threadsafety) 27 / 35

Czym jest aktor? 1 Aktor to w istocie kontener, który zawiera: State, Behavior, Mailbox, Childrens, Supervisor Strategy 2 Z aktorem zwi zany jest Context, zwaierajacy referencje do innych aktorów ActorRef (sªu» ce do komunikacji mi dzy aktorami) 3 Aktor ma dost p do swojej referencji getself() i do rodzica i potomków getcontext().parent.tell() 4 Do komuniaktów doª czana jest referencja do nadawcy i mo»na j odczyta metod getsender() 28 / 35

Czym jest referencja do aktora? 29 / 35

Po co referencje do aktorów? 1. Aktor tworzy i nadzoruje swoich potomków (np. jak s wyj tki w potomku, okresla co robi ) 2. Aktor mo»e przekazywa zadania potomkom (np. podzieli zadanie na mniejsze zadania) 3. Remote Actors - aktorzy zdalni, dziaªaj cy na innej maszynie Address addr = new Address("akka", "remotesys","host",1234); ActorRef routerremote = system.actorof( new Props(Child.class).withRouter( new RemoteRouterConfig(new RandomRouter(5),addr) ) 30 / 35

Remote actors 31 / 35

Mailbox co o nim wiemy? ActorRef router = getcontext().actorof( Props.create(PrintlnActor.class).withRouter( new RoundRobinRouter(5))); for (int i = 1; i <= 10; i++) router.tell(i, getself());..> Received message '1' in actor b..> Received message '2' in actor c..> Received message '3' in actor d..> Received message '6' in actor b..> Received message '4' in actor e..> Received message '8' in actor d..> Received message '5' in actor f..> Received message '9' in actor e..> Received message '10' in actor f..> Received message '7' in actor c 32 / 35

Mailbox - kolejno± dostarczania A1 wysyªa M1, M2, M3 do A2 A3 wysyªa M4, M5, M6 do A2 Wiemy,»e: 1 je±li M1 b dzie dostarczone to dojdzie przed M2 i M3 2 je±li M2 b dzie dostarczone to dojdzie przed M3 3 je±li M4 b dzie dostarczone to dojdzie przed M5 i M6 4 je±li M5 b dzie dostarczone to dojdzie przedm6 5 kolejno± mi dzy M1, M2, M3 a M4, M5, M6 nieustalona Zasada nie jest przechodnia: 1 A1 wysyªa X do A2 2 A1 wysyªa Y do A3 3 A2 przesyªa X do A3 4 A3 mo»e otrzyma X i Y w dowolnej kolejno±ci 33 / 35

Mailbox - gwarancje dostarczenia Akka nie daje»adnych gwarancji,»e wysªana wiadomo± dojdzie do odbiorcy, w razie potrzeby programista musi o to zadba sam w wy»szej warstwie (re-and-forget). Dlaczego? Nie wiadomo, czy wystarcz sprawdzi,»e wiadomo± doszªa do serwera odbiorcy? doszªa do Mailbox odbiorcy? zostaªa odebrana przez odbiorc? zostaªa poprawnie przetworzona przez odbiorc? tell() preferowane, ale jest równie» ask(), które blokuje 34 / 35

Untyped Actors komunikacja synchroniczna (niezalecane) Timeout timeout = new Timeout(Duration.create(5, ''seconds'')); Future<Object> future = Patterns.ask(actor, msg, timeout); String result = (String) Await.result(future, timeout.duration()); 35 / 35