backend, docker, opensource

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:

Parametrhipachenginx-lua-proxy
Concurrency Level:200200
Time taken for tests:57.446 sekund14.951 sekund
Complete requests:2000020000
Failed requests:00
Write errors:00
Total transferred:6500000 bytes6380000 bytes
HTML transferred:2680000 bytes2560000 bytes
Requests per second:348.15 [#/sec] (mean)1337.68 [#/sec] (mean)
Time per request:348.464 ms149.513 ms
Time per request:2.872 [ms]0.748 [ms]
Transfer rate:110.50 [Kbytes/sec]416.65 [Kbytes/sec]