Serwer proxy pozwalający na skalowanie ruchu dla dynamicznie i na żądanie tworzonych hostów.
Przygotowane rozwiązanie
Celem projektu jest stworzenie narzędzia wspomagającego skalowanie ruchu www dla dynamicznie pojawiających się hostów (serwerów www).
W Ermlab tworząc skalowalne rozwiązania dla naszych klientów oraz dla nas samych (serwis PLON) wielokrotnie spotkaliśmy się z problemem powoływania do życia dynamicznych aplikacji www. W sytuacji, gdy na żądanie dla użytkownika należy szybko postawić serwis internetowy zazwyczaj wymaga to rekonfiguracji i restartu serwera rozdzielającego ruch www (load balancera), tak aby nowy serwis był widoczny w sieci internet. Powoduje to chwilowe zatrzymanie usługi a co za tym idzie i wstrzymanie innych aplikacji www. Przygotowane przez nas rozwiązanie pozwala dynamicznie, bez rekonfiguracji i restartu dodawać nowe serwisy internetowe, które od razu i automatycznie widoczne są dla użytkowników internetu.
Nasze rozwiązanie pozwoliło:
- wyeliminować restartowanie serwera rozdzielającego ruch www
- zautomatyzować proces dodawania nowych dynamicznych serwisów www
- zwiększyć ilość obsługiwanych żądań przez klientów ponad trzykrotnie (3x) w stosunku od konkurencyjnej usługi Hipache
- skrócić czas reakcji i wczytywania stron www czterokrotnie (4x) w stosunku od konkurencyjnej usługi Hipache
Technologia
Z technologicznego punktu widzenia przy tworzeniu skalowalnego proxy wykorzystaliśmy:
- serwer nginx – jako bazowy serwer proxy
- rozszerzenie nginx’a pozwalające wykorzystać w trakcie przetwarzania żądania www język Lua
- Redis – skalowana i wydajna nie relacyjna baza danych
- Docker – wykorzystany do zapakowania całego rozwiązania w łatwą do zainstalowania paczkę
W Ermlab wyznajemy filozofię dzielenia się naszymi rozwiązaniami (zobacz nasze projekty Ermlab OpenSource), stąd też Nginx-Lua-Proxy udostępniliśmy za darmo w serwisie github.com, tam też znajduje się pełna dokumentacja.
Testy wydajności
Przeprowadzone przez nas testy z użyciem oprogramowania Apache Benchmark wskazują, że w stosunku konkurencyjnego serwera proxy – Hipache opracowane przez nas rozwiązanie jest zdecydowanie wydajniejsze. Obrazuje to poniższa tabela:
Parametr | hipache | nginx-lua-proxy |
---|---|---|
Concurrency Level: | 200 | 200 |
Time taken for tests: | 57.446 sekund | 14.951 sekund |
Complete requests: | 20000 | 20000 |
Failed requests: | 0 | 0 |
Write errors: | 0 | 0 |
Total transferred: | 6500000 bytes | 6380000 bytes |
HTML transferred: | 2680000 bytes | 2560000 bytes |
Requests per second: | 348.15 [#/sec] (mean) | 1337.68 [#/sec] (mean) |
Time per request: | 348.464 ms | 149.513 ms |
Time per request: | 2.872 [ms] | 0.748 [ms] |
Transfer rate: | 110.50 [Kbytes/sec] | 416.65 [Kbytes/sec] |