2

我们想构建一个 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

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

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 读取?

4

2 回答 2

6

您必须在您的环境中使用 Windows 服务器的唯一情况是当您选择 MS SQL Server DBMS(它几乎是 Sybase 但更便宜)时,在这种情况下为 DB 使用 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 更少的 3rd 方库来实现相同的目标。

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

我们有许多 Windows 服务器运行处理“大数据”的服务,这些服务自 2014 年 5 月 30 日(近一年)以来一直保持系统正常运行时间,自 2013 年以来还有更多运行时间没有中断。我们遇到正常运行时间问题的唯一时间是硬件老化/故障或我们编写的应用层软件包含错误。

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

也使用IIS:金融机构 IIS 开发人员的职位发布

最后,IO 性能问题:高质量的用户空间非阻塞 IO 代码将受到 CPU 和硬件带宽的限制,因此操作系统不会成为决定因素。虽然像中断关联、线程固定、实时调整、内核绕过等花哨的东西我相信在 Linux 上更容易做到。

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

我不认为商业软件应该被诋毁或避免,而支持开源作为一项规则。

于 2015-04-17T18:23:47.307 回答
5

我知道这听起来可能毫无根据,但除非您必须使用 Windows,否则请使用 *nix。您必须在您的环境中使用 Windows 服务器的唯一情况是当您选择 MS SQL Server DBMS(它几乎是 Sybase 但更便宜)时,在这种情况下为 DB 使用 Windows 机器,为中间层使用 *nix 服务器.

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

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

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

最后,IO 性能问题:高质量的用户空间非阻塞 IO 代码将受到 CPU 和硬件带宽的限制,因此操作系统不是决定因素。虽然像中断关联、线程固定、实时调整、内核绕过等花哨的东西我相信在 Linux 上更容易做到。

于 2012-12-22T11:35:18.007 回答