SlideShare a Scribd company logo
1 of 25
Koncert na 144 rdzenie i czterech dyrygentów
- mikroserwisy w aplikacjach obliczeniowych
Jarosław Porwoł
@pako1337
Jarosław Porwoł (@pako1337)
Czego się dowiesz
 Co zrobiliśmy w projekcie bankowym
 Dlaczego mikroserwisy
 Co poszło dobrze
 Co mogło pójść lepiej
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
O mnie
 Programuję od roku 2000
 Płacą mi za to od roku 2009
 Różne projekty (web, desktop, mobilne – iOS, bank)
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Co zrobiliśmy
 Obliczanie ryzyka inwestycyjnego dla banku
 Setki tysięcy aktywnych transakcji
 Dziesiątki współczynników i raportów
 Kilku użytkowników
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Jaki był problem
 Duże źródła danych
 Różne raporty, od kilku sekund, to kilkudziesięciu
minut
 Różne ścieżki wykonania (różne konfiguracje, potrzeby
użytkownika)
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Rozwiązanie
Koncert na 144 rdzenie i czterech dyrygentów
Klient
Raporty
Zarządzanie
Obliczenia
Dane rynkowe
Waluty
Transakcje
Jarosław Porwoł (@pako1337)
Klient prosi o nową funkcjonalność
 Osobne aplikacje – osobne procesy developmentu ✔
 Lekkie środowisko developerskie – uruchamiaj tylko to,
co potrzebujesz ✔
 Proste uruchomienie ✔
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Klient wysyła żądanie
 Skalowalność rozwiązania ✔
 System kolejkowy jako komunikacja ✔
 Dobre środowisko produkcyjne (6 * 24 rdzenie, ~30GB
RAMu), + środowisko awaryjne, na wszelki wypadek ✔
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów gromadzi dane
 Parallel.ForEach nie pomoże ze wszystkim X
 Inne rdzenie są zajęte innymi żądaniami – nie zagłódź
serwisu!
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów gromadzi dane
Parallel.ForEach(tradeSet, ts => {
var marketData = GetMarketData(ts);
marketData.Wait();
});
// max degree of parallelism -> 24 (24 cores)
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów gromadzi dane
var marketDataSet = new List<MarketData>();
foreach (var ts in tradeSet)
{
var marketData = GetMarketData(ts);
marketDataSet.Add(marketData);
});
Task.WaitAll(marketDataSet);
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów wysyła żądania
 Długie żądania między serwisami X
 Unikaj żądań blokujących
 Wszystko asynchroniczne
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów wysyła żądania
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów wysyła żądania
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów wysyła żądania
 Synchronizacja serwisów
 Sagi – śledź wyniki wysłanych żądań
 Kontynuuj zadanie gdy wszystkie wysłane żądania
zakończone
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis raportów gromadzi dane
 Odwołania do zewnętrznych – kilka(naście) sekund
 Cache danych - kilkadziesiąt(set) milisekund ✔
Koncert na 144 rdzenie i czterech dyrygentów
Raporty
Serwis
zewnętrzny
Raporty Cache
Jarosław Porwoł (@pako1337)
Klient się rozmyślił
 Anulowanie żądań X
 Śledź żądania (correlation id)
 Wyślij cancelation token
 Przed obsługą żądania – sprawdź czy nie zostało anulowane
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Serwis natrafił na błąd
 Watchdog ✔
 Szybka reakcja na problemy z serwisami
 Restart serwisu w razie problemów
 Gwarantuje odpowiednią ilość różnych serwisów
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Klient wysłał skomplikowane zapytanie
 Auto-skalowanie X
 Dostosuj ilość serwisów do potrzeb dynamicznie
 Load balancing X
 Rozdzielaj żądania między maszynami
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Coś poszło nie tak z raportem
 Debugowanie
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Co poszło źle
 Agreguj logi z jednego żądania ✔
 Correlation ID
 ID Procesu, wątku
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Co poszło źle
 Logi dostępne z jednego miejsca X
 Splunk
 Elasticsearch, LogStash, Kibana
 Inne?
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Klient otrzymuje wyniki
 I jest szczęśliwy :) ✔
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Podsumowanie
 Wszystkie wymagania spełnione
 Stabilny, stosunkowo wydajny system
 Stosunkowo łatwy w developmencie i obsłudze
 Trudne śledzenie błędów i debugowanie
 Błędy w kodzie/architekturze obniżają przepustowość
Koncert na 144 rdzenie i czterech dyrygentów
Jarosław Porwoł (@pako1337)
Koncert na 144 rdzenie i czterech dyrygentów
- mikroserwisy w aplikacjach obliczeniowych
jporwol@future-processing.com

More Related Content

Viewers also liked

