Architektura aplikacji wielowątkowych Jakub Binkowski.

Slides:



Advertisements
Podobne prezentacje
REALIZACJA REGULATORA PID W UKŁADZIE FPGA
Advertisements

Systemy czasu rzeczywistego
Mechanizmy pracy równoległej
Jarosław Kuchta Monitory.
POPYT PODAŻ RÓWNOWAGA RYNKOWA.
Rejestr spraw sądowych i administracyjnych połączony z Elektronicznym Postępowaniem Upominawczym. Składanie pozwów, otrzymywanie nakazów, śledzenie statusów.
Decyzje projektowe w .NET Framework
PROGRAMOWANIE STRUKTURALNE
Wydajne aplikacje na platformie .NET
Implementacja ekstensji klasy
Projektowanie Aplikacji Komputerowych
zarządzanie produkcją
Internet Communication Engine
(Content Management System)
ZŁOŻONOŚĆ OBLICZENIOWA
Systemy czasu rzeczywistego Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Obiektowe metody projektowania systemów
Wykład nr 7: Synchronizacja procesów
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Diagram czynności (Activity Diagrams)
Wzorce projektowe w J2EE
Problem rozbieżności czasów jednym z wielu problemów pojawiających się w systemach rozproszonych jest rozbieżność wartości zegarów na poszczególnych węzłach-maszynach.
Język Java Wielowątkowość.
Praca Inżynierska „Analiza i projekt aplikacji informatycznej do wspomagania wybranych zadań ośrodków sportowych” Dyplomant: Marcin Iwanicki Promotor:
Wątki.
Architektura systemów wykorzystujących bazy danych (systemów bazodanowych) Wykład S. Kozielski.
TBD - P ERFORMANCE W BAZACH M ICROSOFT SQL S ERVER, CZYLI O CO W TYM W OGÓLE CHODZI Michał Grodzicki MCTS SQL SERVER lipca 2012.
Nowoczesny system zarządzania firmą
Podstawy programowania II
Programowanie urządzeń mobilnych – wykład IV
Automatyczne dereferencje w języku SBQL
Dotcom Projektowanie systemów CCTV Projektowanie sieci LAN
Mobilny ePodpis już w Plusie Polkomtel i MobiTrust Warszawa, 7 stycznia 2009 – w ofercie Plus dla Firm od 9 stycznia 2009 roku.
Wirtualna baza SQL zgodna z SQL Server SQL as a Service
Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 Wytłumaczyc temat: Ja: W bibliotekach.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Copyright © 2008 Accenture. Zawartość prezentacji stanowi własność intelektualną Accenture. Wszelkie prawa zastrzeżone. Konferencja Hutnictwo 2008 Integracja.
Buforowanie D e f i n i c j a.
M i k r o j ą d r o D e f i n i c j a. M i k r o j ą d r o to rodzaj jądra systemu operacyjnego, które zawiera tylko najbardziej niezbędne elementy, takie.
C# Platforma .NET CZ.3 Kuba Ostrowski.
Enterprise Architecture Patterns
Architektura PC.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
S IMON SAYS … A RCHITECTURE ! Usługi zdalne Technologie, techniki i praktyki implementacji.
Planowanie przepływów materiałów
Narzędzie wspierające zarządzanie organizacj Parentis Sp. z o. o
Wykład 7 Synchronizacja procesów i wątków
W ą t e k (lekki proces) thread.
ResiPlus® idealne oprogramowanie dla sektora opieki.
Skalowanie aplikacji JPA na przykładzie Oracle TopLink Grid
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Systemy informatyczne
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.
Hibernate Podstawy.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Paweł Starzyk Obiektowe metody projektowania systemów
Temat 3: Podstawy programowania Algorytmy – 2 z 2 _________________________________________________________________________________________________________________.
Wstęp do programowania Wykład 7
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
Warszawa 27 Luty 2014 Analiza implementacyjna usługi VoIP dla zastosowań korporacyjnych Wykonał: Michał Boczek Promotor: dr inż. Dariusz Chaładyniak.
Typy wyliczeniowe, kolekcje
Komponentowe systemy rozproszone
Wątki, programowanie współbieżne
Grzegorz Chodak Wykład
Aplikacje i usługi internetowe
Dane, zmienne, instrukcje
Zapis prezentacji:

Architektura aplikacji wielowątkowych Jakub Binkowski

Lead.NET Developer

Cel prezentacji Alternatywne podejście przy projektowaniu aplikacji wielowątkowych Częste błędy

Jak działa giełda? SprzedającyKupującyProdukty

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena IlośćOsoba

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł CenaIlośćOsoba

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 110,00 zł20 szt.Jerzy

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 100,00 zł30 szt.Anna 110,00 zł20 szt.Jerzy

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 100,00 zł30 szt.Anna 110,00 zł20 szt.Jerzy Transakcja Anna sprzedaje Janowi 30 szt. w cenie 100,00 zł/szt.

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan20 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 110,00 zł20 szt.Jerzy

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan20 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł200 szt.Zenon 110,00 zł20 szt.Jerzy

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan20 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł200 szt.Zenon 110,00 zł20 szt.Jerzy Transakcja Zenon sprzedaje Janowi 20 szt. w cenie 100,00 zł/szt.

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł180 szt.Zenon 110,00 zł20 szt.Jerzy

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł180 szt.Zenon 110,00 zł20 szt.Jerzy Transakcja Zenon sprzedaje Ewie 100 szt. w cenie 95,00 zł/szt.

Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena IlośćOsoba 90,00 zł80 szt.Zenon 110,00 zł20 szt.Jerzy

