我正在为我的应用程序构建Web服务API.此外,我计划通过REST和SOAP公开服务.
我有兴趣从社区获得一些关于我应该选择哪种编程语言来实现服务的反馈?(我知道C#,Java和Ruby - RoR足以创建服务).
该服务主要是HTTP POST服务.它需要处理大约2000个并发连接,并且每秒能够处理大约10,000个HTTP POST.(对于SOAP,我们将有一个提交方法供客户端调用).
对于POST请求,该服务不会向客户端返回任何响应.
有关应该使用哪种编程语言/架构的想法?
每秒10,000个请求是每月250亿次点击.这意味着以下两件事之一:
您的应用程序比MySpace更受欢迎; 要么
您正在尝试使用它来在您控制的两个非常繁琐的组件之间进行通信,这是一个糟糕的可怕设计选择.
单独交换硬件以在网络前端的农场中分配大量负载将花费数千美元.
首先编写一个可以处理每秒50个请求的Web服务(语言选择不是很重要).如果您的应用程序非常繁忙以至于您经常跨越该阈值,您可以聘请某人全职处理扩展问题,而无需在免费的问答网站上寻求帮助.
根据我以前的经验,我可以给你以下建议.
选择你最喜欢的语言(可能还有其他团队成员).我更喜欢更高级别的语言,因为硬件快速且便宜,但程序员速度慢而且价格昂贵.
将您的服务设计为绝对无状态(无会话!).这样可以轻松添加新硬件,因为您的服务的不同实例不需要彼此了解.
异步处理您的处理,幸运的是不需要给客户端任何响应(除了OK).如果您同步执行此操作,您的流程将会阻止,您的请求率将会下降.这篇维基百科的文章很好读,特别是(经典!)C10K问题.
将服务放在许多机器上.(取决于您的服务速度)
将数据库服务器放在除Web服务之外的其他计算机上.使用快速磁盘!
通过以下方式平衡负载来处理负载:
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年以来死亡.
或其他反向代理.
每秒10,000个帖子,语言是您最不担心的.更大的问题是您的服务器场和网络的设计.我假设你不打算在一个盒子上运行它?
高度可扩展的应用程序,可靠,分布式和使用多核/多处理器系统?在这里,我立即将Erlang/OTP与Yaws一起视为Web应用程序服务器.雅司在极高负荷下运行极其稳定和快速.Erlang/OTP作为平台,旨在实现并发和分发,以及一些有助于开发稳定软件的机制.成本:使用函数式编程语言的并发性方向不是使用Java或C#的OOP,语法看起来很奇怪(但是一旦你采用它就非常直接和强大),并且第三方库的数量不是很大至于主流语言.但这是值得的.
希望这可以帮助
MUE
按照这个速度,既然你无论如何都要打破HTTP(没有响应),你也可以开发自己的服务器,或修改开源服务器.
用C或C++全部写出来,你会尽可能快地开始.
但是,可伸缩性受到的不仅仅是语言选择的影响.
-亚当