Jak najlepiej uruchomić ServiceStack na Linuksie / Mono?

Wymienione na stronie ServiceStack pokazuje, że ServiceStack może działać na Mono z:

  • XSP
  • mod_mono
  • FastCgi
  • konsola

Jakie są te różne konfiguracje i która jest preferowana dla usług internetowych na Mono?

Author: mythz, 2012-08-30

5 answers

Aktualizacja dla Linuksa

ServiceStack w wersji 4.5.2 obsługuje teraz. Net Core, który oferuje znaczące ulepszenia wydajności i stabilności w stosunku do Mono, które pochodzą ze wspólnej wieloplatformowej bazy kodu i są obsługiwane przez dobrze wyposażony, aktywny i responsywny zespół Microsoftu. Jeśli obecnie korzystasz z usługi ServiceStack na Mono, zdecydowanie zalecamy aktualizację do. Net Core, aby skorzystać z jego doskonałej wydajności, stabilności i obsługi od góry do dołu Stos Technologii.

Aktualizacja dla Mono

[9]} naszą zalecaną konfiguracją dla hostingu stron ASP. net na Linuksie i Mono jest użycie nginx / HyperFastCgi. W tym celu udostępniliśmy instrukcję, która krok po kroku opisuje Tworzenie od podstaw maszyny wirtualnej Ubuntu wraz ze skryptami deploy / install / conf / INIT na stronie mono-server-config.

Nie zalecamy już MonoFastCGI po zauważeniu kilku problemów ze stabilnością i wydajnością. Ten wpis na blogu zapewnia dobrą analizę wydajności, wykorzystanie pamięci i stabilność różnych ASP.NET opcje hostingu W Mono .


Rozwój

XSP {[11] } jest podobny do VS.NET Serwer WebDev-prosty samodzielny ASP.NET WebServer napisany w C#. Nadaje się do prac rozwojowych lub małych obciążeń roboczych. Wystarczy uruchomić go z katalogu głównego pakietu ServiceStack ASP.NET host, który udostępni go pod adresem http://localhost:8080.

Produkcja

Dla zewnętrznych usług internetowych, które zazwyczaj chcesz hostować ServiceStack web services jako część w pełni funkcjonalnego serwera www. 2 najbardziej popularne w pełni funkcjonalne serwery internetowe dla Linuksa to:

Nginx

Użyj Mono FastCGI do hostowania ServiceStack ASP.NET hosty w Nginx .

Apache

Użyj mod_mono do hostowania ServiceStack ASP.NET hosty na serwerze HTTP Apache .

Self Hosting

ServiceStack obsługuje również self-hosting, który pozwala uruchomić ServiceStack webservices samodzielnie w samodzielnej aplikacji konsolowej (tj. bez serwera www). Jest to dobry pomysł, gdy nie potrzebujesz usług w pełni funkcjonalnego serwera www (np.: musisz hostować Usługi internetowe wewnętrznie w intranecie).

Domyślnie ta sama binarna aplikacja ServiceStack Console działa zarówno w systemie Windows/. NET, jak i Mono/Linux. Chociaż, jeśli chcesz, możesz łatwo daemonizować swoją aplikację do uruchomić jako demon Linuksa, jak opisano tutaj . Strona wiki także zawiera instrukcje konfigurowania hostowanej usługi internetowej tak, aby działała za odwrotnym serwerem proxy Nginx lub Apache.

Ponieważ zapewnia dobre dopasowanie do modelu współbieżności Heroku , jak opisano w ich aplikacji 12 factor SELF-hosting będzie obszarem, który będziemy chcieli zapewnić zwiększone wsparcie w najbliższej przyszłości.

ServiceStack.net konfiguracja Nginx / mono FastCGI [35]}

The servicestack.net sama strona internetowa (inc. wszystkie dema na żywo) działa na Ubuntu hetzner vServer używając Nginx + Mono FastCGI.

