DevOps, Open Source

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]