我应该为我的高性能Web服务选择哪种编程语言?

16 architecture performance programming-languages web-services scalability

我正在为我的应用程序构建Web服务API.此外,我计划通过REST和SOAP公开服务.

我有兴趣从社区获得一些关于我应该选择哪种编程语言来实现服务的反馈?(我知道C#,Java和Ruby - RoR足以创建服务).

该服务主要是HTTP POST服务.它需要处理大约2000个并发连接,并且每秒能够处理大约10,000个HTTP POST.(对于SOAP,我们将有一个提交方法供客户端调用).

对于POST请求,该服务不会向客户端返回任何响应.

有关应该使用哪种编程语言/架构的想法?

Rex*_*x M 50

每秒10,000个请求是每月250亿次点击.这意味着以下两件事之一:

  1. 您的应用程序比MySpace更受欢迎; 要么
  2. 您正在尝试使用它来在您控制的两个非常繁琐的组件之间进行通信,这是一个糟糕的可怕设计选择.

单独交换硬件以在网络前端的农场中分配大量负载将花费数千美元.

首先编写一个可以处理每秒50个请求的Web服务(语言选择不是很重要).如果您的应用程序非常繁忙以至于您经常跨越该阈值,您可以聘请某人全职处理扩展问题,而无需在免费的问答网站上寻求帮助.

  • 查克诺里斯不接受请求; 他发了命令. (24认同)
  • 我认为他的问题的关键在于确定哪种语言对于如此高容量的服务可能更好(答案可能是无关紧要,硬件将是一个更大的问题).无论哪种方式,都不需要在你的答案Rex中嗤之以鼻. (23认同)
  • Jon Skeet可以. (13认同)
  • 查克诺里斯不接受请求; 他把它们从你身上撕下来. (2认同)
  • 虽然我同意这是正确的答案,但我不同意每秒10,000 reqs =每月250亿次点击的分析.如果这是稳定状态,每秒10,000 reqs意味着每月有很多次点击,但可能是OP计划达到峰值不稳定状态.答案很好. (2认同)
  • 类!阅读http://www.kegel.com/c10k.html :)单个商品机器上每秒10000个请求已经存在至少10年了!今天的硬件我们当然可以做得更好! (2认同)
  • 有些情况下,您可以在很短的时间内获得10K请求,例如实时投票系统.99%几乎没有流量. (2认同)

pi.*_*pi. 27

根据我以前的经验,我可以给你以下建议.

  1. 选择你最喜欢的语言(可能还有其他团队成员).我更喜欢更高级别的语言,因为硬件快速且便宜,但程序员速度慢而且价格昂贵.
  2. 将您的服务设计为绝对无状态(无会话!).这样可以轻松添加新硬件,因为您的服务的不同实例不需要彼此了解.
  3. 异步处理您的处理,幸运的是不需要给客户端任何响应(除了OK).如果您同步执行此操作,您的流程将会阻止,您的请求率将会下降.这篇维基百科的文章很好读,特别是(经典!)C10K问题.
  4. 将服务放在许多机器上.(取决于您的服务速度)
  5. 将数据库服务器放在除Web服务之外的其他计算机上.使用快速磁盘!
  6. 通过以下方式平衡负载来处理负载:
    • Linux Virtual Server,性能最高的解决方案,因为它在内核中运行.像疯了一样的秤.我使用它2003年,在P3/1GHz上具有~500req/sec,CPU负载为0.1%.可以配对实现HA.应该在一台机器上很好地处理10000req/sec.在尝试更简单的事情之后这样做.这可能非常具有挑战性.更新2018:现在它已集成到主线内核中,因此所有发行版都应该将其作为包.
    • Nginx,易于配置,性能非常高.可以做SSL.也可以充当HTTP服务器,可能是您的服务的高性能托管解决方案.
    • Varnish,一个可以处理多个后端的HTTP缓存.非常可配置但无法执行SSL,因此如果要加密流量,则需要在其前面使用Nginx.
    • ,非常容易设置,但开销很高.好起点.可以做SSL.项目自2011年以来已经死
    • Perlbal,没有使用它,但听到了好东西.项目自2013年以来死亡.
    • 或其他反向代理.


Jas*_*son 13

每秒10,000个帖子,语言是您最不担心的.更大的问题是您的服务器场和网络的设计.我假设你不打算在一个盒子上运行它?


the*_*mue 11

高度可扩展的应用程序,可靠,分布式和使用多核/多处理器系统?在这里,我立即将Erlang/OTP与Yaws一起视为Web应用程序服务器.雅司在极高负荷下运行极其稳定和快速.Erlang/OTP作为平台,旨在实现并发和分发,以及一些有助于开发稳定软件的机制.成本:使用函数式编程语言的并发性方向不是使用Java或C#的OOP,语法看起来很奇怪(但是一旦你采用它就非常直接和强大),并且第三方库的数量不是很大至于主流语言.但这是值得的.

希望这可以帮助

MUE


Ada*_*vis 5

按照这个速度,既然你无论如何都要打破HTTP(没有响应),你也可以开发自己的服务器,或修改开源服务器.

用C或C++全部写出来,你会尽可能快地开始.

但是,可伸缩性受到的不仅仅是语言选择的影响.

-亚当


Not*_*tMe 5

我可以看到每月从一台机器上获得十亿个帖子。我有一个用 C# 编写的 Web 服务,目前每天处理大约 350 万个帖子。Web 服务器以 3% 的 CPU 利用率运行。这意味着我可以用至少 20 倍的力气......

假设您的每台机器都有 4 个 Xeon 6 核、32GB RAM、一个快速磁盘阵列和一个高度优化的写入数据库,您就可以做到这一点。尽管如此,每台服务器的成本可能在 35,000 美元到 40,000 美元之间。

无论如何,您的瓶颈不会是 C# 或 Java。它将与数据库服务器一起取决于它增长的大小。就我而言,每天大约有 300GB,其中删除 10GB,添加 10GB。