在ServiceStack website上列出,它显示ServiceStack可以在Mono上运行:
这些不同的配置是什么,哪些是Mono上的Web服务首选?
答案 0 :(得分:83)
来自the v4.5.2 Release ServiceStack现在支持.NET Core,它提供了相对于Mono的显着性能和稳定性改进,这些改进来自共享的跨平台代码库,并且得到了Microsoft资源充足,活跃且响应迅速的支持球队。如果您当前在Mono上运行ServiceStack,我们强烈建议您升级到.NET Core,以利用其卓越的性能,稳定性和自上而下支持的技术堆栈。
我们建议在Linux和Mono上托管ASP .NET站点的设置是使用nginx / HyperFastCgi。我们已经发布了一个分步指南,从头开始创建一个Ubuntu虚拟机,并在mono-server-config完成部署/安装/配置/初始化脚本。
在注意到几个稳定性和性能问题后,我们不再推荐MonoFastCGI。此博客文章提供了对different ASP.NET Hosting options in Mono的性能,内存使用情况和稳定性的良好分析。
XSP类似于VS.NET WebDev服务器 - 一个用C#编写的简单独立ASP.NET WebServer。这适用于开发或小型工作负载。您只需从ServiceStack ASP.NET主机的根目录运行它,该目录将在http://localhost:8080
处可用。
对于外部Internet服务,您通常希望将ServiceStack Web服务作为全功能Web服务器的一部分来托管。 Linux最受欢迎的两款全功能Web服务器是:
使用Mono FastCGI在Nginx中托管ServiceStack ASP.NET主机。
使用mod_mono在Apache HTTP Server中托管ServiceStack ASP.NET主机。
ServiceStack还支持自托管,允许您在独立的控制台应用程序(即没有Web服务器)中独立运行ServiceStack Web服务。当您不需要全功能Web服务器的服务时(例如:您只需要在Intranet上内部托管Web服务),这是一个好主意。
默认情况下,相同的ServiceStack控制台应用程序二进制文件在Windows / .NET和Mono / Linux上都按原样运行。虽然如果您愿意,您可以轻松地将您的应用程序守护到run as a Linux daemon as outlined here。 Wiki页面还包含有关将自托管Web服务配置为在Nginx或Apache反向代理后运行的说明。
因为它非常适合Heroku的并发模型as detailed in their 12 factor app自托管将是我们希望在不久的将来提供更多支持的领域。
servicestack.net网站本身(包括所有现场演示)使用Nginx + Mono FastCGI在Ubuntu hetzner vServer上运行。
此命令用于启动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 &
其中托管使用XSP's WebApp File Format指定的/etc/rc.d/init.d/mono-fastcgi
文件夹中的* .webapp文件中定义的所有应用程序,例如:
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>
这会在后台运行FastCGI Mono进程,您可以通过将此规则添加到nginx.conf来获取Nginx连接:
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;
}
将从/ServiceStack
或/RedisAdminUI
等开始的任何路由转发到FastCGI单声道服务器进程进行处理。一些示例应用程序以这种方式托管:
对于那些感兴趣的人来说,servicestack.net的完整Nginx + FastCGI配置文件是available for download。
答案 1 :(得分:19)
在制作中,我们将nginx与unix文件套接字一起使用
使用与nginx,服务堆栈和单声道的套接字通信时,我们发现了一个错误/内存泄漏。这是500个并发请求,而你期望cpu和内存的峰值再也没有回来。我们没有做任何进一步的测试来发现问题所在,但是xamarin bugzilla记录的错误与我们遇到的问题类似。基本上我们尝试了以下内容,这对我们来说已经足够了。
我们使用以下命令params
切换到使用unix套接字fastcgi-mono-server4 /filename=/tmp/something.socket / socket = unix /应用= /无功/网络/
我们使用此方法遇到的问题是每次运行fastcgi-mono-server4时套接字文件的权限都会更改,因此您必须在启动fastcgi-mono-server4后更正它们!另一个缺点是在我们的盒子上它只能处理大约120个并发请求。然而,这对我们来说并不是一个真正的问题,你总能产生更多的进程。
希望这有帮助
答案 2 :(得分:6)
免责声明:我是HyperFastCgi服务器的作者,并且在ceco的回答中提到了博客文章的作者
nginx与HyperFastCgi完成这项工作。 HyperFastCgi不会像单声道fastcgi服务器一样泄漏内存并且执行速度更快,因为它使用低级单声道API在应用程序域之间传递数据,而不是跨域调用的慢速单声道JIT实现。此外,它还可以选择使用本机 libevent 库进行套接字通信,这比当前的单声道System.Net.Sockets实现快1.5-2。
HyperFastCgi的主要功能:
Managed Listener with Managed Transport
(仅使用托管代码,异步System.Net.Sockets。由于JIT跨域调用缓慢,单声道速度慢)Managed Listener with Combined Transport
(使用异步System.Net.Sockets作为侦听器,使用低级单声道API进行跨域调用。快得多)Native Listener
(使用原生 libevent 作为套接字库和低级单声道API进行跨域调用。性能最佳)Native Listener
结合使得Web服务器的工作方式与NodeJS
类似:所有请求都以异步方式在单个线程中处理。答案 3 :(得分:3)
有一篇关于使用ServiceStack的Mono性能的有用且相对较新的博客文章。我认为这对于即将决定如何托管服务的人来说可能有用: Servicestack performance in Mono 。
正如它所说 - FastCGI Mono服务器有吨的内存泄漏,我可以确认。我使用Mono 3.2.8和Nginx 1.4.6以及FastCGI Mono Server 3.0.11和使用ServiceStack 3.9.71编写的服务在Ubuntu Desktop 14.04上运行ab -n 100000 -c 10 http://myurl
。我不认为我正在使用哪个版本的ServiceStack,因为FastCGI Mono Server是漏洞。它占用了所有可用的内存 - 总共2GB左右的1Gb。
此外,至少与其他解决方案相比,Nginx + FastCGI Mono Server的性能糟糕。我的示例REST服务每秒大约有275个请求。该博客的作者已经审查了FastCGI Mono Server的代码,并决定编写自己的实现。出于某种原因,它至少在我的机器上无法正常工作。
我想,重点是你不应该使用FastCGI Mono Server。除非你想经常重启你的盒子。
由于这篇文章大多是否定的,我应该说我对托管服务的意图是什么。我可能会继续使用AppHost在Nginx后面继承AppHostHttpListenerLongRunningBase
进行自托管。使用上面的相同示例REST服务,我每秒获得大约1100个请求。更好的消息是,该过程没有明显的泄漏,我用大约1 000 000个请求进行了测试,并且该过程消耗了&lt; 100MB RAM。
P.S。我不是博客文章的作者:)
答案 4 :(得分:2)
evhttp-sharp - 带有NancyFx主机的http服务器
https://github.com/kekekeks/evhttp-sharp
非常快,比nancy-libevent2快4倍。
http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json&s=2&l=2
有不同配置的测试结果:
每秒JSON响应: