Wydajne API dla aplikacji mobilnych

24
Wydajne API dla aplikacji mobilnych co warto robić a czego warto unikać aby wycisnąć jak najwięcej z naszego API

description

Prezentacja Marcina Wójcika z Future Processing w ramach konferencji PHPCon Poland 2014.

Transcript of Wydajne API dla aplikacji mobilnych

Page 1: Wydajne API dla aplikacji mobilnych

Wydajne API dla aplikacji mobilnych

co warto robić a czego warto unikać

aby wycisnąć jak najwięcej z naszego API

Page 2: Wydajne API dla aplikacji mobilnych

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

Page 3: Wydajne API dla aplikacji mobilnych

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

Page 4: Wydajne API dla aplikacji mobilnych

Skąd ta prezentacja?

2014-09-27 Marcin Wójcik, PHPCon 2014

1-3 req / min2500 req / sek

4 / 24

Page 5: Wydajne API dla aplikacji mobilnych

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

Page 6: Wydajne API dla aplikacji mobilnych

Publiczne API

2014-09-27 Marcin Wójcik, PHPCon 2014

SZYBKIEZWALNIANIE

ZASOBÓW

6 / 24

Endpoints:/getProduct/registerDevice…

Page 7: Wydajne API dla aplikacji mobilnych

Backend

2014-09-27 Marcin Wójcik, PHPCon 2014 7 / 24

Page 8: Wydajne API dla aplikacji mobilnych

Architektura

2014-09-27 Marcin Wójcik, PHPCon 2014

processes

8 / 24

Page 9: Wydajne API dla aplikacji mobilnych

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

Page 10: Wydajne API dla aplikacji mobilnych

Optymalizacja środowiska - soft

2014-09-27 Marcin Wójcik, PHPCon 2014 10 / 24

• nginx• php-fpm• KeepAlive• moduły• tuning LEMP• tuning OS

Page 11: Wydajne API dla aplikacji mobilnych

Optymalizacja środowiska - sprzęt

2014-09-27 Marcin Wójcik, PHPCon 2014 11 / 24

• routing• VM vs box• dostawianie maszyn• cloud?

Page 12: Wydajne API dla aplikacji mobilnych

Szybkie zwalnianie zasobów

2014-09-27 Marcin Wójcik, PHPCon 2014 12 / 24

Page 13: Wydajne API dla aplikacji mobilnych

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

Page 14: Wydajne API dla aplikacji mobilnych

Architektura - dane

2014-09-27 Marcin Wójcik, PHPCon 2014

Rejestracja urządzenia + pobranie listy produktów

14 / 24

Page 15: Wydajne API dla aplikacji mobilnych

Optymalizacja API

2014-09-27 Marcin Wójcik, PHPCon 2014

Pregenerowanie danych

15 / 24

• Identyfikatory• Dane w JSON• URLe

Page 16: Wydajne API dla aplikacji mobilnych

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

Page 17: Wydajne API dla aplikacji mobilnych

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

Page 18: Wydajne API dla aplikacji mobilnych

jMeter

2014-09-27 Marcin Wójcik, PHPCon 2014

UWAGA: stosowanie GUI ogranicza ilość żądań!

18 / 24

Page 19: Wydajne API dla aplikacji mobilnych

Ideał

2014-09-27 Marcin Wójcik, PHPCon 2014 19 / 24

Page 20: Wydajne API dla aplikacji mobilnych

Dobre praktyki

• Ciągłe monitorowanie i profilowanie: (XHProf / webgrind) + StatsD + (Graphite / Munin / Cacti)

2014-09-27 Marcin Wójcik, PHPCon 2014 20 / 24

Page 21: Wydajne API dla aplikacji mobilnych

Dobre praktyki

2014-09-27 Marcin Wójcik, PHPCon 2014 21 / 24

• szukaj optymalizacji• unikaj @todo i @fixme• functional first

Page 22: Wydajne API dla aplikacji mobilnych

Dobre praktyki

2014-09-27 Marcin Wójcik, PHPCon 2014 22 / 24

API:• architektura• dostęp do danych

Backend:• architektura• mikrooptymalizacja

APC/OPcache

Page 23: Wydajne API dla aplikacji mobilnych

Dobre praktyki

• Failover / disaster recovery

2014-09-27 Marcin Wójcik, PHPCon 2014 23 / 24

Page 24: Wydajne API dla aplikacji mobilnych

Pytania?

2014-09-27 Marcin Wójcik, PHPCon 2014 24 / 24

https://joind.in/talk/view/11846