Używamy django, aby utworzyć interfejs serwisowy json dla mysql. Mamy apache i django działające na instancji EC2 i MySQL działające na instancji RDS. Rozpoczęliśmy testy wydajności przy użyciu ławki apache i uzyskaliśmy kilka naprawdę słabych wyników. Zauważyliśmy również, że podczas uruchamiania testów nasza instancja apache/django przechodzi do 100% użycia procesora przy bardzo niskim obciążeniu, a instancja MySQL nigdy nie przekracza 2% wykorzystania procesora.Czy istnieje sposób na przyspieszenie funkcji uwierzytelniania w django?
Próbujemy zrozumieć to i wyizolować problem, więc zrobiliśmy kilka testów AB:
- Wniosek o statyczną stronę HTML z apache - ~ 2000 zapytań/sekundę.
- Żądanie, które wykonuje małą funkcję python w django i brak interakcji db - ~ 1000 żądań/sekundę.
- Żądanie, które wykonuje jedną z naszych funkcji serwisu django, która wywołuje uwierzytelnienie, a następnie wykonuje bardzo proste zapytanie, aby pobrać jeden rekord z tabeli - 11 żądań/sekundę
- To samo co 3, ale skomentował połączenie do uwierzytelnienia - - 95 wniosków/sekundę.
Dlaczego uwierzytelnianie jest takie powolne? Czy zapisuje dane do bazy danych, znajdując miliard cyfr pi, co?
Chcielibyśmy zachować uwierzytelnianie w tych funkcjach, ponieważ nie chcemy, aby były otwarte dla każdego, kto może odgadnąć adres URL, itp. Czy ktoś tutaj zauważył, że uwierzytelnienie jest powolne i czy ktoś może zasugerować sposób na zaradzenie?
Dziękuję bardzo!
Wypróbuj kilka rzeczy: pobierz django-debug-toolbar i odczytaj wynik. Zobacz, jakiego rodzaju zapytania wykonuje. Wypróbuj django-profile i przeczytaj czasy wykonywania funkcji. Wreszcie, uzyskaj newrelic ... nawet darmowa wersja pokaże Ci przydatne podziały na widok func. Podekscytowany, aby usłyszeć niektóre wyniki! –