Windows和Linux中的IO性能

hgu*_*ser 2 linux io

我们想要构建一个Web服务来返回一些图像(比如谷歌地图图块).

并且源数据被组织为esri 紧凑缓存格式,我们服务的关键是从包中读取切片.

我不知道如何选择平台,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
Run Code Online (Sandbox Code Playgroud)

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

http://ourserver/maptile?row=123&col=234&level=1.png
Run Code Online (Sandbox Code Playgroud)

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

这是一个处理请求的整体过程.

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

小智 6

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

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

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

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

引用我曾经听说过有很多道理:"如果你的时间毫无价值,这只是免费的."

此外,计算整个开源社区是一个虚假的论点.您必须使用一个开发工具/ 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也被使用:为金融机构的IIS开发人员发布招聘信息

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

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

我不认为商业软件应该受到诽谤或避免支持开源作为一项规则.


bob*_*bah 5

我知道这听起来像是毫无根据的声明,但是除非需要使用Windows,否则请使用* nix。唯一需要在环境中安装Windows服务器的情况是,选择MS SQL Server DBMS(它几乎是Sybase,但是更便宜一些),在这种情况下,Windows框用于DB,* nix服务器用于中间层。

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

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

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

最后,有关IO性能的问题:高质量的用户空间无阻塞IO代码将受CPU和硬件带宽的限制,因此OS不会成为决定因素。尽管我喜欢在Linux上更轻松地进行一些事情,例如中断亲和力,线程固定,知情的实时调整,内核绕过。