SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Kamil Grabowski
"Porażka nie wchodzi w grę,
czyli o niezawodności"[PL]
2018-05-09
@_y3ti
Kilka słów o mnie:
• Rebased: DevOps (2015-)
• Inteligo/PKO BP: DevOps (2013-2015)
• PLIX: Developer/DevOps (2007-2013)
• MKS: Developer (2007)
• Freelancer: Developer (2002-2007)
Rzeczy się psują -takie jest życie.
Rzeczy się psują -takie jest życie,
ale da się tym zarządzać!
Jeśli możesz to zmierzyć, to możesz tym zarządzać.
Peter Drucker
“
Jak mierzy się niezawodność?
• SLA- Service Level Agreement
• SLI - Service Level Indicator
• SLO - Service Level Objective
W jaki sposób możemy zwiększyć
niezawodność?
Komunikacja w zespole
• Gramy w jednym zespole (zakończyć odwieczną wojnę admin vs developer)
• Zakładamy, że wszyscy mamy dobre intencje
• Krytykujemy rozwiązania, a nie ludzi
• Koncentrujemy się na szukaniu rozwiązań, a nie winnych
• Szanujemy czas naszych kolegów i koleżanek
• Po prostu be nice :)
Karta projektu (README.md)
• Podstawowe informacje o projekcie (aktualizowanie!)
• Właściciel projektu / Developerzy / PM
• Prosta i testowalna instrukcja jak zbudować i uruchomić aplikację
• Używany stos technologiczny (system, wersja nodejs, wersja npmjs/yarn)
• Konfiguracja (parametryzacja, credentials)
• Wymagana konfiguracja sieciowa (czy korzystamy z DNS?)
• Zarządzanie projektem (czy używamy github issues, czy zew. system)
• Szablony do GitHub Issues i Pull Requests
Development
• Formatowanie kodu (wcięcia, charset itp.) / EditorConfig
• Narzędzia do statycznej analizy kodu / lintery
• Testy + Code Coverage
• Skanery bezpieczeństwa
• Continuous Integration
• Code review
• GitHub - Protected Branches
Zależności w projekcie
• Wszystkie wymagane biblioteki są zdefiniowane w jednym pliku ( packages.json )
• Każda biblioteka jest zdefiniowana wraz z wymaganą wersją
• Instalacja bibliotek jest prosta, jedna komenda ( npm install )
• Aplikacja nie jest zależna od bibliotek zainstalowanych dla całego systemu
• Wszystkie zewnętrzne narzędzia (np. curl ) powinny być dostarczone razem z
Aplikacją
Konfiguracja
• Brak podziału na grupy typu: production, staging, qa
• Konfiguracja jest oddzielona od kodu Aplikacji
• Konfiguracja jest dostarczana przez środowisko uruchomieniowe
• Zmienne środowiskowe
• Podłączenie (mount) lub nadpisanie pliku konfiguracyjnego
• Aplikacja pobiera konfigurację przy starcie z zewnętrznego systemu
• Każdy parametr posiada domyślną wartość (jeśli to możliwe)
Testowanie konfiguracji
• Commandlinowe narzędzie do sprawdzania poprawności konfiguracji
• Czy wszystkie parametry posiadają poprawną wartość
• Czy mogę nawiązać połączenie z zewnętrznymi usługami
• Nie wymaga uruchomienia przetwarzania danych/requestów
Healthchecks
• GET /healthchecks/liveness
• Czy aplikacja żyje i odpowiada na requesty
• GET /healthchecks/readiness
• Czy aplikacja może otrzymywać nowe requesty
• GET /healthchecks/corectness
• Aplikacja jest poprawnie skonfigurowana
• Możemy nawiązać połączenie z zewnętrznymi usługami
Metryki
• GET /metrics
• dane telemetryczne w plain-text
• borgmon, prometheus
• biblioteki klienckie dla wielu popularnych platform (w tym nodejs )
• różne typy danych: counter, gauge, histogram, summary
Jakie metryki wybrać?
• USE (Utilization, Saturation, Errors)
• RED (Rate, Error, Duration)
• The Four Golden Signals by Google SRE
• Latency
• Traffic
• Errors
• Saturation
# TYPE nodejs_heap_space_size_total_bytes gauge 
nodejs_heap_space_size_total_bytes{space="new"} 1048576 1497945862862 
nodejs_heap_space_size_total_bytes{space="old"} 9818112 1497945862862 
nodejs_heap_space_size_total_bytes{space="code"} 3784704 1497945862862 
nodejs_heap_space_size_total_bytes{space="map"} 1069056 1497945862862 
nodejs_heap_space_size_total_bytes{space="large_object"} 0 1497945862862
1
2
3
4
5
6
# TYPE http_request_duration_ms histogram 
http_request_duration_ms_bucket{le="10",code="200",route="/",method="GET"} 58 
http_request_duration_ms_bucket{le="100",code="200",route="/",method="GET"} 1476 
http_request_duration_ms_bucket{le="250",code="200",route="/",method="GET"} 3001 
http_request_duration_ms_bucket{le="500",code="200",route="/",method="GET"} 1001 
http_request_duration_ms_bucket{le="+Inf",code="200",route="/",method="GET"} 1
1
2
3
4
5
6
Logi
• Logi są ciągłym, niebuforowanym strumieniem danych bez początku i końca
• STDOUT / STDERR
• Nie implementować własnych mechanizmów rotowania logów
• Format łatwo parsowalny (np. json) lub CSV
• Jeden wpis = jedna linia
• Jeśli wpisów będzie wiele, dodajemy unikalny identyfikator (np. request_id)
Co warto logować?
• Błędy (Message, file, line)
• HTTP Method: GET, POST, HEAD itd.
• Request np. /foo/bar?foo=bar
• Czas obsłużenia requestu (duration)
• Czas dodania wpisu (UTC, ISO 8601 Notation)
• Informacje o kliencie (identyfikator, źródłowy adres ip)
• Status (OK, ERROR)
Prawidłowa obsługa sygnałów (Unix signals)
• SIGTERM - poprawne zakończenie działania procesu
• zamknięcie otwartego portu TCP
• zakończenie aktywnych zadań
• SIGHUP - przeładowanie konfiguracji, opcjonalnie ponowne nawiązanie połączenia z
zewnętrznymi usługami
• SIGUSR1 , SIGUSR2 - opcjonalnie, zmniejszenie/zwiększenie poziomu logów
Deployment
• Jeśli to możliwe to wdrażamy Continuous Deployment
• Release powoduje utworzenie artefaktu (zip, tgz, docker image)
• Artefakty przechowuj poza serwerem CI (np. S3 lub docker registry)
• Release notes, changelog (zmiany w konfiguracji, zależności w postaci zewnętrznych
usług)
• Zespół programistów powinien być częścią zespołu wdrożeniowego
• Często najwięcej informacji posiada osoba, która doprowadziła do powstania danego
zdarzenia. Skorzystaj z pomocy tej osoby
Optymalizacja kodu
• Na początku projektu nie przejmuj się wydajnością (good enough)
• Najpierw prawidłowo zaimplementuj metryki i logi
• Jeśli optymalizujesz to zawsze mierz i porównuj wyniki
• Od samego początku narzucaj sobie limity:
• Zasoby: CPU, RAM, I/O, Sieć
• Pula połączeń (baza danych)
• Obsługa reuqestu np. poniżej 40ms
Dodanie nowych technologii do stosu projektu
• Jaka będzie wartość dodana? Jaki problem rozwiążemy?
• Czy możemy użyć już wykorzystywaną w projekcie technologię?
• Czy weźmiemy za nią odpowiedzialność (on-call)?
• Dobrze, jeśli 2-3 osoby z zespołu znają tę technologię lub mają chęć jej poznania
• Alternatywy?
• Popularność, Narzędzia, Support
W informatyce nie jest istotne to
CZY
coś działa wolno lub szybko...
...istotne jest to
DLACZEGO
coś działa wolno lub szybko!
Pytania?
See you next
month at
WarsawJS

