Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inżynieria Chaosu

Inżynieria Chaosu

Inżynieria Chaosu to stosunkowo młoda dyscyplina testowania systemów rozproszonych. Jej celem jest upewnienie się, że testowany system ma zdolność do radzenia sobie z różnego rodzaju perturbacjami, jakie mogą zaistnieć w produkcyjnym środowisku.

Michał Ślaski

April 26, 2017
Tweet

More Decks by Michał Ślaski

Other Decks in Programming

Transcript

  1. INŻYNIERIA CHAOSU
    Testowanie Systemów Rozproszonych
    Michał Ślaski @michalslaski

    View full-size slide

  2. O MNIE
    • AGH'2005

    View full-size slide

  3. O MNIE
    • AGH'2005
    • Tech Lead'2012

    View full-size slide

  4. O MNIE
    • AGH'2005
    • Tech Lead'2012
    • Konferencja Lambda Days'2014

    View full-size slide

  5. O MNIE
    • AGH'2005
    • Tech Lead'2012
    • Konferencja Lambda Days'2014
    • MongooseIM dev

    View full-size slide

  6. SYSTEM ROZPROSZONY
    Vizceral - narzędzie do inżynierii intuicyjnej w Netflixie

    View full-size slide

  7. SYSTEM ROZPROSZONY
    Vizceral - narzędzie do inżynierii intuicyjnej w Netflixie

    View full-size slide

  8. SYSTEM ROZPROSZONY
    Vizceral - narzędzie do inżynierii intuicyjnej w Netflixie

    View full-size slide

  9. SYSTEM ROZPROSZONY
    Vizceral - narzędzie do inżynierii intuicyjnej w Netflixie

    View full-size slide

  10. PLAN WYKŁADU

    View full-size slide

  11. PLAN WYKŁADU
    • Co to jest MongooseIM?

    View full-size slide

  12. PLAN WYKŁADU
    • Co to jest MongooseIM?
    • Testy integracyjne

    View full-size slide

  13. PLAN WYKŁADU
    • Co to jest MongooseIM?
    • Testy integracyjne
    • Testy obciążeniowe

    View full-size slide

  14. PLAN WYKŁADU
    • Co to jest MongooseIM?
    • Testy integracyjne
    • Testy obciążeniowe
    • Testy odpornościowe

    View full-size slide

  15. PLAN WYKŁADU
    • Co to jest MongooseIM?
    • Testy integracyjne
    • Testy obciążeniowe
    • Testy odpornościowe
    • Inżynieria Chaosu

    View full-size slide

  16. MONGOOSEIM
    • Komunikator dla gier on-line, social media, itp.

    View full-size slide

  17. MONGOOSEIM
    • Komunikator dla gier on-line, social media, itp.
    • Zaprojektowany z myślą o dużych instalacjach

    View full-size slide

  18. MONGOOSEIM
    • Komunikator dla gier on-line, social media, itp.
    • Zaprojektowany z myślą o dużych instalacjach
    • System rozproszony, łatwo skalowalny

    View full-size slide

  19. MONGOOSEIM
    • Komunikator dla gier on-line, social media, itp.
    • Zaprojektowany z myślą o dużych instalacjach
    • System rozproszony, łatwo skalowalny
    • W sam raz dla urządzeń mobilnych lub IoT

    View full-size slide

  20. TESTY INTEGRACYJNE

    View full-size slide

  21. TESTY INTEGRACYJNE
    • Budujemy złożone scenariusze

    - kilku użytkowników,

    - kilka sesji jednego użytkownika równocześnie,

    - inicjowanie i sprzątanie środowiska do testów

    View full-size slide

  22. TESTY INTEGRACYJNE
    • Budujemy złożone scenariusze

    - kilku użytkowników,

    - kilka sesji jednego użytkownika równocześnie,

    - inicjowanie i sprzątanie środowiska do testów
    • Escalus - biblioteka do testów integracyjnych

    dla MongooseIM

    View full-size slide

  23. ESCALUS
    % TEST CASE


    View full-size slide

  24. ESCALUS
    % TEST CASE

    % Alice sends a chat message to Bob’s bare JID

    View full-size slide

  25. ESCALUS
    % TEST CASE

    % Alice sends a chat message to Bob’s bare JID
    % Bob gets the message on both resources

    View full-size slide

  26. ESCALUS
    % TEST CASE

    % Alice sends a chat message to Bob’s bare JID
    % Bob gets the message on both resources
    % Bob replies to one of Alice’s resources

    View full-size slide

  27. ESCALUS
    % TEST CASE

    % Alice sends a chat message to Bob’s bare JID
    % Bob gets the message on both resources
    % Bob replies to one of Alice’s resources
    % Alice receives the reply only on that resource

    View full-size slide

  28. CIĄGŁA INTEGRACJA

    View full-size slide

  29. CIĄGŁA INTEGRACJA
    • Travis CI - ciągła integracja dla GitHub.com

    View full-size slide

  30. CIĄGŁA INTEGRACJA
    • Travis CI - ciągła integracja dla GitHub.com

    View full-size slide

  31. TESTY OBCIĄŻENIOWE

    View full-size slide

  32. TESTY OBCIĄŻENIOWE
    • Wiele sesji użytkowników równocześnie

    View full-size slide

  33. TESTY OBCIĄŻENIOWE
    • Wiele sesji użytkowników równocześnie
    • Każdy użytkownik wykonuje swój scenariusz

    View full-size slide

  34. TESTY OBCIĄŻENIOWE
    • Wiele sesji użytkowników równocześnie
    • Każdy użytkownik wykonuje swój scenariusz
    • Scenariusze napisane są w escalusie

    View full-size slide

  35. TESTY OBCIĄŻENIOWE
    $ ./run.sh my_scenario 1 100000

    View full-size slide

  36. TESTY OBCIĄŻENIOWE
    • Kompiluj scenariusz
    $ ./run.sh my_scenario 1 100000

    View full-size slide

  37. TESTY OBCIĄŻENIOWE
    • Kompiluj scenariusz
    • Uruchom my_scenario
    $ ./run.sh my_scenario 1 100000

    View full-size slide

  38. TESTY OBCIĄŻENIOWE
    • Kompiluj scenariusz
    • Uruchom my_scenario
    • ID użytkowników od 1 do 100000
    $ ./run.sh my_scenario 1 100000

    View full-size slide

  39. TESTY OBCIĄŻENIOWE

    View full-size slide

  40. TESTY OBCIĄŻENIOWE
    http://www.danhudson.ca/winter-crows/

    View full-size slide

  41. A Murder Of Crows

    View full-size slide

  42. • Implementujemy dwie funkcje init/0 i start/1
    AMOC

    View full-size slide

  43. • Implementujemy dwie funkcje init/0 i start/1
    AMOC
    init() ->
    exometer:new(?MESSAGES_CT, spiral),
    exometer_report:subscribe(

    exometer_report_graphite,

    ?MESSAGES_CT,

    [one, count],

    10000),
    ok.

    View full-size slide

  44. • Implementujemy dwie funkcje init/0 i start/1
    AMOC
    init() ->
    exometer:new(?MESSAGES_CT, spiral),
    exometer_report:subscribe(

    exometer_report_graphite,

    ?MESSAGES_CT,

    [one, count],

    10000),
    ok.
    start(MyId) ->
    % connect user (using escalus)
    % fetch history
    % send some messages

    % wait

    % send some messages again

    View full-size slide

  45. CZAS DOSTARCZENIA

    View full-size slide

  46. CIĄGŁE STRES-TESTY

    View full-size slide

  47. CIĄGŁE STRES-TESTY
    • Koncepcja podobna do Travis CI + escalus

    View full-size slide

  48. CIĄGŁE STRES-TESTY
    • Koncepcja podobna do Travis CI + escalus
    • Narzędzie Tide + amoc

    View full-size slide

  49. CIĄGŁE STRES-TESTY
    • Koncepcja podobna do Travis CI + escalus
    • Narzędzie Tide + amoc
    • Używamy narzędzia docker-swarm

    do tworzenia środowiska testowego

    View full-size slide

  50. TESTY ODPORNOŚCIOWE

    View full-size slide

  51. TESTY ODPORNOŚCIOWE
    • W rozproszonym systemie

    losowo usuwamy maszyny wirtualne

    View full-size slide

  52. TESTY ODPORNOŚCIOWE
    • W rozproszonym systemie

    losowo usuwamy maszyny wirtualne
    • Badamy zachowanie systemu na wypadek błędu

    View full-size slide

  53. TESTY ODPORNOŚCIOWE
    • W rozproszonym systemie

    losowo usuwamy maszyny wirtualne
    • Badamy zachowanie systemu na wypadek błędu
    • Technika Chaos Monkey

    View full-size slide

  54. CHAOS MONKEY

    View full-size slide

  55. CHAOS MONKEY
    • Wymusza posiadanie planu awaryjnego (fallback)

    View full-size slide

  56. CHAOS MONKEY
    • Wymusza posiadanie planu awaryjnego (fallback)
    • Netflix regularnie stosuje CM na żywym systemie

    View full-size slide

  57. CHAOS MONKEY
    • Wymusza posiadanie planu awaryjnego (fallback)
    • Netflix regularnie stosuje CM na żywym systemie
    • Dzięki temu inżynierowie są wyczuleni

    na odporność systemów na błędy

    View full-size slide

  58. CHAOS MONKEY
    Service
    Availability
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  59. PRZYKŁAD PERTURBACJI
    Movie
    Info
    API
    CDN
    Selection
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  60. PRZYKŁAD PERTURBACJI
    Movie
    Info
    API
    CDN
    Selection
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  61. PRZYKŁAD PERTURBACJI
    Movie
    Info
    API
    CDN
    Selection
    Fallback
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  62. PRZYKŁAD PERTURBACJI
    Movie
    Info
    API
    CDN
    Selection
    Fallback
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  63. PRZYKŁAD PERTURBACJI
    Movie
    Info
    API
    CDN
    Selection
    Fallback
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  64. PRZYKŁAD PERTURBACJI
    Movie
    Info
    API
    CDN
    Selection
    Fallback
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  65. GENEROWANIE PERTURBACJI
    API
    Gateway
    Persona-
    lization
    Randomly select 10% of requests to
    participate in experiment
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  66. GENEROWANIE PERTURBACJI
    API
    Gateway
    Persona-
    lization
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  67. GENEROWANIE PERTURBACJI
    API
    Gateway
    Persona-
    lization
    if (shouldFail == true)
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  68. GENEROWANIE PERTURBACJI
    API
    Gateway
    Persona-
    lization
    if (shouldFail == true)
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  69. INŻYNIERIA CHAOSU
    Chaos Engineering is the discipline of
    experimenting on a distributed
    system in order to build confidence in
    the system’s capability to withstand
    turbulent conditions in production.
    ENGINEERING
    CH∀OS
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  70. INŻYNIERIA CHAOSU
    ● Build a Hypothesis around Steady
    State Behavior
    ● Vary Real-world Events
    ● Run Experiments in Production
    ● Automate Experiments to Run
    Continuously
    Principles Of Chaos Engineering
    http://principlesofchaos.org
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  71. INŻYNIERIA CHAOSU
    Stream Starts Per Second (SPS)
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  72. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  73. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  74. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  75. INŻYNIERIA CHAOSU
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  76. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  77. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    Select 1% of requests for control
    Select 1% of requests for experiment
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  78. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  79. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    if(shouldRoute == true)
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  80. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    1%
    1%
    98%
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  81. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    if(shouldFail == true)
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  82. INŻYNIERIA CHAOSU
    API
    Gateway
    Persona-
    lization
    API Control
    API Exp
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  83. INŻYNIERIA CHAOSU
    Stream Starts Per Second (SPS)
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  84. INŻYNIERIA CHAOSU
    Fallback Metrics
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  85. INŻYNIERIA CHAOSU
    Fallback Metrics
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  86. INŻYNIERIA CHAOSU
    Fallback Metrics
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  87. INŻYNIERIA CHAOSU
    http://principlesofchaos.org
    http://chaos.community
    courtesy of Ali Basiri @ Netflix

    View full-size slide

  88. MONGOOSEIM
    • github.com/esl/MongooseIM
    • github.com/esl/escalus
    • github.com/esl/amoc

    View full-size slide

  89. ERLANG THE MOVIE

    View full-size slide

  90. ERLANG THE MOVIE

    View full-size slide

  91. ERLANG THE MOVIE II

    View full-size slide

  92. ERLANG THE MOVIE II

    View full-size slide

  93. INŻYNIERIA CHAOSU
    Dziękuję za uwagę. Czy są pytania?
    Michał Ślaski @michalslaski

    View full-size slide