Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Swolle może zwiększyć wydajność PHP API o 91%!

Eldad A. Fux Software Architect, Enterpreneur
Sprawdź, jak zwiększyć wydajność i ułatwić utrzymanie kodu w PHP.
Swolle może zwiększyć wydajność PHP API o 91%!

W lutym 2021 wydaliśmy Appwrite w wersji 0.7 z wieloma nowymi funkcjami. Jednym z największych udogodnień, jakie wprowadziliśmy, było wewnętrzne przejście ze stosu wykorzystującego Nginx + PHP FPM na Swoole jako nasz podstawowy serwer HTTP.

W Appwrite budujemy darmową, open-source alternatywę dla Firebase Google’a, którą możesz samodzielnie hostować na dowolnej infrastrukturze. Nasz stos składa się z zestawu kontenerów Docker wykorzystujących architekturę mikroserwisów co pozwala nam na szybkie skalowanie i debugowanie poszczególnych komponentów składających się na nasze backendowe API. Przy jego pomocy programiści otrzymują znacznie lepszy punkt wyjścia dla nowych stron internetowych, aplikacji mobilnych lub projektów Flutter. Nasz projekt podstawowo oferuje gotowe do użycia API Authentication, Storage, Database, Cloud Functions jak również inne standardowe, których każda aplikacja potrzebuje do obsługi użytkowników, uprawnień i danych.


Jak używać Swoole 👩💻👨💻

Swoole to biblioteka, która umożliwia wysokowydajną, skalowalną i współbieżną warstwę komunikacji TCP, UDP, gniazd unixowych, HTTP, WebSockets w PHP. Używając Swoole, mamy pojedynczy wielowątkowy proces uruchamiający nasz serwer HTTP, który pozwala żądaniu HTTP na współdzielenie pamięci przez wielu użytkowników. Korzystając z takiego podejścia, możemy utrzymywać stałe połączenia z bazą danych i uniknąć ponownej inicjalizacji naszej aplikacji dla każdego użytkownika, co pomaga nam znacznie lepiej wykorzystać pamięć i CPU.

Dodatkowo Swoole pozwala nam na używanie korutyn. Korutyna w Swoole jest podobna do korutyny w innych językach lub frameworkach. Swoole tworzy jedną korutynę dla każdego żądania i zaplanowuje je głównie w oparciu o ich status I/O.  Swoole posiada również wbudowanych asynchronicznych klientów Redis, MySQL i Postgres, co pozwala na jeszcze lepszą wydajność.

Użycie Swoole jako naszego serwera WWW jest również dużo zdrowszym podejściem jeżeli system pracuje jako grupa mikroserwisów, takiej jak w naszym przypadku. Zamiast jednego kontenera z supervisordem do zarządzania wszystkimi procesami Nginx, FPM i PHP działającymi w tle, każdy z naszych kontenerów Dockera posiada jeden proces jako punkt wejścia. Jest to znacznie łatwiejsze do skalowania, debugowania i monitorowania. Możesz używać Nginx i PHP w oddzielnych kontenerach, jednak wygląda to trochę “niedockerowe” podejście.


Benchmarki🧪⚙️

Aby zilustrować owe ulepszenia, przeprowadziliśmy testy wydajności różnych scenariuszy z wersjami 0.6.2 i 0.7.0. Wykonaliśmy żądania do wielu punktów końcowych Appwrite w celu odczytu i zapisu danych. Wszystkie żądania były kierowane do punktów końcowych, które wymagają uwierzytelnienia i przeprowadzenia kontroli nadużyć (funkcji, które również korzystają na tych ulepszeniach).

Oba testy zostały przeprowadzone na tym samym sprzęcie. Nie mają na celu ukazania maksymalnej wydajności Swoole, ale skupiają się na różnicach w stosunku do naszej starszej wersji. Poniższe wyniki dotyczą 5 minut testów obciążeniowych i przeciążeniowych z 500 klientami korzystającymi jednocześnie z K6.


Wersja 0.6.2

Jak można zauważyć, tylko 98% wszystkich żądań zakończyło się sukcesem. Reszta zakończyła się przekroczeniem limitu czasu z powodu przeciążenia.


Wersja 0.7

Z wersją 0.7 wszystko wygląda zupełnie inaczej. Nie tylko wszystkie żądania zakończyły się sukcesem, ale było ich prawie dwa razy więcej przy średnio o połowę krótszym czasie reakcji.


Wnioski 🤔

Biorąc pod uwagę wszystkie czynniki, całkowity wzrost wydajności o ~91%. Dzięki Swoole nasz stos jest teraz o wiele szybszy i łatwiejszy w utrzymaniu. Tak naprawdę, benchmarki online pokazują, że Swoole+PHP bije na głowę popularne Node.js i Pythona, i nie jest daleko za językami kompilowanymi takimi jak GO.

Ten wzrost wydajności jest kolejnym krokiem, które podejmujemy, aby zapewnić programistom możliwość pełnego wykorzystania ich serwerów Appwrite. Wraz z nadchodzącymi nowymi wersjami planujemy udostępnić więcej danych i spostrzeżeń zarówno z procesu rozwoju, jak i benchmarków Appwrite.

Jest to również dobra okazja, aby podziękować całemu zespołowi Swoole za wsparcie i pomoc w procesie migracji, który był zaskakująco prosty i szybki. Dosłownie kilka dni zajęło nam dojście do pierwszej działającej wersji naszego całego API.


Czy coś jeszcze? 🚀

Jeśli jesteś zainteresowany Appwrite, możesz sprawdzić niektóre z naszych tutoriali dla Web, Flutter lub Serwer i odwiedzić naszą społeczność Discord, gdzie cały czas  rozmawiamy o Appwrite z ponad 1300 kolegami Appwriter’ami.

Jeśli podobają Ci się te ulepszenia, śledź nas na bieżąco i sprawdzaj nasze projekty na Githubie. Możesz również pytać o nowe funkcje na naszym Github issues i przejrzeć nasze najnowsze specyfikacje funkcji na stronie Repozytorium Appwrite RFC.

Oryginał tekstu w języku angielskim przeczytasz tutaj.

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej