[PL] Przewidywanie zmian wydajności aplikacji rozproszonych

68414aba518bb5898c6ae29d9ae7dd7d?s=47 wrzasa
September 24, 2018

[PL] Przewidywanie zmian wydajności aplikacji rozproszonych

Prezentacja z konferencji
* Atmosphere (Kraków 16-17 maja 2017): http://2017.atmosphere-conference.com/
* SegFault (Wrocław 24 września 2018): https://segfault.events/
Oprogramowanie wykorzystywane w prezentacji jest teraz opensource: https://github.com/wrzasa/rbsim/ Daj znać, jeśli potrzebujesz wsparcia.

Polish version of "Predicting Performance Changes of Distributed Applications" presentation for my talk on
* Atmosphere conference (16-17 May in Kraków, Poland): http://2017.atmosphere-conference.com/
* SegFault conference (Wrocław 24 września 2018): https://segfault.events/
The software used in the presentation is now opensource: https://github.com/wrzasa/rbsim/ Feel free to contact me if you need assistance.

68414aba518bb5898c6ae29d9ae7dd7d?s=128

wrzasa

September 24, 2018
Tweet

Transcript

  1. PRZEWIDYWANIE ZMIAN WYDAJNOŚCI APLIKACJI ROZPROSZONYCH Wojciech Rząsa @wrzasa Wojciech Rząsa

    @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  2. Informatyk z zamiłowania Inżynier z doktoratem Politechnika Rzeszowska Badania: systemy

    rozproszone Zajęcia: programowanie, bazy danych, Ruby, Rails, ... FLYR Inc. Rzeszow Ruby User Group O MNIE http://flyrlabs.com http://rrug.pl Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  3. THE GRID Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  4. (c) e-ScienceCity , . http://www.e-sciencecity.org/ Creative Commons Attribution-ShareAlike 3.0 Unported

    License Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  5. MONITOROWANIE GRIDU OCM-G Debugowanie Interaktywne narzędzia Współdzielona infrastruktura System rozproszony

    Brak centralnego zarządzania Interfejs dla narzędzi programistycznych Ścisłe wymagania dotyczące bezpieczeństwa Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  6. BEZPIECZEŃSTWO A WYDAJNOŚĆ Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji

    rozproszonych
  7. UMOŻLIWIĆ DEWELOPEROM SZACOWANIE WYDAJNOŚCI! Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności

    aplikacji rozproszonych
  8. PLAN Jak oszacować zmiany wydajności? Prosty przykład Studium dwóch przypadków

    Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  9. Eds. R. Wyrzykowski et al. Baliś B., Bubak M., Rząsa

    W., Szepieniec T., Wismüller R.: Two Aspects of Security Solution for Distributed Systems in the Grid on the Example of the OCM-G. In proc. of CGW'03, pp.197-206, Kraków 2004 ISBN 83-915141-3-7. Baliś B., Bubak M., Rząsa W., Szepieniec T.: Efficiency of the GSI Secured Network Transmission. ICCS 2004, LNCS 3036, p. 107-115, 2004, Eds. M. Bubak et al. Rząsa W., Bubak M., Baliś B., Szepieniec T.: Simulation Method for Estimation of Security Overhead of Grid Applications. In proc. of CGW'05, pp. 300-307, Kraków 2006 ISBN 83-915141-5-3, EAN 9788391514153. Rząsa W., Bubak M., Baliś B., Szepieniec T.: Overhead Verification for Cryptographically Secured Transmission in the Grid. Computing and Informatics, Vol. 26, 2007, 89-101. Rząsa W., Bubak M.: Application of Petri Nets to Evaluation of Grid Applications Efficiency. In proc. of CGW'08, pp. 261-269, Kraków 2009, ISBN 978-83-61433-00- 2. Rząsa W.: Combining Timed Colored Petri Nets and Real TCP Implementation to Reliably Simulate Distributed Applications. CN 2009, CCIS 39, pp. 79-86, 2009, Eds. A. Kwiecień, P. Gaj, and P. Stera. Dec G, Jędrzejec B, Rząsa W.: Kolorowana sieć Petriego jako model systemu podejmowania decyzji kredytowej. STUDIA INFORMATICA 2010, Volume 31, Number 2A (89). Rząsa W., Bubak M.: Simulation Method Supporting Development of Parallel Applications for Grids. In proc. of CGW'10, pp. 194-201, Kraków 2011, ISBN 978-83- 61433-03-3. Dec G., Rząsa W.: Modelowanie wielowarstwowej rozproszonej aplikacji www z zastosowaniem TCPN. Praca zbiorowa pod red. L. Trybusa i S. Samoleja: Projektowanie, analiza i implementacja systemów czasu rzeczywistego, ISBN 878-83-206-1822-8, Wyd. Komunikacji i Łączności, Warszawa 2011, pp. 137-148. Rząsa W., Rzońca D., Stec A., Trybus B.: Analysis of Challenge-Response Authentication in a Networked Control System, in: Kwiecien A., Gaj P., and Stera P. (Eds.): Computer Networks 2012, Communications in Computer and Information Science 291, Springer-Verlag Berlin Heidelberg 2012, pp. 271-279. Rząsa W., Bubak M., Nawarecki E.: High-Level Model for Performance Evaluation of Distributed Applications, in: Balicki J., Krawczyk H., Nawarecki E. (Eds.): Grid and Volunteer Computing, Gdansk University of Technology Faculty of Elektronics, Telecomunication and Informatics Press, Gdańsk 2012, pp. 7-23. Rząsa W.: Synchronization Algorithm for Timed Colored Petri Nets and Ns-2 Simulators, in: Kwiecień A., Gaj P., and Stera P. (Eds): CN2013, CCIS 370, pp. 1-10, Springer-Verlag Berlin Heidelberg, 2013, ISSN 1865-0929, ISBN 978-3-642-38864-4. Kowalski, M.; Rzasa, W., "Object-oriented approach to Timed Colored Petri Net simulation," Computer Science and Information Systems (FedCSIS), 2013 Federated Conference on, pp.1401,1404, 8-11 Sept. 2013, ISBN 978-1-4673-4471-5 (Web), 978-83-60810-53-8 (USB), IEEE Catalog Number: CFP1385N-ART (Web),CFP1385N-USB (USB) Jamro M., Rzońca D., Rząsa W.: Testing communication tasks in distributed control systems with SysML and Timed Colored Petri Nets model. Computers in Industry, Vol. 71, August 2015, pp. 77-87. Rząsa W.: "Simulation-Based Analysis of a Platform as a Service Infrastructure Performance from a User Perspective", P. Gaj et al. (Eds.): CN 2015, CCIS 522, pp. 182–192, 2015 ISBN: 978-3-319-19418-9. Rząsa W., Rzońca D.: Event-Driven Approach to Modeling and Performance Estimation of a Distributed Control System, in: Gaj P., Kwiecień A., and Stera P. (Eds.): Computer Networks 2016, Communications in Computer and Information Science 608, Springer International Publishing 2016, pp. 168-179. Rząsa W., Rzońca D.: Event-Driven Approach to Modeling and Performance Estimation of a Distributed Control System, in: Gaj P., Kwiecień A., and Stera P. (Eds.): Computer Networks 2016, Communications in Computer and Information Science 608, Springer International Publishing 2016, pp. 168-179. Rząsa W.: Predicting Performance in a PaaS Environment: a Case Study for a Web Application. Computer Science, [S.l.], vol. 18(1), pp. 21 -39, 2017. ISSN 2300- 7036. Rząsa W., Jamro M., Rzonca D.: Improving Accuracy of a Network Model Basing on the Case Study of a Distributed System with a Mobile Application and an API. In: Gaj P., Kwiecień A., Sawicki M. (eds) Computer Networks. CN 2017. Communications in Computer and Information Science, vol 718. Springer, Cham, pp 14-27, DOI: 10.1007/978-3-319-59767-6_2 Rzońca D., Rząsa W., Samolej S.: Consequences of the Form of Restrictions in Coloured Petri Net Models for Behaviour of Arrival Stream Generator Used in Performance Evaluation, in: Gaj P., Sawicki M., Suchacka G., Kwiecień A. (Eds.): Computer Networks. CN 2018. Communications in Computer and Information Science, vol 860. Springer, Cham, 2018, pp. 300-310. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  10. PODSTAWY STOSOWANEJ METODY Symulacja Model opisany językiem dziedzinowym (DSL) Symulator

    bazujący na formalizmie Statystyki dostępne za pomocą API Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  11. PROSTY PRZYKŁAD Serwer www Klienci www Zasoby sprzętowe Wojciech Rząsa

    @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  12. SERWER WWW program :apache do on_event :data_received do |data| stats_start

    server: :apache, name: process.name cpu do |cpu| (100 * data.size.in_bytes / cpu.performance).miliseconds end send_data to: data.src, size: data.size * 10, type: :response, content: data.content stats_stop server: :apache, name: process.name end end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  13. KLIENT WWW program :wget do |opts| sent = 0 on_event

    :send do # . . . end on_event :data_received do |data| # . . . end register_event :send end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  14. KLIENT WWW — SEND program :wget do |opts| sent =

    0 on_event :send do cpu { |cpu| (150 / cpu.performance).miliseconds } send_data to: opts[:target], size: 1024.bytes, type: :request, content: sent sent += 1 if sent < opts[:count] register_event :send, delay: 5.miliseconds end end on_event :data_received do |data| # . . . end register_event :send end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  15. KLIENT WWW — RECEIVE program :wget do |opts| sent =

    0 on_event :send do # . . . end on_event :data_received do |data| log "Got data #{data} in process #{process.name}" stats event: :request_served, client: process.name end register_event :send end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  16. ZASOBY SPRZĘTOWE node :desktop do cpu 100 end node :gandalf

    do cpu 1400 end net :net01, bw: 1024.bps net :net02, bw: 510.bps route from: :desktop, to: :gandalf, via: [ :net01, :net02 ], twoway: true Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  17. PROCESY NA WĘZŁACH new_process :client1, program: :wget, args: { target:

    :server, count: 10 } new_process :client2, program: :wget, args: { target: :server, count: 10 } new_process :server, program: :apache put :server, on: :gandalf put :client1, on: :desktop put :client2, on: :desktop Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  18. MODEL ZAPISANY np. w model.rb Wojciech Rząsa @wrzasa Przewidywanie zmian

    wydajności aplikacji rozproszonych
  19. URUCHOMIENIE SYMULACJI class Experiment < RBSim::Experiment end params = {

    } sim = Experiment.new sim.run './model.rb', params sim.save_stats 'simulation.stats' Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  20. ANALIZA WYNIKÓW class Experiment < RBSim::Experiment def print_req_times_for(s) app_stats.durations(server: s)

    do |tags, start, stop| puts "Req. time #{(stop - start).in_miliseconds} ms." end end end all_stats = Experiment.read_stats 'simulation.stats' first_experiment = all_stats.first first_experiment.print_req_times_for(:apache) Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  21. PODSUMOWANIE PRZYKŁADU Model w DSL Bez zbędnego kodu Serwer i

    klient www (~30 LoC) Zasoby sprzętowe (~12 LoC) Mapowanie procesów na zasoby (~6 LoC) Uruchomienie symulacji (~8 LoC) Załadowanie zapisanych wyników (~3 LoC) Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  22. STUDIUM PRZYPADKU #1 RAPGENIUS PRZECIWKO HEROKU LUTY 2013 https://genius.com/James-somers-herokus-ugly- secret-annotated

    Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  23. "ROUTING" HTTP W HEROKU "Inteligentny" Losowy Wojciech Rząsa @wrzasa Przewidywanie

    zmian wydajności aplikacji rozproszonych
  24. DLA HEROKU Doskonała skalowalność Bez wykrywania zajętych/wolnych dyno Wojciech Rząsa

    @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  25. DLA KLIENTA Czy losowy ruting jest gorszy? O ile gorszy?

    Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  26. https://genius.com/James-somers-herokus-ugly- secret-annotated Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  27. -- E. Dijkstra In the good old days physicists repeated

    each other's experiments, just to be sure. Today they stick to FORTRAN, so that they can share each other's programs, bugs included. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  28. DO ZAMODELOWANIA Losowy ruter HTTP "Inteligentny" ruter HTTP Wojciech Rząsa

    @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  29. LOSOWY RUTER HTTP program :random_router do |servers| on_event :data_received do

    |data| if data.type == :request server = servers.sample send_data to: server, size: data.size, type: :request, content: { from: data.src, content: data.content } elsif data.type == :response send_data to: data.content[:from], size: data.size, type: :response, content: data.content[:content] else raise "Unknown data type #{data.type} received " + "by #{process.name}" end end end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  30. INTELIGENTNY RUTER HTTP program :router do |servers| request_queue = []

    on_event :data_received do |data| # . . . end on_event :process_request do # . . . end end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  31. INTELIGENTNY RUTER HTTP on_event :data_received do |data| if data.type ==

    :request request_queue << data register_event :process_request elsif data.type == :response servers << data.src send_data to: data.content[:from], size: data.size, type: :response, content: data.content[:content] register_event :process_request else raise "Unknown data type #{data.type} received " + "by #{process.name}" end end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  32. INTELIGENTNY RUTER HTTP on_event :process_request do unless servers.empty? or request_queue.empty?

    data = request_queue.shift server = servers.shift send_data to: server, size: data.size, type: :request, content: { from: data.src, content: data.content } unless request_queue.empty? register_event :process_request end end end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  33. ZASOBY SPRZĘTOWE (PRZYKŁAD) servers.each do |s| node s do cpu

    1 end new_process s, program: :webserver, args: { request_times: params[:request_times] } put s, on: s end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  34. WYNIKI Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  35. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  36. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  37. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  38. MOŻE APDEX? Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  39. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  40. A CO JEŚLI? będzie więcej "inteligentnych" ruterów? skalowalność + wydajność

    dla użytkowników? Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  41. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  42. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  43. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  44. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  45. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  46. Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  47. PODSUMOWANIE PRZYKŁADU #1 Reużywalność (elementy modelu) Elastyczność (dowolne algorytmy ruterów)

    Różne poziomy szczegółowości wyników histogramy apdex Analiza hipotetycznych sytuacji Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  48. STUDIUM PRZYPADKU #2 SKALOWAĆ APLIKACJĘ NA HEROKU ... ...CZY NIE

    SKALOWAĆ? Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  49. DYNO NA HEROKU Nazwa RAM CPU share Compute cena za

    dyno- mies. standard- 1x 512MB 1x 1x-4x $25 standard- 2x 1024MB 2x 4x-8x $50 Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  50. API BACKEND Rails Unicorn CPU intensive 6 dyno typu standard-1x

    przeskalować do 3 standard-2x? Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  51. UNICORN Master process Równoważy obciążenie workerów (procesów) Podobny do starego

    "inteligentnego" rutera Heroku! Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  52. PRZESKALOWANIE APLIKACJI 2x szybsze dyno 2x mniej dyno Więcej workerów

    Unicorna na dyno Ta sama liczba workerów w aplikacji Ta sama cena Więcej RAMu dla procesów Lepsze równoważenie obciążenia? Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  53. PARAMETRY APLIKACJI Obciążenie (żądania/min) Czasy odpowiedzi (rozkład) Wojciech Rząsa @wrzasa

    Przewidywanie zmian wydajności aplikacji rozproszonych
  54. DO ZAMODELOWANIA Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  55. PONOWNIE UŻYTE ELEMENTY MODELU Klient HTTP Serwer HTTP Losowy ruter

    HTTP Master process Unicorna Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  56. MODELOWANIE DYNO ALBO node :standard1x do cpu 1 end node

    :standard2x do cpu 2 end node :standard2x do cpu 1 cpu 1 end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  57. DYNO NA HEROKU Nazwa RAM CPU share Compute cena za

    dyno- mies. standard- 1x 512MB 1x 1x-4x $25 standard- 2x 1024MB 2x 4x-8x $50 Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  58. SKALOWANIE DYNO POZIOME CZY PIONOWE? A CZY TO MA ZNACZENIE!?

    Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  59. SYMULACJA DLA I DLA node :standard2x do cpu 2 end

    node :standard2x do cpu 1 cpu 1 end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  60. POZIOME SKALOWANIE DYNO Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji

    rozproszonych
  61. PIONOWE SKALOWANIE DYNO Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji

    rozproszonych
  62. TO JAK SĄ SKALOWANE DYNO JEST ISTOTNE! JAK TO SPRAWDZIĆ?

    dokumentacja nie pomaga... cat /proc/cpuinfo nie pomaga... Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  63. EKSPERYMENT (NA RÓŻNYCH DYNO NA HEROKU) Wojciech Rząsa @wrzasa Przewidywanie

    zmian wydajności aplikacji rozproszonych
  64. POJEDYNCZE ZADANIE OBLICZENIOWE Porównanie czasu na dwóch typach dyno def

    cpu_intensive_task(n) start = Time.now (1..n).reduce(:*) Time.now - start end Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  65. 16 ZADAŃ OBLICZENIOWYCH na standard-1x (2 CPU) na standard-2x (4

    CPU) real 1m8.690s user 2m13.360s sys 0m3.871s real 0m29.182s user 2m17.570s sys 0m4.053s Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  66. WNIOSEK Dyno są skalowane poziomo (więcej CPU) Nie należy zmieniać

    konfiguracji dyno Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  67. RACHUNEK! $0.09 Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych

  68. PODSUMOWANIE PRZYKŁADU #2 Model z reużywalnych elementów Alternatywne rozwiązania testowane

    symulacyjnie Proste, tanie eksperymenty do weryfikacji kluczowych czynników Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych
  69. PODSUMOWANIE Ławiej, taniej, szybciej DSL, bez zbędnego kodu Hipotetyczne sytuacje

    No magic — just software science Simulation as a Service ;-) Metoda gumowej kaczki Wojciech Rząsa @wrzasa Przewidywanie zmian wydajności aplikacji rozproszonych