wydajne api dla aplikacji mobilnych
DESCRIPTION
Prezentacja Marcina Wójcika z Future Processing w ramach konferencji PHPCon Poland 2014.TRANSCRIPT
Wydajne API dla aplikacji mobilnych
co warto robić a czego warto unikać
aby wycisnąć jak najwięcej z naszego API
O mnie
• Programista PHP od 10 lat
• Obecnie programista w Future Processing
• WWW, CRM, ERP, API, integracja systemów
2014-09-27 Marcin Wójcik, PHPCon 2014 2 / 24
Plan
• Skąd ta prezentacja?
• Elementy systemu i wpływ na wydajność
• Optymalizacja
• Dobre praktyki
2014-09-27 Marcin Wójcik, PHPCon 2014 3 / 24
Skąd ta prezentacja?
2014-09-27 Marcin Wójcik, PHPCon 2014
1-3 req / min2500 req / sek
4 / 24
Co robić, jak żyć?
• Zaprojektować dobrze architekturę systemu• Obsługa żądań/połączeń
• Przepływ, przetwarzanie, przechowywanie danych
• Podział obowiązków: co ma robić API?
• (Z)optymalizować aplikację• Optymalizacja frontendu (endpoints)
• Optymalizacja backendu
• Dbać o dobre praktyki podczas pisania kodu
2014-09-27 Marcin Wójcik, PHPCon 2014 5 / 24
Publiczne API
2014-09-27 Marcin Wójcik, PHPCon 2014
SZYBKIEZWALNIANIE
ZASOBÓW
6 / 24
Endpoints:/getProduct/registerDevice…
Backend
2014-09-27 Marcin Wójcik, PHPCon 2014 7 / 24
Architektura
2014-09-27 Marcin Wójcik, PHPCon 2014
processes
8 / 24
Architektura
• Eventual consistency„spójność ostateczna” :)
• o ile do systemu nie są zgłaszane nowe żądania modyfikujące, dane ostatecznie stają się spójne
2014-09-27 Marcin Wójcik, PHPCon 2014 9 / 24
Optymalizacja środowiska - soft
2014-09-27 Marcin Wójcik, PHPCon 2014 10 / 24
• nginx• php-fpm• KeepAlive• moduły• tuning LEMP• tuning OS
Optymalizacja środowiska - sprzęt
2014-09-27 Marcin Wójcik, PHPCon 2014 11 / 24
• routing• VM vs box• dostawianie maszyn• cloud?
Szybkie zwalnianie zasobów
2014-09-27 Marcin Wójcik, PHPCon 2014 12 / 24
Szybkie zwalnianie zasobów
2014-09-27 Marcin Wójcik, PHPCon 2014
• Minimalizowanie czasu dostępu do danych
• Radzenie sobie z czasochłonnymi operacjami
• Możliwie krótki tor przetwarzania żądania
• Mało istotne operacje wykonywane po zwróceniu odpowiedzi
• RESTless
13 / 24
Architektura - dane
2014-09-27 Marcin Wójcik, PHPCon 2014
Rejestracja urządzenia + pobranie listy produktów
14 / 24
Optymalizacja API
2014-09-27 Marcin Wójcik, PHPCon 2014
Pregenerowanie danych
15 / 24
• Identyfikatory• Dane w JSON• URLe
Optymalizacja API
2014-09-27 Marcin Wójcik, PHPCon 2014
• Uproszczenie dostępu do danych• HGET users app_hash:user_hash
• HGET purchases app_hash:user_hash
• HGET issues app_hash
• Dane gotowe do wystawienia// get JSON with prepared data
$purchases = $redis->hGet(`purchases`, $app_user_hash);
echo $purchases;
16 / 24
Optymalizacja API
2014-09-27 Marcin Wójcik, PHPCon 2014
• fastcgi_finish_request()
• brak frameworka, usunięcie autoloadera, minimalizacja ilości dołączanych plików
• wyłączenie rewrite, oparcie API na strukturze katalogów:../public_html/getProducts/index.php
17 / 24
jMeter
2014-09-27 Marcin Wójcik, PHPCon 2014
UWAGA: stosowanie GUI ogranicza ilość żądań!
18 / 24
Ideał
2014-09-27 Marcin Wójcik, PHPCon 2014 19 / 24
Dobre praktyki
• Ciągłe monitorowanie i profilowanie: (XHProf / webgrind) + StatsD + (Graphite / Munin / Cacti)
2014-09-27 Marcin Wójcik, PHPCon 2014 20 / 24
Dobre praktyki
2014-09-27 Marcin Wójcik, PHPCon 2014 21 / 24
• szukaj optymalizacji• unikaj @todo i @fixme• functional first
Dobre praktyki
2014-09-27 Marcin Wójcik, PHPCon 2014 22 / 24
API:• architektura• dostęp do danych
Backend:• architektura• mikrooptymalizacja
APC/OPcache
Dobre praktyki
• Failover / disaster recovery
2014-09-27 Marcin Wójcik, PHPCon 2014 23 / 24
Pytania?
2014-09-27 Marcin Wójcik, PHPCon 2014 24 / 24
https://joind.in/talk/view/11846