Architektura z lotu ptaka Silnik rynku Oferty sprzedaży Oferty zakupu Transakcje Aktualizacje ofert

Przetworzenie oferty 1. Odebranie wiadomości 2. Audyt (zapis na dysk) 3. Deserializacja (byte[] object) 4. Umieszczenie na rynku Silnik rynku Oferty sprzedaży Oferty zakupu

Przetworzenie transakcji 1. Wygenerowanie przez rynek 2. Serializacja (object byte[]) 3. Audyt (zapisanie na dysk) 4. Wysłanie do strony kupującej i sprzedającej Silnik rynku Transakcje

Przetworzenie aktualizacji oferty 1. Wygenerowanie przez rynek 2. Serializacja (object byte[]) 3. Audyt (zapisanie na dysk) 4. Wysłanie do składającego ofertę Silnik rynku Aktualizacje ofert

Wymagania Niezawodność / bezbłędność Wysoka testowalność rozwiązania Pełny audyt Możliwość odtworzenia dowolnej sytuacji Wysoka wydajność Optymalizacja kodu

Architektura standardowa Przychodząca wiadomość = 1 wątek Wątki brane z puli ( ThreadPool ) Pula wątków w.NET: Zbiór wątków dostępnych dla aplikacji Minimalna ilość wątków = ilość procesorów logicznych Maksymalna – zależy od środowiska

Obsługa wiadomości przychodzących Wiadomości przychodzące Dedykowany wątek Pula wątków

Składanie oferty

Zdarzenia na rynku

Podsumowanie

Demo: Wielowątkowo vs jednowątkowo

W czym jest problem? lock Serializacja Audyt

W czym jest problem? lock Tylko tutaj potrzebny jest lock!

lock leak lock (sync) { //... _eventConsumer.ProcessOfferUpdated(/*...*/); //... } lock (sync) { //... var handler = OfferUpdated; if (handler != null) { handler(this, EventArgs.Empty); } //... } Przekazanie kontroli do zewnętrznego kodu

lock leak - konsekwencje Utrata wydajności Możliwe deadlocki Możliwe zapchanie się puli wątków OutOfMemoryException

lock leak - jak uniknąć? bool offerUpdated = false; lock (sync) { //... offerUpdated = true; //... } if (offerUpdated) _eventConsumer.ProcessOfferUpdated(/*..*/); Uwaga! Wywoływanie powiadomień za sekcją krytyczną może wpłynąć na logikę działania aplikacji.

Demo: Unikanie lock leak

Czy spełniliśmy wymagania? Niezawodność / bezbłędność Wysoka testowalność rozwiązania Czy nasz kod można dobrze przetestować? Pełny audyt Możliwość odtworzenia dowolnej sytuacji Czy wykonanie nie jest losowe? Wysoka wydajność Optymalizacja kodu Czy nie da się szybciej?

Co zrobić, aby spełnić te wymagania?

Architektura oparta o kolejki Wysokowydajne kolejki wielowątkowe

Architektura oparta o kolejki Wątki wykonujące kolejne operacje

Architektura oparta o kolejki Wiadomości przychodzące AudytDeserializacja Przetwarzanie przez rynek Serializacja Audyt Wiadomości wychodzące

Jak to zrealizować (w.NET 4)? ConcurrentQueue wielowątkowo bezpieczna kolejka wysoko zoptymalizowana BlockingCollection opakowanie na kolekcje wspiera scenariusz producent-konsument pozwala na blokowanie odczytu (kolekcja pusta) pozwala na blokowanie zapisu (kolekcja pełna)

BlockingCollection - przykład Deklaracja: var queue = new BlockingCollection (100); Maksymalna pojemność kolekcji

BlockingCollection - przykład Producent: queue.Add(1); queue.Add(2); queue.Add(3); queue.CompleteAdding(); Wstawianie elementów Zakończenie dodawania

BlockingCollection - przykład Konsument: var consumer = queue.GetConsumingEnumerable(); foreach (var number in consumer) { Console.WriteLine(number); } Enumeracja jak przy zwykłej kolekcji Oczekiwanie na elementy (przy pustej kolekcji)

Demo: Czy kolejki się sprawdzą?

Architektura oparta o kolejki Zalety Eliminacja wielowątkowości Wiele wątków, ale kolejki zajmują się synchronizacją Kod łatwy do testowania Przewidywalność zachowania Powtórzenie danych wejściowych zawsze da taki sam rezultat Wyższa wydajność Mniej wątków = mniejsza konieczność synchronizacji Możliwość grupowego przetwarzania

Architektura oparta o kolejki Zalety Bardziej przejrzysty design Jasno określone wątki aplikacji Dobrze zdefiniowane punkty interakcji pomiędzy wątkami (kolejki) Pełny wgląd w aktualny stan aplikacji Ilość elementów w kolejce Łatwa lokalizacja wąskich gardeł

Architektura oparta o kolejki Wady Trudniejsze debugowanie Bardziej pracochłonna Wymaga dokumentacji

Gdzie taka architektura się sprawdzi? Aplikacje: przetwarzające niewiele rodzajów zdarzeń o relatywnie prostej logice mocno obciążone (wymagana wysoka wydajność) Na przykład: systemy giełdowe systemy agregujące/przetwarzające dane aplikacje dostarczające dane na żywo

Podsumowanie Klasyczne podejście operacja = wątek nie zawsze najwydajniejsze Uwaga na wywołania zewnętrzne wewnątrz lock! Kolejki mogą rozwiązać problem synchronizacji pomiędzy wątkami

Dziękuję za uwagę. Pytania?