Contenu connexe

Similaire à Porażka nie wchodzi w grę, czyli o niezawodności

Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31kraqa
 
DevOps - what I have learnt so far
DevOps - what I have learnt so far DevOps - what I have learnt so far
DevOps - what I have learnt so far Wojciech Barczyński
 
infraxstructure: Rafał Stańczak "Postępujący rozwój infrastruktury na potrze...
infraxstructure: Rafał Stańczak  "Postępujący rozwój infrastruktury na potrze...infraxstructure: Rafał Stańczak  "Postępujący rozwój infrastruktury na potrze...
infraxstructure: Rafał Stańczak "Postępujący rozwój infrastruktury na potrze...PROIDEA
 
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PROIDEA
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Podstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxPodstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxKatarzyna Javaheri-Szpak
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue TeamuPiotr Kaźmierczak
 
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowejMateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowejPROIDEA
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Deckraqa
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariowaćJakub Marchwicki
 
Jak spieprzyć wydajność od początku projektu studium przypadków..pdf
Jak spieprzyć wydajność od początku projektu studium przypadków..pdfJak spieprzyć wydajność od początku projektu studium przypadków..pdf
Jak spieprzyć wydajność od początku projektu studium przypadków..pdfKrystian Zybała
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2intive
 
Poznaj GITa - część teoretyczna - Anna Szwiec
Poznaj GITa -  część teoretyczna - Anna SzwiecPoznaj GITa -  część teoretyczna - Anna Szwiec
Poznaj GITa - część teoretyczna - Anna SzwiecWomen in Technology Poland
 

