我正在为我的应用程序构建Web服务API。 另外,我计划通过REST和SOAP公开服务。
我有兴趣从社区获得一些关于我应该选择哪种编程语言来实现服务的反馈? (我知道C#,Java和Ruby - RoR足以创建服务)。
该服务主要是HTTP POST服务。 它需要处理大约2000个并发连接,并且每秒能够处理大约10,000个HTTP POST。 (对于SOAP,我们将有一个提交方法供客户端调用)。
对于POST请求,服务不会向客户端返回任何响应。
关于应该使用哪种编程语言/架构的任何想法?
答案 0 :(得分:51)
每秒10,000个请求是每月250亿次点击。这意味着两件事之一:
单独切换硬件以在网络前端群中分配大量负载将花费数千美元。
首先编写一个每秒可处理50个请求的Web服务(语言选择不是很重要)。如果您的应用程序非常繁忙以至于您定期超过该阈值,您可以雇佣某人全职处理扩展问题,而无需在免费的Q& A网站上寻求帮助。
答案 1 :(得分:27)
根据我以前的经验,我可以给你以下建议。
答案 2 :(得分:13)
每秒10,000个帖子,语言是您最不担心的。更大的问题是您的服务器场和网络的设计。我假设你不打算在一个盒子上运行它?
答案 3 :(得分:11)
高度可扩展的应用程序,可靠,分布式以及使用多核/多处理器系统?在这里,我立即将Erlang / OTP与Yaws一起视为Web应用程序服务器。雅司在极高负荷下运行极其稳定和快速。 Erlang / OTP作为平台,旨在实现并发和分发,以及一些有助于开发稳定软件的机制。成本:使用函数式编程语言的并发性方向不是使用Java或C#的OOP,语法看起来很奇怪(但是一旦你采用它就非常直接和强大),并且第三方库的数量不是很大至于主流语言。但这是值得的。
希望这有帮助
mue
答案 4 :(得分:5)
按照这个速度,既然你无论如何都要打破HTTP(没有响应),你也可以开发自己的服务器,或修改开源服务器。
用C或C ++全部写下来,你会尽可能快地开始。
可伸缩性受到的不仅仅是语言选择的影响。
- 亚当
答案 5 :(得分:4)
我可以看到每台机器每月获得10亿个帖子。我有一个用c#编写的Web服务,目前每天处理大约350万个帖子。 Web服务器以3%的CPU利用率运行。这意味着我可以将其推至少20倍......
假设您的每台计算机都有4个Xeon Six核心,32GB RAM,一个快速磁盘阵列和一个高度优化的写入数据库,您可以这样做。虽然,每台服务器的成本可能在35,000美元到40,000美元之间。
无论如何,你的瓶颈不会是C#或Java。数据库服务器取决于它的增长程度。在我的情况下,大约300GB,删除10GB,每天增加10GB。
答案 6 :(得分:3)
让我们看看问题:
IO:这很容易成为系统中最大的瓶颈。选择一种与主机操作系统提供最佳集成的语言,并为非阻塞提供高级语义,并可选择支持并发。
数据:SOAP? XML?您需要最小化任何不必要的cpu周期。简单地使用JSon有什么问题? (而且没有神圣的命令说基于REST架构的服务器不能在协议中使用二进制数据......)
内容:如果涉及任何数据转换(例如从文本转换为数字),您还需要考虑哪种语言提供最有效的机制。作为一个例子,在Java(这是一个非常强大的候选人,顺便说一下),String类是一个严重的CPU占用。
Java和Erlang是非常好的候选人。 C始终是一个选项,但并发编程要困难得多。
答案 7 :(得分:2)
您可以通过CGI(通用网关接口)真正使用任何语言,因此它取决于性能。在您列出的语言中,我希望C#最快。语言速度的良好比较是The Language Shootout
如果您确实需要性能,您可能需要朝着更加性能导向的语言(如C或D)的方向来处理请求。
这完全取决于每个请求必须执行的计算类型。
答案 8 :(得分:0)
更新:它意味着一场火灾,忘记了网络服务。我想我会发回一个简单的HTTP 200 / OK响应
不,这不是打算在一个盒子上运行。它打算在几个盒子上运行(比如3-4)。
当收到请求时,它们被推送到其他机器上的队列,然后被带到HBase / Voldemort商店。
正如我所说,它意味着成为一个“即发即忘”的网络服务
答案 9 :(得分:0)
你需要一个C llike语言,并避免编写一个完整的服务器,我会建议CGI(这是什么PHP等都贯穿始终) Windows服务器提供ISAPI插件,但这些插件在服务器的上下文中运行,因此内存泄漏,GPF将关闭服务器。再加上每次更改内容时停止/启动服务器的不便,CGI / FastCGI看起来更好。