首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Linux / Mono上运行ServiceStack的最佳方式是什么?

在Linux / Mono上运行ServiceStack的最佳方式是什么?
EN

Stack Overflow用户
提问于 2012-08-30 08:32:00
回答 5查看 22.8K关注 0票数 48

ServiceStack website上列出的它表明,ServiceStack可以运行在Mono上,具有以下两种选项:

  • XSP
  • mod_mono
  • FastCgi
  • Console

这些不同的配置是什么,哪些是Mono上的Web服务的首选配置?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-30 08:32:00

Linux更新

来自the v4.5.2 Release的ServiceStack现在支持Mono核心,该核心提供了来自共享跨平台代码库的.NET的显着性能和稳定性改进,并得到了资源丰富、积极和响应迅速的微软团队的支持。如果你目前在Mono上运行ServiceStack,我们强烈建议升级到.NET核心,以利用其卓越的性能,稳定性和其自上而下支持的技术堆栈。

Mono更新

我们推荐在Linux和Mono上托管ASP .NET站点的设置是使用nginx/HyperFastCgi。我们已经在mono-server-config上发布了从头开始创建Ubuntu的分步指南,以及部署/安装/配置/初始化脚本。

在注意到一些稳定性和性能问题后,我们不再推荐MonoFastCGI。这篇博文对different ASP.NET Hosting options in Mono的性能、内存使用和稳定性进行了很好的分析。

开发

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

生产

对于外部internet服务,您通常希望将ServiceStack web服务作为功能齐全的Web服务器的一部分进行托管。Linux最流行的两个全功能web服务器是:

Nginx

使用Mono FastCGINginx中托管ServiceStack ASP.NET主机。

阿帕奇

使用mod_monoApache 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 /单声道FastCGI配置

servicestack.net网站本身(包括所有现场演示)都运行在使用Nginx + Mono FastCGI的Ubuntu hetzner vServer上。

此命令用于启动FastCGI后台进程:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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 Mono进程,您可以通过将以下规则添加到nginx.conf来连接FastCGI:

代码语言:javascript
复制
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

票数 84
EN

Stack Overflow用户

发布于 2012-09-06 18:53:52

在生产中,我们将nginx与unix文件套接字一起使用

在nginx、服务堆栈和mono中使用套接字通信时,我们发现了一个bug/内存泄漏。这是在500个并发请求的情况下,虽然你会期望cpu和内存的峰值,但它再也不会停机了。我们没有做任何进一步的测试来找出问题所在,但xamarin bugzilla记录了一个似乎与我们遇到的问题相似的错误。基本上,我们尝试了以下方法,它对我们来说已经足够好了。

我们使用以下命令参数切换到使用unix套接字

套接字

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

这个方法的问题是,每次你运行fastcgi-mono-server4时套接字文件的权限都会改变,所以你必须在启动fastcgi-mono-server4之后纠正它们!另一个缺点是,在我们的机器上,它只能处理大约120个并发请求。然而,目前这对我们来说并不是什么问题,你可以随时生成更多的进程。

希望这能有所帮助

票数 19
EN

Stack Overflow用户

发布于 2014-09-28 12:23:49

免责声明:我是HyperFastCgi服务器的作者,在ceco的回答中提到了博客文章的作者

使用HyperFastCgi的nginx可以完成这项工作。HyperFastCgi不会像mono fastcgi服务器那样泄漏内存,而且执行速度更快,因为它使用低级mono API在应用程序域之间传递数据,而不是跨域调用的缓慢mono JIT实现。此外,它还可以选择使用原生libevent库进行套接字通信,这比当前的单声道System.Net.Sockets实现快了1.5-2倍。

HyperFastCgi的主要功能:

  • 允许使用3种不同的方式来处理套接字和跨域通信:
    • Managed Listener with Managed Transport (只使用托管代码,异步System.Net.Sockets。单声道较慢,原因是即时跨域调用较慢)
    • Managed Listener with Combined Transport (使用异步System.Net.Sockets作为监听器,并使用低级的mono API进行跨域调用。许多faster)
    • Native Listener (使用本机libevent作为套接字库和低级mono API进行跨域调用。最佳性能)

  • 允许多种方式并行web请求:使用ThreadPool、.NET 4.5任务或单线程。Last options与Native Listener的结合使得web服务器的工作方式类似于NodeJS:所有请求都以异步方式在单线程中处理。
  • 允许在根本不使用System.Web的情况下编写简单的请求处理器。这样可以将请求的处理性能提高2-2.5倍。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12188356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档