To polecenie jest używane do uruchomienia procesu w tle FastCGI:

fastcgi-mono-server4 --appconfigdir /etc/rc.d/init.d/mono-fastcgi 
  /socket=tcp:127.0.0.1:9000 /logfile=/var/log/mono/fastcgi.log &

Który obsługuje wszystkie aplikacje zdefiniowane w *.pliki webapp w folderze /etc/rc.d/init.d/mono-fastcgi określonym przy użyciu formatu pliku WebApp XSP , NP:

ServiceStack.webapp:

<apps>
<web-application>
        <name>ServiceStack.Northwind</name>
        <vhost>*</vhost>
        <vport>80</vport>
        <vpath>/ServiceStack.Northwind</vpath>
        <path>/home/mythz/src/ServiceStack.Northwind</path>
</web-application>
</apps>
Nginx jest jednym z najbardziej rozpoznawalnych i najbardziej rozpoznawalnych firm na świecie.conf:
location ~ /(ServiceStack|RedisAdminUI|RedisStackOverflow|RestFiles)\.* {  
   root /usr/share/nginx/mono/servicestack.net/;  
   index index.html index.htm index.aspx default.htm Default.htm;  
   fastcgi_index /default.htm;
   fastcgi_pass 127.0.0.1:9000;  
   fastcgi_param SCRIPT_FILENAME /usr/share/servicestack.net$fastcgi_script_name;
   include /etc/nginx/fastcgi_params;  
}

Który przekaże wszelkie trasa zaczynająca się od /ServiceStack lub /RedisAdminUI, itd. do procesu serwera FastCGI mono do przetworzenia. Niektóre przykładowe aplikacje hostowane w ten sposób:

Dla zainteresowanych pełny Nginx + FastCGI pliki konfiguracyjne dla servicestack.net są dostępne do pobrania .

 84
Author: mythz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-08 15:00:52

W produkcji używamy nginx z uniksowymi gniazdami Plików

Znaleźliśmy błąd / wyciek pamięci podczas korzystania z komunikacji socket z nginx, stosem usług i mono. To było z 500 jednoczesnych żądań, podczas gdy można było oczekiwać Skoku w cpu i pamięci, że nigdy nie wrócił w dół ponownie. Nie przeprowadziliśmy żadnych dalszych testów, aby dowiedzieć się, gdzie jest problem, ale jest błąd zarejestrowany za pomocą Xamarin bugzilla, który wydaje się podobny do problemów, które mieliśmy. Zasadniczo próbowaliśmy następujących I to to nam wystarczyło.

Przełączyliśmy się na użycie gniazd Unixowych z następującym poleceniem params

Fastcgi-mono-server4 / filename=/tmp / something.socket / socket=unix / applications= / var / www /

Problem, jaki mieliśmy z tą metodą, polega na tym, że uprawnienia pliku socket zmieniały się za każdym razem, gdy uruchamiasz fastcgi-mono-server4, więc musisz je poprawić po uruchomieniu fastcgi-mono-server4! Drugim minusem jest to, że na naszych pudełkach może obsługiwać tylko o 120 jednoczesnych zapytań. Jednak w tej chwili nie jest to dla nas problemem i zawsze możesz wywołać więcej procesów.

Hope this helps

 19
Author: Antony Denyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 09:07:59

Zastrzeżenie: jestem autorem HyperFastCgi server i autor postu na blogu został wymieniony w odpowiedzi ceco

Nginx z HyperFastCgi wykonaj tę pracę. HyperFastCgi nie wycieka pamięci jako serwer mono fastcgi i działa znacznie szybciej, ponieważ wykorzystuje niskopoziomowe mono API do przekazywania danych między domenami aplikacji zamiast powolnej implementacji mono JIT wywołań między domenami. Posiada również możliwość użycia natywnej biblioteki libevent do komunikacji socketów, która jest około 1,5-2 szybciej niż obecna implementacja systemu mono. Net. Sockets.

