超级简单的高性能 http 服务器

超级简单的高性能 http 服务器

我正在构建一个 URL 缩短器 Web 应用程序,我想知道最佳的架构来提供快速可靠的服务。

我希望在不同的机器上拥有两项独立的服务。

  • 第一台机器将拥有应用程序本身、apache、nginx 等等。
  • 第二个将包含数据库。
  • 第三个是负责处理短网址申请的。

更新

该服务根本不是网址缩短器。这样解释会比较容易。

我只需要一台机器来接收一个 http 查询并在数据库中插入一条记录。我需要这台机器以非常高效的方式完成这个简单的任务。该系统将在 Linux 上运行(我还不知道发行版),我对任何语言或技术都持完全开放态度。我曾考虑使用 Yaws、Tornado 或 Snap 来提供这项服务,但我还不知道,现在是时候规划这部分的架构了。数据库将建立在 Hadoop 上。

对于第三台机器,我只需要接受一种 http 请求(GET www.domain.com/shorturl),但它必须非常快地执行并且应该足够稳定。

答案1

你真的认为还需要另一个 URL 缩短器吗?很多周围有很多这样的网站...除非你碰巧获得了一个非常简短且合适的域名,否则我认为你的网站不会被任何人注意到。当然,这只是我个人的看法。

无论如何,回到技术部分:

  • 您要用什么语言编写您的应用程序?
  • 您计划在哪种操作系统上运行它?
  • 您将使用免费软件还是商业软件?

如果不知道这一点就很难回答你的问题。

这里唯一有意义的答案是“像躲避瘟疫一样躲避 Java”。Java 应用服务器对于许多应用程序来说都是大材小用,对于这样一个简单的应用程序来说肯定是大材小用。

我会选择 Linux/Apache/MySQL/PHP...如果当然,我可以想到任何好的理由来启动这个项目。


编辑:

好的,现在有点道理了;但建议从尽可能简单的开始,然后担心扩展仍然是合理的。如果你的应用程序真的那么简单,任何像样的 Web 服务器/语言/数据库组合都应该能够处理很多在现代硬件上每秒的请求数(但我仍然强烈建议避免使用 Java)。

如果性能是最重要的,我会选择用 C 编写的 CGI 应用程序;将是最快的解决方案,比任何解释型或虚拟机语言都要快几个数量级;并且让它对数据库进行简单的 INSERT 和 SELECT 操作不应该所以很难。但我认为 LAMP 足以满足您的需求……它们实际上运行Facebook你知道吗?

答案2

这些只是记录数据,还是它们也返回一些有趣的东西?如果它们只是记录,那么只需使用 apache 并将 apache 日志发送到 Hadoop 即可。如果它们必须返回某种数据,那么我完全不清楚它们如何获取它们返回的数据。

尽管如此,apache 设置为对任何请求仅返回静态文件,速度还是相当快的。

答案3

首先,我知道您说它不是 URL 缩短器,但如果它与 URL 缩短器类似,那么 RDBMS 就是一种糟糕的数据存储方式;由于任何两部分数据之间没有真正的关系,因此您需要一个平面存储引擎。考虑 Mongo(或 Couch,取决于您的实际解决方案空间)。

至于你的解决方案,要小心过早优化。有很多方法可以实现这一点;既然你问了,我能想到的最疯狂的方法可能是启动 Varnish,将所有页面写入 VCL,并让它连接到后端的 memcache 以存储和检索相应的数据。但实际上,这是疯子除非你承受着明显荒谬的负担,否则你会发疯。

相关内容