什么是运行在Linux /单声道ServiceStack的最佳方式?(What is the bes

2019-06-17 22:34发布

列出的关于ServiceStack网站它表明ServiceStack可以单用或者运行:

  • XSP
  • 是mod_mono
  • FASTCGI
  • 安慰

这些是什么不同的配置和其优选用于Web服务的单?

Answer 1:

更新的Linux

从该v4.5.2版本 ServiceStack现在支持.NET核心,提供了显著的性能和稳定性方面的改进在单说是从一个共享的跨平台的代码库导出并支持微软的资源充足,主动和响应团队。 如果您目前正在运行的单ServiceStack,我们强烈建议升级到.NET的核心利用其优越的性能,稳定性和其顶部至底部支持的技术堆栈的优势。

更新单

我们推荐的主持Linux和单声道ASP .NET网站设置是使用nginx的/ HyperFastCgi。 我们发布了一步一步的指导,通过从头开始完成部署创建一个Ubuntu VM准备/安装/ conf目录为/ init脚本单服务器配置 。

注意到一些稳定性和性能问题后,我们不再推荐MonoFastCGI。 这个博客帖子提供的性能,内存使用和稳定性的一个很好的分析不同的ASP.NET主机在单选项 。


发展

XSP类似于VS.NET Webdev的服务器-用C#编写一个简单的独立ASP.NET Web服务器。 本品适用于开发或小型工作负载。 你只是从你的ServiceStack ASP.NET主机的根目录,这将使它可在运行它http://localhost:8080

生产

对于外部互联网服务,你通常要承载ServiceStack Web服务作为一个全功能的Web服务器的一部分。 用于Linux的2最流行的全功能的Web服务器:

Nginx的

使用单声道的FastCGI主办ServiceStack ASP.NET主机在Nginx的 。

阿帕奇

使用的是mod_mono主办ServiceStack ASP.NET主机在Apache HTTP服务器 。

自托管

ServiceStack还支持自托管它可以让你在一个独立的控制台应用程序运行在自己的ServiceStack web服务(即没有一个Web服务器)。 这是当你并不需要一个全功能的Web服务器的服务是一个好主意(如:你只需要的Intranet上内部托管Web服务)。

默认情况下,在Windows / .NET和Mono / Linux作为-相同ServiceStack控制台应用程序二进制运行。 但如果你愿意,你可以很容易地守护进程。您的应用程序作为一个Linux守护进程这里概述运行 。 维基页面还包括用于配置你的自我托管的Web服务为后面的Nginx的或Apache反向代理运行的指令。

因为它提供了一个良好的适合Heroku的并发模型在他们的12因素的应用中详述自托管将是我们将期待在不久的将来提供了环绕增加支持的区域。

ServiceStack.net Nginx的/单声道FastCGI配置

该servicestack.net网站本身(包括所有的现场演示)上运行Ubuntu的HETZNER vServer的使用Nginx的+单声道的FastCGI。

该命令用于启动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 &

哪些主机在中* .webapp文件中定义的所有应用程序/etc/rc.d/init.d/mono-fastcgi文件夹使用指定XSP的Web应用程序文件格式 ,如:

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的单过程,你可以通过添加此规则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的单服务器进程。 一些示例应用程序托管这种方式:

  • http://www.servicestack.net/ServiceStack.Northwind/
  • http://www.servicestack.net/ServiceStack.Hello/
  • http://www.servicestack.net/RedisAdminUI/AjaxClient/
  • http://www.servicestack.net/RedisStackOverflow/

对于那些有兴趣是servicestack.net完整的Nginx + FastCGI配置文件可供下载 。



Answer 2:

在生产中,我们使用nginx的与UNIX文件插座

我们使用nginx的,服务栈和单插槽通信时发现了一个bug /内存泄漏。 这与500个并发请求,而你所期待的CPU和内存的它没有来再次回落激增。 我们没有做任何进一步的测试,以发现问题出在哪里了,但有记录有错误xamarin Bugzilla的似乎相似,我们有问题。 本质上讲,我们尝试了以下内容,这对我们来说足够了。

我们切换到使用Unix套接字使用下面的命令PARAMS

fastcgi的单 - 服务器4 /filename=/tmp/something.socket /插座= UNIX /应用= /无功/网络/

我们不得不用这种方法的问题是,插座文件的权限每次改变运行的FastCGI - 单服务器4所以你必须改正你已经开始FastCGI的,单服务器4后! 另一个缺点是,在我们的盒子它只能处理大约120个并发请求。 然而,这是不是真的在此刻为我们一个问题,你总是可以产生更多的进程。

希望这可以帮助



Answer 3:

免责声明:我HyperFastCgi服务器的作者和博客文章的作者是在中欧办的答复中提到

nginx的与HyperFastCgi做好这项工作。 HyperFastCgi不泄漏存储器作为单声道的fastcgi服务器,并且执行速度更快,因为它使用低级别的一元API传递的应用领域,而不是跨域调用的缓慢单JIT实现之间的数据。 也有选项可以使用原生的libevent库插槽通信这大概是1.5-2速度比目前的单声道的System.Net.Sockets实现。

HyperFastCgi的主要特点:

  • 允许使用3种不同的方式来处理套接字和跨域通信:
    • Managed Listener with Managed Transport (仅使用托管代码,异步的System.Net.Sockets。慢单,由于缓慢JIT跨域调用)
    • Managed Listener with Combined Transport (使用异步的System.Net.Sockets为收听和低级别的单API进行跨域调用。很多快得多)
    • Native Listener (使用本机的libevent为socket库和低级别的单API进行跨域调用,最好的性能)
  • 允许多种方式并行的Web请求:使用线程池,.NET 4.5任务或单线程。 最后选择与结合Native Listener ,使Web服务器工作方式类似NodeJS :所有的请求都在异步方式单一线程处理。
  • 允许编写简单的请求处理程序,而无需使用的System.Web可言。 这增加了2-2.5倍请求的处理性能。


Answer 4:

有关于单声道的使用ServiceStack性能有帮助,并相对最近的一篇博客。 我想这可能是使用的一些谁是要决定如何举办自己的服务: 在单Servicestack性能

因为它说- FastCGI的单服务器万吨内存泄漏,我可以确认的。 我跑ab -n 100000 -c 10 http://myurl在Ubuntu桌面14.04使用单声道3.2.8和1.4.6 Nginx的和FastCGI单服务器3.0.11和使用ServiceStack 71年3月9日编写的服务。 我不认为它很重要,我使用它ServiceStack的版本,因为FastCGI的单服务器是漏位。 它吃光了所有的可用内存 - 约1Gb的出2GB的总。

此外,Nginx的+ FastCGI的单服务器的性能 ,相对于其他方案,至少。 我的样本REST服务有大约每秒275请求。 该博客的作者已经审查的FastCGI单服务器的代码,并决定写自己的实现。 出于某种原因,它不工作,虽然,至少在我的机器上。

所以这一点,我想,是你不应该使用FastCGI的单服务器。 除非你要经常重新启动你的盒子。

由于这个职位大多是负面的,我应该说什么是我关于我的托管服务的意图。 我可能会去自托管与APPHOST继承AppHostHttpListenerLongRunningBase背后Nginx的。 使用相同的样本REST服务上面,我得到大约每秒1100请​​求。 更好的消息是该方法没有明显的泄漏,我用约1 000 000请求测试了它,并且处理消耗了<100MB RAM。

PS我不是博客帖子的作者:)



Answer 5:

evhttp锐 - 与主机NancyFx http服务器

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

速度非常快,几乎4的时间比南希libevent2更快。

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

有不同配置的测试结果:

每秒JSON响应:

  • evhttp锋利91557
  • 南希libevent2 17338
  • servicestack-nginx的-d 953
  • 南希896
  • ASPNET-jsonnet-863单


文章来源: What is the best way to run ServiceStack on Linux / Mono?