Główne cechy HyperFastCgi:]}
  • pozwala na wykorzystanie 3 różnych sposobów radzenia sobie z gniazdami i komunikacją między domenami:
    • [[0]} (używa tylko zarządzanego kodu, asynchronicznego System. Net. Sockets. Slow W mono, ze względu na powolne wywołania między domenami JIT)
    • Managed Listener with Combined Transport (używa asynchronicznego systemu. Net. Sockets jako słuchacza i niskopoziomowego mono API do wywołań między domenami. Much much faster)
    • Native Listener (używa natywnego libevent jako biblioteki gniazd i niskopoziomowego mono API do wykonywania połączeń między domenami. Najlepsze wykonanie)
  • pozwala na równoległe żądania sieciowe na kilka sposobów: za pomocą ThreadPool, zadania. NET 4.5 lub Single-threading. Ostatnie opcje są połączone z Native Listener sprawia, że web-serwer działa jak NodeJS: wszystkie żądania są przetwarzane w jednym wątku w sposób asynchroniczny.
  • pozwala pisać proste procedury obsługi zapytań bez użycia systemu.Www w ogóle. Zwiększa to przetwarzanie wniosków przez 2-2, 5 razy.
 6
Author: Sergey Zhukov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 16:48:07

Jest przydatny i stosunkowo niedawny wpis na blogu dotyczący wydajności Mono przy użyciu ServiceStack. Pomyślałem, że może to być przydatne dla niektórych, którzy decydują, jak zorganizować swoje usługi: wydajność Servicestack W Mono.

Jak mówi - Serwer FastCGI mono ma tony wycieków pamięci, które mogę potwierdzić. Uruchomiłem ab -n 100000 -c 10 http://myurl Na Ubuntu Desktop 14.04 używając Mono 3.2.8 i Nginx 1.4.6 oraz FastCGI Mono Server 3.0.11 i usługi napisanej przy użyciu ServiceStack 3.9.71. Nie sądzę, że ma to znaczenie, której wersji ServiceStack używam, ponieważ serwer FastCGI Mono jest nieszczelny. Zjadł całą dostępną pamięć - około 1Gb z 2GB w sumie.

Ponadto wydajność serwera Nginx + FastCGI Mono jest zła , przynajmniej w porównaniu z innymi rozwiązaniami. Moja przykładowa usługa odpoczynku miała około 275 żądań na sekundę. Autor bloga dokonał przeglądu kodu serwera FastCGI mono i postanowił napisać własną implementację. Z jakiegoś powodu nie działa, przynajmniej na mojej maszynie.

Chodzi więc chyba o to, że nie powinieneś używać serwera FastCGI Mono. Chyba że chcesz często restartować swoje pudełko.

Ponieważ ten post jest w większości negatywny, powinienem powiedzieć, jakie są moje intencje dotyczące hostingu moich usług. Prawdopodobnie przejdę do samodzielnego hostingu z apphostem dziedziczącym AppHostHttpListenerLongRunningBase za Nginx. Korzystając z tej samej usługi odpoczynku próbki powyżej dostaję około 1100 żądań na sekundę. Lepszą wiadomością jest to, że proces nie miał widocznych przecieków, Przetestowałem go z około 1 000 000 żądań i proces pochłonął

P. S. Nie jestem autorem wpisu na blogu:)

 4
Author: ceco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 09:39:28

Evhttp-sharp - serwer http z hostem dla NancyFx

Https://github.com/kekekeks/evhttp-sharp

Bardzo szybki, prawie 4 razy szybszy niż nancy-libevent2.

Http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json&s=2&l=2

Są wyniki testów dla różnych konfiguracji:

JSON odpowiedzi na sekundę:

  • evhttp-sharp 91,557
  • nancy-libevent2 17,338
  • servicestack-nginx-d 953
  • Nancy 896]}
  • aspnet-jsonnet-mono 863
 2
Author: mikowiec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 17:17:21