Zastosowanie tzw reaktywności w aplikacjach.

Slides:



Advertisements
Podobne prezentacje
Mechanizmy pracy równoległej
Advertisements

Architektura SAP R/3 Wybrane zagadnienia.
Programowanie obiektowe
Wydajne aplikacje na platformie .NET
Nguyen Hung Son Uniwersytet Warszawski
Serwery Aplikacji ASP .NET Web Objects Arkadiusz Popa.
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
Internet Communication Engine
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Widoki.
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.
Obiektowe metody projektowania systemów Command Pattern.
Programowanie wielowątkowe
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Zaawansowane technologie Javy Wykład 1 (26 lutego 2013)
Gniazda komunikacji sieciowej w języku Java
Plan Prezentacji Wczytywanie grafiki Wyświetlanie obrazów
Instytut Fizyki Teoretycznej
System analizy zachowania zwierząt doświadczalnych w badaniach neurologicznych promotor: prof. dr hab. inż. A. Nowakowski konsultant: dr M. Kaczmarek,
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Język Java Wielowątkowość.
15. MECHANIZMY SYNCHRONIZACJI WĄTKÓW Większość koncepcji stworzonych na potrzeby synchronizacji procesów ciężkich została zastosowana też do synchronizacji.
1 Podstawy informatyki H. P. Janecki- 2006_ Systemy Operacyjne W6.
Projektowanie warstwy serwera Spring MVC - uzupełnienie.
Hibernate relacje.
Wątki.
C# Windows Forms Zastosowania Informatyki Wykład 3
Serializacja Serializacja pozwala zamienić obiekt na sekwencję bajtów, w sposób umożliwiający później wierne odtworzenie jego zawartości Inna nazwa to.
Zdzisław Stryła Instytut Fizyki UAM
Programowanie obiektowe III rok EiT
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Podstawy inżynierii oprogramowania Zofia Kruczkiewicz
Budowa systemu komputerowego
Tworzenie aplikacji mobilnych
Prezentacja i szkolenie
Autor: Kamil Szafranek
Seminarium problemowe
Problem sekcji krytycznej
Projekt i implementacja uogólnionego mechanizmu Java RMI
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Systemy zarządzania treścią Wykład 5
S IMON SAYS … A RCHITECTURE ! Usługi zdalne Technologie, techniki i praktyki implementacji.
W ą t e k (lekki proces) thread.
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Model współbieżności w Javie autor: Grzegorz Szuba.
Model współbieżności w Javie
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Programowanie wielowątkowe w Javie Wykład 9 mgr inż. Michał Misiak.
Paweł Starzyk Obiektowe metody projektowania systemów
Wzorce Projektowe w JAVA
Optymalna konfiguracja Microsoft SQL Server 2014
Temat 1 Pojęcie systemu operacyjnego Opracował: mgr Marek Kwiatkowski.
Hooks w systemie Windows Autorzy: Paweł Kwiecień, Wojciech Kruczkowski Temat: Modelowanie użytkowników Zadaniem jest stworzenie (lub modyfikacja) systemu,
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Komponentowe i rozproszone (Web)Service Oriented Architecture.
AJAX w PHP.
Programowanie Obiektowe – Wykład 6
Komponentowe systemy rozproszone
Wątki, programowanie współbieżne
(według:
Kurs Access.
Zaawansowane technologie Javy Wykład 1 (23 lutego 2017)
Programowanie obiektowe 2
Programowanie Obiektowe – Wykład 2
Dynamics 365 CE i język TypeScript
Windows Workflow Foundation
Aplikacje i usługi internetowe
Tworzenie wątków w Javie
Zapis prezentacji:

Zastosowanie tzw reaktywności w aplikacjach. Reactive Zastosowanie tzw reaktywności w aplikacjach.

No to zróbmy coś Zrób to !!!

W oczekiwaniu na wynik

Aplikacja web

Przetwarzanie żądań Pula wątków odbierających żądania

Czasami nasze niektóre zadania… są cięższe niż wyświetlenie buźki na ekranie….

… i potrafią przytkać system… Pula połączeń

… lub wyżreć całą pamięć…

Co można poradzić dołożyć sprzętu? dołożyć pamięci?

Jeszcze jeden przypadek gdzieś w odległej Galaktyce

A może… …ograniczyć żarłoczność naszej aplikacji? ale jak skoro już zoptymalizowaliśmy wszystko? ;) Ha… można uruchamiać obciążające zadania cyklicznie w nocy kiedy użytkownicy śpią i nam nie będą przeszkadzać…

Wielowątkowe przetwarzanie zadań pula wątków pula wątków pozwala na sterowanie zużyciem pamięci, zasobów itp

Zdarzenia tymczasowa prywatna kolejka publiczna kolejka z odpowiedziami

Wątki blokujące

Opóźnienia gdzieś w odległej Galaktyce

Wątki blokujące

Koszt połączenia

Koszt połączenia

To może…

To może…

Czyli wątek przyjmujący żądania wątek przetwarzający żądanie wątek wysyłający odpowiedź opcjonalnie

Z czego skorzystać Pule wątków (java.io.concurrency) JMS RabbitMQ Wsparcie frameworków (JEE 6, Spring) Inne TIMEOUT!!!!

ThreadPool pula wątków Potraktujmy pulę wątków jak pulę połączeń. Spowodujemy iż określone zadanie będzie przeprowadzane tylko przez określoną ilość wątków. Dzięki temu zapanujemy np. nad zużyciem pamięci i zablokujemy nadmierną pazerność aplikacji (jeśli takowa istnieje).

Executor ExecutorService executorService = Executors.newFixedThreadPool(10); ExecutorService executorService = Executors.newCachedThreadPool( new ThreadFactory() { @Override public Thread newThread(Runnable r) { return ….. ; } });

Callable<V> i Future<V> public interface Callable<V> { V call() throws Exception; } public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExecutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

Wywołanie zadania ExecutorService executorService = Executors.newFixedThreadPool(10); Future<String> future = executorService.submit( new Callable<String>() { @Override public String call() throws Exception { executorService.invoke(); return "TEST"; } }); <T> List<Future<T>> invokeAll( Collection<? extends Callable<T>> tasks) throws InterruptedException;

Zbieranie wyników ExecutorService executorService = Executors.newFixedThreadPool(5); CompletionService completion = new ExecutorCompletionService(executorService); for(;;){ completion.take(); } Future<V> take() throws InterruptedException;

Hmmmm Programowanie synchroniczne jest proste. Asynchroniczność dramatycznie podnosi poziom skomplikowania.

Wyzwania Obsługa błędów Łańcuch wywołań Kiedy użytkownik już nie czeka na odpowiedź Przełączanie wątków np do aktualizacji UI Unikanie blokad Wielu odbiorców Złożone funkcje Backpressure

Aplikacje reaktywne Dane są procesowane w postaci strumieni Sterowanie poprzez zdarzenia Utrzymują “życie” pomimo błędów Są odporne na zbyt duże obciążenie

Reactive Reactive Streams http://www.reactive-streams.com https://github.com/reactive-streams/reactive-streams-jvm Reactive Extensions https://reactivex.io/

Jak skorzystać? RxJava (i odmiany dla innych języków) Spring Reactor JVM 9+

Podstawowe interfejsy public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); } public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete();

Podstawowe interfejsy public interface Subscription { public void request(long n); public void cancel(); } public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {

RX Observable lub Flowable Observer lub Subsciber Subject lub Processor Operator Scheduler