首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rebol在FCGI设置中的伸缩性如何?

Rebol在FCGI设置中的伸缩性如何?
EN

Stack Overflow用户
提问于 2013-03-03 05:23:40
回答 4查看 426关注 0票数 3

我计划用Rebol (目前在Apache2上的CGI)编写一个相当不错的web应用程序,但最初的性能测试非常令人沮丧。当我在应用程序上运行apache基准测试时,我得到的请求数仅为4-5次/秒。我想知道其他人是否也有类似的问题,FastCGI是否真的帮助了他们。

和afaik,Rebol只在命令和开发工具包版本中支持FastCGI,自从Rebol开源以来,这一变化是否会很快发生?

EN

回答 4

Stack Overflow用户

发布于 2013-03-03 06:19:57

我已经有一段时间没有使用Rebol中的FastCGI工具了,所以我不能很好地回答第一个问题,但我可以在你的第二个问题上提供帮助,尽管你可能不喜欢。

目前还没有人为R3重新创建fastcgi://方案。我之所以说“重新创建”,是因为R3具有与R2完全不同的端口模型,因此端口方案在这两个平台之间根本不能移植。这是对R2/命令端口方案的补充,它是内置的本机代码,即使是开源的也不能移植到R3,因为R3的系统模型也不同。抛开它的可移植性不谈,R2包含了许多Rebol Technologies无权开源的商业许可代码--几乎所有它能打开的代码都已经进入了R3。因此,如果它还不在那里,那么可以放心地认为它根本不兼容或不可打开。

使用遵循R3模型的全新fastcgi://方案,在R3中从头开始会更快、更容易。即使我们有FastCGI协议,R2源代码所能提供的最大帮助也就是文档,而AFAIK协议在其他地方有更好的文档。在这种情况下,创建一个针对这类事情进行优化的主机端口可能是一个好主意,在R3中更容易做一些事情。

从好的方面来说,根据我的记忆,FastCGI协议并不那么难做,而且新的R3端口模型对于这类事情要好得多,所以从头开始可能不是太困难。如果我们幸运的话,这一切都可以在用户代码中完成,这些代码只需在常规的R3解释器上运行,而不需要对主机代码进行调整。所以消息不一定是那么糟糕。

现在尝试回答您的第一个问题:视情况而定。

这真的取决于你正在尝试做什么,以及你是如何设置的。CGI有每次启动进程的开销,所以只有当进程启动开销明显小于请求的其余开销(例如,文件系统或数据库访问)时,它才是快速的。Rebol,特别是R2,有大量的进程启动开销,因为它是一个解释器,在启动时有一些内置的解释代码要加载。您可以通过使用SDK创建仅包含所需代码的应用程序来最小化启动开销,但在您的特定情况下(不知道您要做什么),这可能仍然没有足够的帮助。

FastCGI是一种通过运行进程外应用服务器而不是每个请求启动一个新进程来消除进程启动开销的方法。对于像Rebol这样具有显著进程启动开销的应用程序来说,节省的时间也同样显著。

您需要考虑的一件事是,R2在很大程度上是每进程一个线程的模型,因此,如果您希望处理多个并发请求,则必须在同一进程(如Node.js)中分部分处理,或者让FastCGI分配多个服务器进程来单独处理多个请求,或者两者兼而有之。如果前景令人畏惧,一定要向Rebol专家请教,或者只是设置FastCGI来启动更多的应用程序服务器,以便同时运行。

因此,使用FastCGI设置每秒可以处理多少请求取决于您如何配置FastCGI、如何编写FastCGI处理程序代码,以及您的请求正在做多少工作和做什么类型的工作。

这说明你在CGI模式下每秒会收到4-5个请求。这是非常慢的。在最坏的情况下,Rebol的启动开销并不是那么慢。这意味着您的请求正在做很多事情,或者您没有足够的RAM来同时运行两个以上的CGI进程,或者您的CGI配置不当。我不确定在这种情况下,FastCGI是否能像使用更好的硬件或更好地配置Apache一样有帮助。尽管如此,请确保您有足够的FastCGI工作进程,并编写处理程序来同时处理多个请求,这样就可以尽可能地节省开销。

祝好运!

票数 5
EN

Stack Overflow用户

发布于 2013-03-04 01:17:12

当我们不知道您试图运行的脚本时,很难回答任何性能问题。:-)下面的一些问题可能看起来很愚蠢,但我真的不太了解你尝试Rebol CGI的背景。

对于运行在Apache下的CGI应用来说,每秒4-5个请求是不正常的。我可以向你保证,对于任何一种使用了十年的硬件,你都应该得到更多。

你在做什么样的测试?对我来说,rebol启动得如此之快,以至于它可以在刷新之间打开、显示控制台和退出(以60 it的频率),所以我甚至看不到它的出现。

也许您的代码的某一小部分(或您使用的库)有延迟或小的等待(给DB服务器带来了一些网络延迟)。

另外,您是否测试过服务器的传出网络速度?

您还可以尝试使用cheyenne,这是一个使用Rebol构建的Web服务器,它能够每秒处理数百个请求,而脚本本身显然不会占用太多时间。

事实上,夏延和阿帕奇应该能够相对容易地饱和你的服务器的网络速度……如果您有冗长的脚本,并且需要更多的吞吐量,那么只需添加更多的工作线程,就可以拥有更多的并行任务(只要内存使用在可接受的范围内)

票数 4
EN

Stack Overflow用户

发布于 2013-03-12 05:36:35

如果你在同一台机器上使用Ruby可以获得约30 rps的性能,并且在Windows机器上使用Ruby和Rebol的性能相同,那么很可能是你的Rebol CGI和/或配置出了问题。

尝试在循环中从命令行运行您的Rebol CGI脚本,以查看速度缓慢的原因是脚本还是您的Apache配置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15179595

复制
相关文章

相似问题

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