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. PLAN WYKŁADU • Co to jest MongooseIM? • Testy integracyjne

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

    • Testy obciążeniowe • Testy odpornościowe • Inżynieria Chaosu
  3. MONGOOSEIM • Komunikator dla gier on-line, social media, itp. •

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

    Zaprojektowany z myślą o dużych instalacjach • System rozproszony, łatwo skalowalny
  5. 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
  6. 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
  7. 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
  8. ESCALUS % TEST CASE
 % Alice sends a chat message

    to Bob’s bare JID % Bob gets the message on both resources
  9. 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
  10. 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
  11. TESTY OBCIĄŻENIOWE • Wiele sesji użytkowników równocześnie • Każdy użytkownik

    wykonuje swój scenariusz • Scenariusze napisane są w escalusie
  12. TESTY OBCIĄŻENIOWE • Kompiluj scenariusz • Uruchom my_scenario • ID

    użytkowników od 1 do 100000 $ ./run.sh my_scenario 1 100000
  13. • 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.
  14. • 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
  15. 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
  16. TESTY ODPORNOŚCIOWE • W rozproszonym systemie
 losowo usuwamy maszyny wirtualne

    • Badamy zachowanie systemu na wypadek błędu • Technika Chaos Monkey
  17. 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
  18. GENEROWANIE PERTURBACJI API Gateway Persona- lization Randomly select 10% of

    requests to participate in experiment courtesy of Ali Basiri @ Netflix
  19. 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
  20. 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
  21. 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
  22. INŻYNIERIA CHAOSU API Gateway Persona- lization API Control API Exp

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

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

    if(shouldFail == true) courtesy of Ali Basiri @ Netflix