[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd
[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd
[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błądFuture Processing
 
Czy warstwa sprzętowa wyklucza testy automatyczne?
Czy warstwa sprzętowa wyklucza testy automatyczne?Czy warstwa sprzętowa wyklucza testy automatyczne?
Czy warstwa sprzętowa wyklucza testy automatyczne?Future Processing
 
Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...
Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...
Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...Future Processing
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven DevelopmentFuture Processing
 
Michał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktyka
Michał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktykaMichał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktyka
Michał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktykaFuture Processing
 
TDD – w poszukiwaniu źródeł jakości.
TDD – w poszukiwaniu źródeł jakości.TDD – w poszukiwaniu źródeł jakości.
TDD – w poszukiwaniu źródeł jakości.Future Processing
 
Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...
Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...
Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...Future Processing
 
DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...
DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...
DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...Future Processing
 
Biznes nie dorósł do Agile.
Biznes nie dorósł do Agile.Biznes nie dorósł do Agile.
Biznes nie dorósł do Agile.Future Processing
 
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...Future Processing
 
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.Future Processing
 
Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...
Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...
Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...Future Processing
 
Wydajne API dla aplikacji mobilnych
Wydajne API dla aplikacji mobilnychWydajne API dla aplikacji mobilnych
Wydajne API dla aplikacji mobilnychFuture Processing
 
[FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe!
[FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe![FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe!
[FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe!Future Processing
 
[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka
[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka
[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i PraktykaFuture Processing
 
Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Future Processing
 
[FDD 2016] Pablo Ribalta - Deep Learning
[FDD 2016] Pablo Ribalta - Deep Learning[FDD 2016] Pablo Ribalta - Deep Learning
[FDD 2016] Pablo Ribalta - Deep LearningFuture Processing
 
Konferencja Quality Excites w pigułce.
Konferencja Quality Excites w pigułce.Konferencja Quality Excites w pigułce.
Konferencja Quality Excites w pigułce.Future Processing
 

Viewers also liked (20)

[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd
[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd
[QE 2015] Mateusz Kocielski - W każdym programie jest jeszcze jeden błąd
 
Czy warstwa sprzętowa wyklucza testy automatyczne?
Czy warstwa sprzętowa wyklucza testy automatyczne?Czy warstwa sprzętowa wyklucza testy automatyczne?
Czy warstwa sprzętowa wyklucza testy automatyczne?
 
Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...
Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...
Koncert życzeń + niekończące się zmiany w koncepcji = katastrofa? Jak to posk...
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Michał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktyka
Michał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktykaMichał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktyka
Michał Sajdak, Testy bezpieczeństwa -­‐ teoria a praktyka
 
Jakość jest w nas
Jakość jest w nasJakość jest w nas
Jakość jest w nas
 
TDD – w poszukiwaniu źródeł jakości.
TDD – w poszukiwaniu źródeł jakości.TDD – w poszukiwaniu źródeł jakości.
TDD – w poszukiwaniu źródeł jakości.
 
Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...
Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...
Coś zupełnie offline: badania etnograficzne są kluczem do skutecznego zaangaż...
 
DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...
DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...
DailyArt – jak zaprojektować aplikację mobilną kochaną przez ludzi?/WUD Siles...
 
Biznes nie dorósł do Agile.
Biznes nie dorósł do Agile.Biznes nie dorósł do Agile.
Biznes nie dorósł do Agile.
 
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
[QE 2015] Jarosław Pałka - Systematyczny architekt na drodze ku planowanemu p...
 
Kim jest Agile Coach?
Kim jest Agile Coach?Kim jest Agile Coach?
Kim jest Agile Coach?
 
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
Nie rozwiązuj w testach jednostkowych problemów z testowanym kodem.
 
Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...
Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...
Testy to za mało – czyli słów kilka o jakości w oprogramowaniu: czym jest, ja...
 
Wydajne API dla aplikacji mobilnych
Wydajne API dla aplikacji mobilnychWydajne API dla aplikacji mobilnych
Wydajne API dla aplikacji mobilnych
 
[FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe!
[FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe![FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe!
[FDD2016] Rafał Brzoska - Angular2 - nadchodzi nowe!
 
[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka
[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka
[QE 2015] Łukasz Szydło - Continuous Delivery – Architektura i Praktyka
 
Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.Analiza wydajności następnej generacji - przykłady.
Analiza wydajności następnej generacji - przykłady.
 
[FDD 2016] Pablo Ribalta - Deep Learning
[FDD 2016] Pablo Ribalta - Deep Learning[FDD 2016] Pablo Ribalta - Deep Learning
[FDD 2016] Pablo Ribalta - Deep Learning
 
Konferencja Quality Excites w pigułce.
Konferencja Quality Excites w pigułce.Konferencja Quality Excites w pigułce.
Konferencja Quality Excites w pigułce.
 

More from Future Processing

DPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdfDPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdfFuture Processing
 
DPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdfDPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdfFuture Processing
 
DPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfDPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfFuture Processing
 
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurzeFuture Processing
 
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shakeFuture Processing
 
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myśleniaFuture Processing
 
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletkaFuture Processing
 
[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...
[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...
[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...Future Processing
 
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...Future Processing
 
[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny Blockchain[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny BlockchainFuture Processing
 
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈XFuture Processing
 
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...Future Processing
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...Future Processing
 
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NETFuture Processing
 
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...Future Processing
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...Future Processing
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark ApplicationsFuture Processing
 
[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test Automation[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test AutomationFuture Processing
 
[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software Tester[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software TesterFuture Processing
 
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOpsFuture Processing
 

More from Future Processing (20)

DPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdfDPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdf
 
DPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdfDPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdf
 
DPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfDPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdf
 
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
 
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
 
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
 
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
 
[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...
[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...
[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mi...
 
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
 
[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny Blockchain[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny Blockchain
 
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
 
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
 
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
 
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
 
[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test Automation[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test Automation
 
[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software Tester[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software Tester
 
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
 

[FDD 2016] Jarosław Porwoł - Koncert na 144 rdzenie i czterech dyrygentów

  • 1. Koncert na 144 rdzenie i czterech dyrygentów - mikroserwisy w aplikacjach obliczeniowych Jarosław Porwoł @pako1337
  • 2. Jarosław Porwoł (@pako1337) Czego się dowiesz  Co zrobiliśmy w projekcie bankowym  Dlaczego mikroserwisy  Co poszło dobrze  Co mogło pójść lepiej Koncert na 144 rdzenie i czterech dyrygentów
  • 3. Jarosław Porwoł (@pako1337) O mnie  Programuję od roku 2000  Płacą mi za to od roku 2009  Różne projekty (web, desktop, mobilne – iOS, bank) Koncert na 144 rdzenie i czterech dyrygentów
  • 4. Jarosław Porwoł (@pako1337) Co zrobiliśmy  Obliczanie ryzyka inwestycyjnego dla banku  Setki tysięcy aktywnych transakcji  Dziesiątki współczynników i raportów  Kilku użytkowników Koncert na 144 rdzenie i czterech dyrygentów
  • 5. Jarosław Porwoł (@pako1337) Jaki był problem  Duże źródła danych  Różne raporty, od kilku sekund, to kilkudziesięciu minut  Różne ścieżki wykonania (różne konfiguracje, potrzeby użytkownika) Koncert na 144 rdzenie i czterech dyrygentów
  • 6. Jarosław Porwoł (@pako1337) Rozwiązanie Koncert na 144 rdzenie i czterech dyrygentów Klient Raporty Zarządzanie Obliczenia Dane rynkowe Waluty Transakcje
  • 7. Jarosław Porwoł (@pako1337) Klient prosi o nową funkcjonalność  Osobne aplikacje – osobne procesy developmentu ✔  Lekkie środowisko developerskie – uruchamiaj tylko to, co potrzebujesz ✔  Proste uruchomienie ✔ Koncert na 144 rdzenie i czterech dyrygentów
  • 8. Jarosław Porwoł (@pako1337) Klient wysyła żądanie  Skalowalność rozwiązania ✔  System kolejkowy jako komunikacja ✔  Dobre środowisko produkcyjne (6 * 24 rdzenie, ~30GB RAMu), + środowisko awaryjne, na wszelki wypadek ✔ Koncert na 144 rdzenie i czterech dyrygentów
  • 9. Jarosław Porwoł (@pako1337) Serwis raportów gromadzi dane  Parallel.ForEach nie pomoże ze wszystkim X  Inne rdzenie są zajęte innymi żądaniami – nie zagłódź serwisu! Koncert na 144 rdzenie i czterech dyrygentów
  • 10. Jarosław Porwoł (@pako1337) Serwis raportów gromadzi dane Parallel.ForEach(tradeSet, ts => { var marketData = GetMarketData(ts); marketData.Wait(); }); // max degree of parallelism -> 24 (24 cores) Koncert na 144 rdzenie i czterech dyrygentów
  • 11. Jarosław Porwoł (@pako1337) Serwis raportów gromadzi dane var marketDataSet = new List<MarketData>(); foreach (var ts in tradeSet) { var marketData = GetMarketData(ts); marketDataSet.Add(marketData); }); Task.WaitAll(marketDataSet); Koncert na 144 rdzenie i czterech dyrygentów
  • 12. Jarosław Porwoł (@pako1337) Serwis raportów wysyła żądania  Długie żądania między serwisami X  Unikaj żądań blokujących  Wszystko asynchroniczne Koncert na 144 rdzenie i czterech dyrygentów
  • 13. Jarosław Porwoł (@pako1337) Serwis raportów wysyła żądania Koncert na 144 rdzenie i czterech dyrygentów
  • 14. Jarosław Porwoł (@pako1337) Serwis raportów wysyła żądania Koncert na 144 rdzenie i czterech dyrygentów
  • 15. Jarosław Porwoł (@pako1337) Serwis raportów wysyła żądania  Synchronizacja serwisów  Sagi – śledź wyniki wysłanych żądań  Kontynuuj zadanie gdy wszystkie wysłane żądania zakończone Koncert na 144 rdzenie i czterech dyrygentów
  • 16. Jarosław Porwoł (@pako1337) Serwis raportów gromadzi dane  Odwołania do zewnętrznych – kilka(naście) sekund  Cache danych - kilkadziesiąt(set) milisekund ✔ Koncert na 144 rdzenie i czterech dyrygentów Raporty Serwis zewnętrzny Raporty Cache
  • 17. Jarosław Porwoł (@pako1337) Klient się rozmyślił  Anulowanie żądań X  Śledź żądania (correlation id)  Wyślij cancelation token  Przed obsługą żądania – sprawdź czy nie zostało anulowane Koncert na 144 rdzenie i czterech dyrygentów
  • 18. Jarosław Porwoł (@pako1337) Serwis natrafił na błąd  Watchdog ✔  Szybka reakcja na problemy z serwisami  Restart serwisu w razie problemów  Gwarantuje odpowiednią ilość różnych serwisów Koncert na 144 rdzenie i czterech dyrygentów
  • 19. Jarosław Porwoł (@pako1337) Klient wysłał skomplikowane zapytanie  Auto-skalowanie X  Dostosuj ilość serwisów do potrzeb dynamicznie  Load balancing X  Rozdzielaj żądania między maszynami Koncert na 144 rdzenie i czterech dyrygentów
  • 20. Jarosław Porwoł (@pako1337) Coś poszło nie tak z raportem  Debugowanie Koncert na 144 rdzenie i czterech dyrygentów
  • 21. Jarosław Porwoł (@pako1337) Co poszło źle  Agreguj logi z jednego żądania ✔  Correlation ID  ID Procesu, wątku Koncert na 144 rdzenie i czterech dyrygentów
  • 22. Jarosław Porwoł (@pako1337) Co poszło źle  Logi dostępne z jednego miejsca X  Splunk  Elasticsearch, LogStash, Kibana  Inne? Koncert na 144 rdzenie i czterech dyrygentów
  • 23. Jarosław Porwoł (@pako1337) Klient otrzymuje wyniki  I jest szczęśliwy :) ✔ Koncert na 144 rdzenie i czterech dyrygentów
  • 24. Jarosław Porwoł (@pako1337) Podsumowanie  Wszystkie wymagania spełnione  Stabilny, stosunkowo wydajny system  Stosunkowo łatwy w developmencie i obsłudze  Trudne śledzenie błędów i debugowanie  Błędy w kodzie/architekturze obniżają przepustowość Koncert na 144 rdzenie i czterech dyrygentów
  • 25. Jarosław Porwoł (@pako1337) Koncert na 144 rdzenie i czterech dyrygentów - mikroserwisy w aplikacjach obliczeniowych jporwol@future-processing.com

Editor's Notes

  1. Avoid mistake of small parallelization - send all requests at once, be careful with parallel sending- you may wait for some requests to complete before you can send next batch Be careful with parallel computing - remember other cores are busy with other requrests being processed
  2. Cache as much as you can, in high load systems you will spend a lot of time getting data from database etc. Different requests – different data. But if trades not changed – why load new ones. If market not changed – why load new one?
  3. Have some way to cancel requests from user interface - it is better to cancel computing than to spend time waiting for results that are wrong/no longer needed
  4. If there are bunch of requests for specific service, it would be nice to have some way to respond to that with more processing power Killing services that are not doing anything at the moment for performance gains in other services would be good
  5. Debugging in distributed environemtn where one action creates multiple concurrent requests is very hard
  6. Your application has to have logging with info like: what failed, on what machine, at what time. If those logs are available only on that machine – it is gonna be hard to work with. You need to aggregate logs from different machines into one system
  7. Your application has to have logging with info like: what failed, on what machine, at what time. If those logs are available only on that machine – it is gonna be hard to work with. You need to aggregate logs from different machines into one system
  8. Your application has to have logging with info like: what failed, on what machine, at what time. If those logs are available only on that machine – it is gonna be hard to work with. You need to aggregate logs from different machines into one system