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.

69639a461e92e590acdc1b554934bd8d?s=128

Michał Ślaski

April 26, 2017
Tweet

Transcript

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

  2. O MNIE

  3. O MNIE • AGH'2005

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

  5. O MNIE • AGH'2005 • Tech Lead'2012 • Konferencja Lambda

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

    Days'2014 • MongooseIM dev
  7. SYSTEM ROZPROSZONY Vizceral - narzędzie do inżynierii intuicyjnej w Netflixie

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

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

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

  11. PLAN WYKŁADU

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

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

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

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

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

    • Testy obciążeniowe • Testy odpornościowe • Inżynieria Chaosu
  17. MONGOOSEIM

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

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

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

    Zaprojektowany z myślą o dużych instalacjach • System rozproszony, łatwo skalowalny
  21. 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
  22. TESTY INTEGRACYJNE

  23. 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
  24. 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
  25. ESCALUS

  26. ESCALUS % TEST CASE


  27. ESCALUS % TEST CASE
 % Alice sends a chat message

    to Bob’s bare JID
  28. ESCALUS % TEST CASE
 % Alice sends a chat message

    to Bob’s bare JID % Bob gets the message on both resources
  29. 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
  30. 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
  31. CIĄGŁA INTEGRACJA

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

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

  34. TESTY OBCIĄŻENIOWE

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

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

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

    wykonuje swój scenariusz • Scenariusze napisane są w escalusie
  38. TESTY OBCIĄŻENIOWE $ ./run.sh my_scenario 1 100000

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

  40. TESTY OBCIĄŻENIOWE • Kompiluj scenariusz • Uruchom my_scenario $ ./run.sh

    my_scenario 1 100000
  41. TESTY OBCIĄŻENIOWE • Kompiluj scenariusz • Uruchom my_scenario • ID

    użytkowników od 1 do 100000 $ ./run.sh my_scenario 1 100000
  42. TESTY OBCIĄŻENIOWE

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

  44. A Murder Of Crows

  45. AMOC

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

  47. • 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.
  48. • 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
  49. METRYKI

  50. METRYKI

  51. METRYKI

  52. CZAS DOSTARCZENIA

  53. CIĄGŁE STRES-TESTY

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

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

    • Narzędzie Tide + amoc
  56. 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
  57. TIDE

  58. TIDE

  59. TESTY ODPORNOŚCIOWE

  60. TESTY ODPORNOŚCIOWE • W rozproszonym systemie
 losowo usuwamy maszyny wirtualne

  61. TESTY ODPORNOŚCIOWE • W rozproszonym systemie
 losowo usuwamy maszyny wirtualne

    • Badamy zachowanie systemu na wypadek błędu
  62. TESTY ODPORNOŚCIOWE • W rozproszonym systemie
 losowo usuwamy maszyny wirtualne

    • Badamy zachowanie systemu na wypadek błędu • Technika Chaos Monkey
  63. CHAOS MONKEY

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

  65. CHAOS MONKEY • Wymusza posiadanie planu awaryjnego (fallback) • Netflix

    regularnie stosuje CM na żywym systemie
  66. 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
  67. CHAOS MONKEY Service Availability courtesy of Ali Basiri @ Netflix

  68. PRZYKŁAD PERTURBACJI Movie Info API CDN Selection courtesy of Ali

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

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

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

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

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

    Ali Basiri @ Netflix
  74. GENEROWANIE PERTURBACJI API Gateway Persona- lization Randomly select 10% of

    requests to participate in experiment courtesy of Ali Basiri @ Netflix
  75. GENEROWANIE PERTURBACJI API Gateway Persona- lization courtesy of Ali Basiri

    @ Netflix
  76. GENEROWANIE PERTURBACJI API Gateway Persona- lization if (shouldFail == true)

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

    courtesy of Ali Basiri @ Netflix
  78. 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
  79. 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
  80. INŻYNIERIA CHAOSU Stream Starts Per Second (SPS) courtesy of Ali

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

    @ Netflix
  82. INŻYNIERIA CHAOSU API Gateway Persona- lization API Control API Exp

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

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

  85. INŻYNIERIA CHAOSU API Gateway Persona- lization API Control API Exp

    courtesy of Ali Basiri @ Netflix
  86. 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
  87. INŻYNIERIA CHAOSU API Gateway Persona- lization API Control API Exp

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

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

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

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

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

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

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

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

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

  97. MONGOOSEIM

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

  99. ERLANG THE MOVIE

  100. ERLANG THE MOVIE

  101. ERLANG THE MOVIE II

  102. ERLANG THE MOVIE II

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

    @michalslaski