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

我正在build立一个url缩短的Web应用程序,我想知道最好的架构来做到这一点,以提供快速和可靠的服务。

我想在不同的机器上有两个单独的服务器。

  • 第一台机器将具有应用程序本身的apache,nginx,无论..
  • 第二个将包含数据库。
  • 第三个将负责处理短url请求。

更新

该服务不是一个url缩短。 这样解释就简单多了。

我只需要一台机器接收一个http查询并在数据库中插入一条logging。 而且我需要这台机器以非常有效的方式完成这个简单的任务。 该系统将运行在Linux上(我不知道发行版),我完全开放任何语言或技术。 我正在考虑使用Yaws,Tornado或Snap来处理这个服务,但是我还不知道该计划那个部分的架构。 数据库将build立在Hadoop上。

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

你真的觉得还需要另一个URL缩短吗? 他们中间只有很多人,除非你偶然得到一个非常短暂和适当的域名,我不认为你的网站会被任何人注意到。 当然,只有我的两分钱。

无论如何,技术部分:

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

甚至不知道这一点很难回答你的问题。

唯一的答案就是“避免像瘟疫一样的Java”。 Java应用程序服务器对于许多应用程序来说是矫枉过正的,对于这样一个简单的应用程序来说肯定会过度。

我会在这里为Linux / Apache / MySQL / PHP …当然, 如果我能想到任何好的理由甚至开始这个项目。


编辑:

好的,现在它更有意义了。 但build议尽可能简单, 然后担心扩大规模仍然有效。 如果你的应用程序真的很简单,任何体面的Web服务器/语言/数据库组合应该能够在现代硬件上每秒处理大量的请求(但我强烈build议避免使用Java)。

如果性能是最重要的,我会用一个用C语言编写的CGI应用程序。 将是最快的解决scheme,比任何解释或VM语言快几个数量级; 并做它简单的插入和select到数据库应该不是那么难。 但是我认为LAMP足够满足您的需求…他们实际上在上面运行Facebook ,您知道吗?

这些只是logging数据,还是会发回一些有趣的东西呢? 如果他们只是日志logging,那么只需使用apache并将apache日志扔进hadoop。 如果他们不得不返回某种数据,那么我怎么得到他们返回的数据呢,我一点也不清楚。

尽pipe如此,Apache设置为任何请求返回一个静态文件是非常该死的快。

首先,我知道你说这不是一个URL缩短,但如果它是类似的,RDBMS是一个可怕的方式来存储这些数据; 因为任何两个数据之间没有真正的关系,所以你需要一个平坦的存储引擎。 考虑Mongo(或Couch,取决于您的实际解决scheme空间)。

至于你的解决scheme,要小心不成熟的优化 。 有很多方法可以使这个疯狂; 既然你问了,我能想到的最疯狂的办法可能就是启动Varnish,把所有的页面写入VCL,并且连接到后端的memcache来存储和检索相应的数据。 但实际上,除非你处于明显荒谬的状态,否则这就是疯狂的行为