grzegorznowak.server_performance_assesment
Ocena Wydajności Serwera Ansible (rola)
Zrozum wydajność swojego komputera/kontenera/dropleta/linode'a dzięki Ansible.
Gdy jest uruchomiony na nowym hoście, pokaże ci, jaka jest podstawowa wydajność i czy spełnia twoje cele.
Należy zauważyć, że projekt ma na celu rozwiązanie bieżących potrzeb zespołu operacyjnego, ale powinien wystarczyć w wielu przypadkach. Chętnie rozszerzymy go na więcej systemów i przypadków z twoją pomocą.
Katalizator
Katalizatorem tego projektu było dość losowe zachowanie naszych maszyn w chmurze. Na razie pomińmy szczegóły dotyczące dostawcy, nadając mu zupełnie niepowiązane i tajemnicze kodowe imię: "Rekin".
Rekin dobrze radzi sobie z uruchamianiem nowych maszyn w chmurze, nazwijmy je krewetkami. Wydajność krewetek nie jest jasno określona w dokumentacji Rekina, poza faktem, że mają wspólne procesory. Nigdzie nie znajdziesz informacji o tym, jakiego IOPS możesz się spodziewać z dysków lub RAM, ani jakie jest przepustowość pamięci, lub jaka rodzina procesorów hypervisorów jest podstawą; istnieje duża szansa, że dostaniesz maszynę z niższą wydajnością.
Rekin tak naprawdę nie dba o to, aby tworzyć równe krewetki, interesuje go tylko produkcja ILOTEK krewetek i w związku z tym wpycha na jeden hypervisor tak wiele krewetek, jak to możliwe, aż do momentu, gdy nie będzie możliwości dodania kolejnych, co prowadzi do wyraźnego pogorszenia wydajności, które zauważają użytkownicy.
Jako użytkownik interesujesz się jedynie tym, że to, za co płacisz (na godzinę), zawsze ma te same parametry i możliwości. Zrozumiałe jest, że jest to kluczowe dla twojej aplikacji/biznesu, a oficjalnie nie powinieneś oczekiwać niczego innego od Rekina (poza oficjalnie stwierdzoną i udokumentowaną zmiennością w przestrzeni wspólnej CPU, gdy stosowany jest określony typ wspólnych krewetek - ale to tylko CPU, o którym wspominają).
Przypadek użycia
Rola została stworzona, aby umożliwić dwukierunkowe sprawdzanie.
- Najpierw chcesz uruchomić ją przed rzeczywistym przygotowaniem, aby upewnić się, że twoje podstawowe założenia są słuszne, a być może po prostu usunąć swoje krewetki i stworzyć je na nowo, jeśli są znacznie poza normą.
- Następnie chcesz, aby to było uruchamiane według harmonogramu lub wywoływane przez konkretne zdarzenia (na przykład, gdy zauważysz spadek czasu reakcji aplikacji, sygnalizowany przez inne narzędzia), aby zobaczyć, czy rzeczywiste problemy, z którymi się borykasz, nie są związane z niedostateczną wydajnością infrastruktury. Przynajmniej zanim zaczniesz obwiniać programistów za wypuszczanie nieoptymalnych kodów. Chociaż pewnie możesz to zrobić, ponieważ mocno wierzymy w grę „wypuść na początku, zoptymalizuj, gdy jesteś nękany”.
Niski poziom
Plan polega na posiadaniu zestawu blokujących asercji dotyczących wydajności maszyny, przy użyciu minimalnej ilości dodatkowego oprogramowania. W związku z tym ostateczny wynik może być bardziej heurystyczny niż rzeczywistą odpowiedzią tak/nie, ale powinien być całkowicie odpowiedni jako testowy kanarek.
Testowanie
./bootstrap_testing.sh
source testing_env/bin/activate
read -s PASS && ANSIBLE_BECOME_PASS=$PASS molecule verify -s lxd
Będzie cicho, abyś mógł podać swoje hasło sudo. Zrób to, naciśnij enter i kontynuuj.
Użycie
Kiedy sklonowano z repozytorium git
Rozszerz swój playbook.yml
o tę rolę i dostosuj parametry do akceptowalnej wydajności podstawowej.
- name: Weryfikacja
hosts: all
become: true
roles:
- role: ansible-server-performance-assessment
spa_disk_write_MB_per_s_assertion: 300 [w MB/s, dostosuj do gustu]
spa_disk_read_MB_per_s_assertion: 300 [w MB/s, dostosuj do gustu]
# TEST SIECI
# dzięki speedtest.net! Nigdy nie sądziłem, że użyję cię w produkcji, ale oto jesteśmy.
spa_speedtest_tmp_file: /tmp/spa_speedtest.out
spa_downlink_assertion: 100 # Wartość w Mb/s (BITACH na sekundę)
spa_uplink_assertion: 100 # Wartość w Mb/s (BITACH na sekundę)
# TEST PAMIĘCI
spa_memory_speed_assertion: 10000 # Wartość w MB/s (BAJTACH na sekundę)
# TEST CPU
spa_cpu_event_per_second_assertion: 300 # Liczba zdarzeń na sekundę według Sysbench
tags:
- benchmark
- nigdy
Powyższy przykład będzie działał tylko wtedy, gdy jako parametr do ansible zostanie podany --tags=benchmark
(aby ułatwić połączenie z istniejącymi plikami playbooków).
Ograniczenia
Rola nie będzie dobrze działać ani wcale na lokalizacjach innych niż en
, ponieważ analiza niektórych oprogramowań benchmarkowych opiera się na konkretnych frazach w ich wynikach. To można by poprawić drugą turą rozwoju przez kogoś, kto lepiej zna się na awk i regexach niż ja.
ansible-galaxy install grzegorznowak.server_performance_assesment