【问题标题】:Client-server what is the limitation of server's processes run time?客户端-服务器服务器进程运行时间的限制是什么?
【发布时间】:2016-06-09 01:08:57
【问题描述】:
我有一个特定的程序,它接收输入并返回运行时间约为 2 秒的输出,
现在,我想在可以处理多个连接(假设最多 100k)的服务器上在线运行这个程序,
在程序将启动的每个客户端-服务器会话上,
客户端会将程序的输入交给服务器,并等待程序结束以接收服务器的响应(程序的输出),
假设服务器的主机是一台非常强大的机器 - 例如 16 核,
这可以工作还是每个客户端的运行时间都太多了?
这种程序的最大运行时间是多少?
【问题讨论】:
标签:
web-services
web
client
client-server
webclient
【解决方案1】:
我将其发布为答案,因为它太大而无法作为评论放置。
这行得通吗?这取决于。这取决于,因为这个问题有很多变数。让我们看看其中的一些:
- 您说计算结果需要 2 秒。这些秒在哪里以及如何度过的?这是纯粹的计算,还是您正在访问数据库或文件系统?这是 CPU 限制还是 I/O 限制?如果您运行整整 2 秒的计算,那么您正在消耗 CPU,这意味着您只能同时为 16 个客户端提供服务,每个内核一个。你在打数据库吗?这是在强大的服务器上还是在其他机器上?如果数据库是瓶颈,请将其移至功能强大的服务器并在其上安装 SSD 驱动器。
- 您能否改进对一位客户的处理?什么更有效,在一个核心上进行处理或将其分布在所有核心上?如果可以并行化,是否可以限制线程争用?
- 你只需要CPU吗?内存呢?您访问的任何后端服务?那些是通过网络的吗?你有足够的带宽吗?
- 与内存有关,您使用的是什么语言/平台?它有垃圾收集器吗?您是否生成大量对象来计算结果? GC 是否启动并暂停您的应用程序以便清理和压缩内存?您是否为应用程序运行分配了足够的内存?
- 您可以缓存响应并将其提供给其他客户端还是自定义响应给每个客户端?您可以预先计算结果,然后将它们提供给客户,还是不能预测输入?
- 您是否尝试过运行一些性能测试并分析应用程序以查看热点可能出现的位置?你能对他们做点什么吗?
- 您有任何强加的性能标准吗?您想同时支持多少客户? 2秒太多了吗?客户可以忍受更多吗?还有多少?多少秒意味着不可接受的响应时间?
- 您需要大型服务器来运行此设置还是较小的服务器效果更好(即水平扩展而不是垂直扩展)?
- 等
没有人可以为您回答这个问题。您必须对您的应用程序进行分析、运行一些测试、对其进行分析、优化,然后重复进行,直到您对结果感到满意为止。