Techniki Zaawansowane
3 godz. 43 min · Python · Full-stack i Programowanie
Grzegorz SzymborskiProgramistaJeżeli na samym początku nie przygotujemy dobrze projektu, to gdy wrócimy do niego po dłuższym czasie - czekają nas kłopoty. Jeżeli uda się nam go uruchomić, to rozeznanie się w nim będzie udręką. Prowadzący pokaże Ci jak wyglądają jego produkcyjne aplikacje, na co zwraca uwagę i co pomaga mu trzymać porządek.
Biblioteka pytest posiada wiele ciekawych funkcjonalności. Parametryzowanie testów, fixture i uproszczona składnia pozwalają nam skupić na testowaniu tego, co kluczowe, wydzielając mniej istotne fragmenty kodu. To wszystko sprawia, że w pewnym momencie łatwiej będzie Ci pisać testy, niż ręcznie sprawdzać poprawność działania apki.
Jeżeli aplikacja, którą stworzysz, osiągnie dużą popularność, może się okazać, że przytłoczona dużym ruchem zacznie spowalniać... lub całkowicie przestanie odpowiadać. Opiszemy różne techniki służące temu, by temu zaradzić - od metod select i prefetch related, aż po cache. Na deser przeprowadzimy na stronie test obciążeniowy za pomocą narzędzia locust.
Django i Postgres to świetne połączenie. Framework ten posiada wbudowaną obsługę wyszukiwania pełnotekstowego oferowanego przez tę bazę. Warto wiedzieć, kiedy jej użyć, a kiedy wystarczy zwykłe icontains.
ORM w Django ułatwia mnóstwo operacji. A czasem nie dość to, że ułatwia... to jeszcze przyspiesza! Chcemy zainspirować Cię czterema metodami: annotate, aggregate, bulkupdate i bulkcreate. Gdy pojawią się one w naszym kodzie, zaczniemy doceniać uroki frameworka Django.
Kurs jest stworzony dla osób, które znają już podstawy Django i wiedzą, jak pisać proste strony. Znają modele, widoki, oraz niestraszny im jest Python. Zalecana jest również podstawowa znajomość dowolnej relacyjnej bazy danych. W kursie przedstawiamy niekiedy narzędzia i praktyczne przykłady, jak można ich użyć, ale w celu zaimplementowania konkretnego rozwiązania w projekcie wymagana będzie umiejętność czytania dokumentacji.
Wreszcie przyszedł czas na wykres i na coś
co jakoś daje nam znać o tym czy wszelkie nasze wysiłki te próby kiedy
próbowaliśmy optymalizować naszą aplikację czy przyniosły jakiś rezultat.
Pokażę wam swoje ulubione narzędzie do testowania wydajności nowego aplikacji.
Nazywa się Locus i posiada bardzo fajny i prosty dash board
i pozwala nam na atakowanie naszej strony wieloma gestami
na sekundę żeby zobaczyć jak zachowuje się czas odpowiedzi w zależności od tego ile
osób jest na smartfonie zainstaluje bibliotekę korzystając z dokumentacji.
Stosujemy ją standardowo przez Pippa.
Do poprawnego działania musimy jeszcze w katalogu głównym z
którego będziemy uruchamiać Lock ustaw stworzyć plik Lotus File kropka.
Wzór tego pliku można sobie podejrzeć na stronie z dokumentacją Skopje.
Ten fragment go trochę upraszcza ponieważ.
Nie potrzebujemy dwóch zapytań.
Zrobimy sobie tylko jedno pod.
Stronę z listą artykułów którą kierowaliśmy nieco wcześniej
i tak przygotowujemy daną konfigurację uruchamiamy za pomocą komendy Locus
i wskazujemy host name pod którym działa nasza strona.
Będzie to adres lokalne na porcie 8000.
Otwieramy teraz adres który został wskazany co prawda w
tej host najmu na coś locus na mnie chciał podać ale podał nam port 80 89 i ten port.
Powinniśmy spróbować się dostać pod adresem 127 001.
Naszym oczom ukazuje się formularz niezbyt skomplikowany w którym
w pierwszym polu podajemy do ilu użytkowników ma dobić locus.
Ile maksymalnie ma wygenerować a w drugim ma określamy tempo przyrostu użytkowników.
Ilu użytkowników ma być dodawane na sekundę.
Ustalimy sobie użytkowników docelową i żeby przybywało ich po pięciu na sekundę.
Zabrakło mi http:.
Po dodaniu jeszcze raz ponownie wpisem stu
użytkowników i pięciu użytkowników na sekundę.
Widzimy że zaczynają nam.
Przerasta cię request.
Mam tutaj średni czas do 95 questów mamy
średni czas w ogóle minimalny maksymalny i dalsze informacje.
Natomiast to co jest bardzo ciekawe co
daje nam od razu pogląd na to jak działa aplikacja to są to są wykresy.
Pierwszym okresem jest liczba questów na sekundę i tu
doskonale widać ile i questów na sekundę jest w stanie obsłużyć nasza aplikacja.
Weźmy pod uwagę że ja uruchamiają ją na serwerze deweloperskim na RAM serwer
na włączonym do Bugu i na włączonym 2 w barze dlatego nie będzie to optymalne.
Nie są to optymalne warunki dla działania aplikacji i przy włączonym USG i przy
wielu wątkach i wielu procesach byłoby na pewno z tym lepiej.
Ale widzimy że czas odpowiedzi jest dosłownie kilkadziesiąt milisekund.
To jest bardzo mało.
I gdybyśmy na naszym produkcyjnym serwerze masie produkcyjnej aplikacji przy takim
ruchu osiągali takie czasy to znaczy że już jest dobrze.
Możemy spróbować bardziej odważnie z
tysiącem użytkowników możemy generować ich na sekundę 40.
I sprawdzać jak się zachowuje wtedy strona.
Warto jest obserwować zasoby komputera sprawdzić czy pierwszy kończy się ram czy
pierwszy kończy się procesor ponieważ to daje nam pewien sygnał.
Gdzie leży problem co warto zwiększyć.
Czy warto zwiększyć ilość RAMu lepiej
przenieść się na nowy procesor i to już widzimy na przykład że przy takim ruchu.
Czas odpowiedzi dramatycznie wzrasta.
Liczba questów na sekundę spada ponieważ koszty trwają dużo dłużej.
Tak bardzo często.
Taki stan rzeczy jeżeli widzimy że czas
odpowiedzi zaczyna wzrastać prowadzi do tego że serwer się zawiesza i przestaje
już zupełnie odpowiadać to widzimy że wszystko się unormowania PO.
No cóż na włączonym serwerze deweloperskim jest to dość nieprzewidywalne.
Jeżeli wejdziemy w dalsze zakładki to możemy obserwować
błędy które aplikacja przy dużym obciążeniu zwraca statusu i treści.
Natomiast.
Aplikacji tej to bardzo polecam używać Jeżeli planujecie
puszczać kampanie marketingowe jeżeli chcecie udostępniać swoją stronę gdzieś
gdzie jednocześnie wejdzie na nią bardzo dużo użytkowników.
Jeżeli planujecie w ogóle robić duże strony z dużym obciążeniem.
Jeżeli chcecie być pewni że wszystko będzie działało poprawnie.
W konfiguracji roku możecie zamiast prostych gestów tworzyć posty.
Możecie logować się możecie działać jako
użytkownik i pozwala on wam naprawdę na wiele rzeczy.