Similaire à Porażka nie wchodzi w grę, czyli o niezawodności (20)

university day 1
university day 1university day 1
university day 1
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Testowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO AcademyTestowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO Academy
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
 
DevOps - what I have learnt so far
DevOps - what I have learnt so far DevOps - what I have learnt so far
DevOps - what I have learnt so far
 
infraxstructure: Rafał Stańczak "Postępujący rozwój infrastruktury na potrze...
infraxstructure: Rafał Stańczak  "Postępujący rozwój infrastruktury na potrze...infraxstructure: Rafał Stańczak  "Postępujący rozwój infrastruktury na potrze...
infraxstructure: Rafał Stańczak "Postępujący rozwój infrastruktury na potrze...
 
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Podstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxPodstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptx
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
 
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowejMateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Dec
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
 
Jak spieprzyć wydajność od początku projektu studium przypadków..pdf
Jak spieprzyć wydajność od początku projektu studium przypadków..pdfJak spieprzyć wydajność od początku projektu studium przypadków..pdf
Jak spieprzyć wydajność od początku projektu studium przypadków..pdf
 
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu cz 2
 
Poznaj GITa - część teoretyczna - Anna Szwiec
Poznaj GITa -  część teoretyczna - Anna SzwiecPoznaj GITa -  część teoretyczna - Anna Szwiec
Poznaj GITa - część teoretyczna - Anna Szwiec
 
Dlaczego flopsar
Dlaczego flopsarDlaczego flopsar
Dlaczego flopsar
 

Plus de Kamil Grabowski

Jak wygrać Igrzyska Chmury
Jak wygrać Igrzyska ChmuryJak wygrać Igrzyska Chmury
Jak wygrać Igrzyska ChmuryKamil Grabowski
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 
RRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIRRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIKamil Grabowski
 
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXKamil Grabowski
 
Sprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchuSprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchuKamil Grabowski
 
How to create effective NOC in Poland
How to create effective NOC in PolandHow to create effective NOC in Poland
How to create effective NOC in PolandKamil Grabowski
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 

Plus de Kamil Grabowski (11)

Jak wygrać Igrzyska Chmury
Jak wygrać Igrzyska ChmuryJak wygrać Igrzyska Chmury
Jak wygrać Igrzyska Chmury
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Docker
DockerDocker
Docker
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
RRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFIRRDTool + RUBY DSL = RRD-FFI
RRDTool + RUBY DSL = RRD-FFI
 
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIX
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Sprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchuSprzetowe i programowe aspekty punktu wymiany ruchu
Sprzetowe i programowe aspekty punktu wymiany ruchu
 
How to create effective NOC in Poland
How to create effective NOC in PolandHow to create effective NOC in Poland
How to create effective NOC in Poland
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 

Porażka nie wchodzi w grę, czyli o niezawodności