Windows和Linux中的IO性能

时间:2012-12-22 11:17:01

标签: linux io

我们希望构建一个Web服务来返回一些图像(例如谷歌地图图块)。

源数据被组织为esri compact cache format,我们服务的关键是从包中读取切片。

我不确定如何选择平台,Windows或Linux?

据说linux有一个下注IO的读/写性能而不是windows。

然而,如果我们选择linux,java是我们唯一的选择,所以我想知道是否有任何我们应该知道的点来提高linux中的IO读取性能?

PS:

在winodws平台中,我们将使用c#构建基于.net4的服务,并使用iis部署服务。

在linux中,我们将使用java构建服务(可能基于spring mvc或其他一些mvc框架),并使用tomcat部署服务。

更新

我们可能在以下不同的折叠中包含以下源压缩文件:

L1
    RxxCxx.bundle
    RxxCxx.bundlx
L2
    RxxCxx.bundle
    RxxCxx.bundlx

来自客户的请求可能如下所示:

http://ourserver/maptile?row=123&col=234&level=1.png

对于此请求,我们将进入折叠L1,因为级别为1,然后首先读取RxxCxx.bundlx文件,因为此文件是元数据,直到告诉我们用于渲染图像(RxxCxx.bundle)的数据的位置(row=123&col=234中的偏移和长度),然后我们将根据偏移和长度读取RxxCxx.bundle。然后我们通过将数据写入响应并将内容类型设置为" image / png"将数据呈现给图像。或其他什么。

这是处理请求的整个过程。

然后我想知道是否有任何文件或存在的演示可以告诉我如何处理这些类型的IO读取?

2 个答案:

答案 0 :(得分:6)

  

您的环境中必须安装Windows服务器的唯一情况是您选择MS SQL Server DBMS(它几乎是Sybase但更便宜),在这种情况下,数据库和* nix服务器都有Windows框对于中间层。

在许多情况下可以使用Windows。从声明“必须拥有Windows”开始,揭示了现有的偏见,然后是许多毫无根据的陈述。但至少你清楚地认识到这一点。

  

Java是毫秒级中间件的最佳技术,主要用于成熟的标准化开源技术。从编码(Eclipse,NetBeans,Idea)到手动(ant,maven)和自动(teamcity,hudson / jenkins)构建,测试,静态代码分析都在那里,是标准化的,是开源的,并且由数百万支持规模社区。

我认为有必要说Visual Studio / C#(因为OP作为替代方案提到)提供了上面提到的所有内容,但开源除外。也就是说,.NET Framework(或.NET Core)现在是开源的。获取信息here。基于您的上述评论,我想我可以得出结论,通过开源社区可以获得唯一可行的解​​决方案。

引用我曾经听说过这有很多道理:“只有你的时间毫无价值才会免费。”

此外,计算整个开源社区是一个虚假的论点。您必须使用一个开发工具/ API并将社区支持与另一个进行比较。例如,将Visual Studio的社区大小/质量与Eclipse的大小/质量进行比较。或者.NET Framework与Java的结合。

顺便说一下,我没有比使用Visual Studio / Windows更好的智能感知实现。当Eclipse工作时,您依赖于您引用的开源库的质量,这些库具有任何有意义的功能。我发现.NET Framework需要比Java更少的第三方库来实现相同的目标。

  

Linux是性能,稳定性,易维护性,开发环境质量的最佳服务器端平台 - 基于命令行的极其强大的IDE。您可以从Linux服务器获得多个正常运行时间,但不能从Windows运行。

我们有许多Windows服务器运行处理“大数据”的服务,自2014年5月30日(近一年)以来系统正常运行,并且自2013年以来还有几个不间断运行。我们唯一一次遇到正常运行时间问题是硬件老化/失败或我们编写的应用层软件包含错误。

  

Tomcat / Servlet(或Jetty / Servlet)是许多金融机构中的经典产业组合,其中稳定性是首要任务。

还使用了IIS:job posting for IIS developer at financial institution

  

最后,IO性能问题:高质量的用户空间非阻塞IO代码将是CPU和硬件带宽限制,因此OS不会是决定因素。虽然像中断亲和力,线程固定,明智的实时调优,内核旁路等奇特的东西,我相信在Linux上更容易做到。

这些变量中的大多数都是由每个操作系统定义的。听起来你对线程有很多经验,但我也认为开发人员可以在两个环境中轻松地在应用层进行优化。更改线程优先级,实现自定义线程池,配置BIOS等也都可以在Windows世界中使用。除非您想要自定义Unix / Linux允许的内核,否则您必须支持自己的Unix / Linux自定义构建。

我认为商业软件不应该被诋毁或避免使用开源作为规则。

答案 1 :(得分:4)

我理解这可能听起来毫无根据,但除非你必须使用Windows,否则请使用* nix。在您的环境中必须安装Windows服务器的唯一情况是您选择MS SQL Server DBMS(它几乎是Sybase但更便宜),在这种情况下,数据库的Windows框和中间层的* nix服务器

Java 是毫秒级中间件的最佳技术,主要针对可用的成熟的标准化开源技术。从编码(Eclipse,NetBeans,Idea)到手动(ant,maven)和自动(teamcity,hudson / jenkins)构建,测试,静态代码分析都在那里,是标准化的,是开源的,并且由数百万支持规模社区。

Linux 是性能,稳定性,易维护性,开发环境质量的最佳服务器端平台 - 基于命令行的极其强大的IDE。您可以从Linux服务器获得多个正常运行时间,但不能从Windows运行。

Tomcat / Servlet (或Jetty / Servlet)是许多金融机构中的经典产业组合,其中稳定性是首要任务。

最后,IO性能问题:高质量的用户空间非阻塞IO代码将是CPU和硬件带宽限制,因此OS不会成为决定因素。虽然像中断亲和力,线程固定,明智的实时调优,内核旁路等奇特的东西,我相信在Linux上更容易做到。