architektura aplikacji wielowątkowych

50
Architektura aplikacji wielowątkowych Jakub Binkowski

Upload: consuela-arcelia

Post on 02-Jan-2016

42 views

Category:

Documents


0 download

DESCRIPTION

Architektura aplikacji wielowątkowych. Jakub Binkowski. Jakub Binkowski. 2008-2011. Lead .NET Developer. [email protected]. Cel prezentacji. Alternatywne podejście przy projektowaniu aplikacji wielowątkowych Częste błędy. Przykładowe rozwiązanie – silnik giełdy. Jak działa giełda?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Architektura aplikacji wielowątkowych

Architektura aplikacji wielowątkowych

Jakub Binkowski

Page 2: Architektura aplikacji wielowątkowych

Jakub Binkowski

Lead .NET Developer 2008-2011

[email protected]

Page 3: Architektura aplikacji wielowątkowych

Cel prezentacji Alternatywne podejście przy projektowaniu

aplikacji wielowątkowych Częste błędy

Page 4: Architektura aplikacji wielowątkowych

Przykładowe rozwiązanie – silnik giełdy

Page 5: Architektura aplikacji wielowątkowych

Jak działa giełda?

Sprzedający KupującyProdukty

Page 6: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena Cena Ilość Osoba

Page 7: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 50 szt. 100,00 zł

Cena Ilość Osoba

Page 8: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 50 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

Page 9: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 50 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

110,00 zł 20 szt. Jerzy

Page 10: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 50 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

100,00 zł 30 szt. Anna

110,00 zł 20 szt. Jerzy

Page 11: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 50 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

100,00 zł 30 szt. Anna

110,00 zł 20 szt. Jerzy

TransakcjaAnna sprzedaje Janowi30 szt. w cenie 100,00

zł/szt.

Page 12: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 20 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

110,00 zł 20 szt. Jerzy

Page 13: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 20 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

90,00 zł 200 szt. Zenon

110,00 zł 20 szt. Jerzy

Page 14: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Jan 20 szt. 100,00 zł

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

90,00 zł 200 szt. Zenon

110,00 zł 20 szt. Jerzy

TransakcjaZenon sprzedaje Janowi20 szt. w cenie 100,00

zł/szt.

Page 15: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

90,00 zł 180 szt. Zenon

110,00 zł 20 szt. Jerzy

Page 16: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena

Ewa 100 szt. 95,00 zł

Cena Ilość Osoba

90,00 zł 180 szt. Zenon

110,00 zł 20 szt. Jerzy

TransakcjaZenon sprzedaje Ewie100 szt. w cenie 95,00

zł/szt.

Page 17: Architektura aplikacji wielowątkowych

Jak działa rynek?

Oferty zakupu Oferty sprzedaży

Osoba Ilość Cena Cena Ilość Osoba

90,00 zł 80 szt. Zenon

110,00 zł 20 szt. Jerzy

Page 18: Architektura aplikacji wielowątkowych

Architektura z lotu ptaka

Silnik rynkuOferty sprzedaży

Oferty zakupu

Transakcje

Aktualizacje ofert

Page 19: Architektura aplikacji wielowątkowych

Przetworzenie oferty1. Odebranie wiadomości2. Audyt (zapis na dysk)3. Deserializacja (byte[] object)4. Umieszczenie na rynku

Silnik rynkuOferty sprzedaży

Oferty zakupu

Page 20: Architektura aplikacji wielowątkowych

Przetworzenie transakcji1. Wygenerowanie przez rynek2. Serializacja (object byte[])3. Audyt (zapisanie na dysk)4. Wysłanie do strony kupującej i sprzedającej

Silnik rynku Transakcje

Page 21: Architektura aplikacji wielowątkowych

Przetworzenie aktualizacji oferty1. Wygenerowanie przez rynek2. Serializacja (object byte[])3. Audyt (zapisanie na dysk)4. Wysłanie do składającego ofertę

Silnik rynku

Aktualizacje ofert

Page 22: Architektura aplikacji wielowątkowych

Wymagania Niezawodność / bezbłędność

Wysoka testowalność rozwiązania

Pełny audyt Możliwość odtworzenia dowolnej sytuacji

Wysoka wydajność Optymalizacja kodu

Page 23: Architektura aplikacji wielowątkowych

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

Page 24: Architektura aplikacji wielowątkowych

Obsługa wiadomości przychodzących

Wiadomościprzychodzące

Dedykowany wątek Pula wątków

Page 25: Architektura aplikacji wielowątkowych

Składanie oferty

Page 26: Architektura aplikacji wielowątkowych

Zdarzenia na rynku

Page 27: Architektura aplikacji wielowątkowych

Podsumowanie

Page 28: Architektura aplikacji wielowątkowych

Demo:Wielowątkowo vs jednowątkowo

Page 29: Architektura aplikacji wielowątkowych

W czym jest problem?

lock

SerializacjaAudyt

Page 30: Architektura aplikacji wielowątkowych

W czym jest problem?

lock

Tylko tutaj potrzebnyjest lock!

Page 31: Architektura aplikacji wielowątkowych

„lock leak”lock (sync){    //...    _eventConsumer.ProcessOfferUpdated(/*...*/);

    //...}

lock (sync){    //...    var handler = OfferUpdated;    if (handler != null)    {        handler(this, EventArgs.Empty);    }    //...}

Przekazanie kontroli dozewnętrznego kodu

Page 32: Architektura aplikacji wielowątkowych

„lock leak” - konsekwencje Utrata wydajności

Możliwe deadlocki

Możliwe zapchanie się puli wątków OutOfMemoryException

Page 33: Architektura aplikacji wielowątkowych

„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.

Page 34: Architektura aplikacji wielowątkowych

Demo:Unikanie „lock leak”

Page 35: Architektura aplikacji wielowątkowych

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?

Page 36: Architektura aplikacji wielowątkowych

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

Page 37: Architektura aplikacji wielowątkowych

Architektura oparta o kolejki

Wysokowydajne kolejki wielowątkowe

Page 38: Architektura aplikacji wielowątkowych

Architektura oparta o kolejki

Wątki wykonujące kolejne operacje

Page 39: Architektura aplikacji wielowątkowych

Architektura oparta o kolejki

Wiadomości przychodzące Audyt Deserializacja

Przetwarzanieprzez rynek

SerializacjaAudytWiadomości wychodzące

Page 40: Architektura aplikacji wielowątkowych

Jak to zrealizować (w .NET 4)? ConcurrentQueue<T>

wielowątkowo bezpieczna kolejka wysoko zoptymalizowana

BlockingCollection<T> opakowanie na kolekcje wspiera scenariusz producent-konsument pozwala na blokowanie odczytu (kolekcja pusta) pozwala na blokowanie zapisu (kolekcja pełna)

Page 41: Architektura aplikacji wielowątkowych

BlockingCollection<T> - przykład Deklaracja:

var queue = new BlockingCollection<int>(100);

Maksymalna pojemnośćkolekcji

Page 42: Architektura aplikacji wielowątkowych

BlockingCollection<T> - przykład Producent:

queue.Add(1);queue.Add(2);queue.Add(3);

queue.CompleteAdding();

Wstawianieelementów

Zakończeniedodawania

Page 43: Architektura aplikacji wielowątkowych

BlockingCollection<T> - przykład Konsument:

var consumer = queue.GetConsumingEnumerable();foreach (var number in consumer){    Console.WriteLine(number);}

Enumeracjajak przy zwykłej kolekcji

Oczekiwaniena elementy(przy pustej kolekcji)

Page 44: Architektura aplikacji wielowątkowych

Demo:Czy kolejki się sprawdzą?

Page 45: Architektura aplikacji wielowątkowych

Architektura oparta o kolejkiZalety 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

Page 46: Architektura aplikacji wielowątkowych

Architektura oparta o kolejkiZalety 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ł

Page 47: Architektura aplikacji wielowątkowych

Architektura oparta o kolejkiWady Trudniejsze debugowanie

Bardziej pracochłonna

Wymaga dokumentacji

Page 48: Architektura aplikacji wielowątkowych

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”

Page 49: Architektura aplikacji wielowątkowych

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

Page 50: Architektura aplikacji wielowątkowych

Dziękuję za uwagę. Pytania?