问题标签 [c10k]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2792 浏览

java - 用Java编写高性能服务器阅读资料

谁能介绍我应该阅读的书籍/论文/文章如果我想用Java编写一个高性能的RPC服务器,它可以处理大量并发连接(C10K或以上),具有容错性,可以横向扩展,并保持高吞吐量?谢谢!

0 投票
3 回答
10090 浏览

apache - 阿帕奇和 c10k

Apache 在正常情况下如何处理c10k 问题?比如说在运行数据很少的非常小的脚本时,或者如果我使用 Apache 是否需要横向扩展?

在后台,一些繁重的工作是由一些运行专门软件来处理请求的服务器完成的,但我想使用 Apache 作为前端。这是一个可行的计划吗?

0 投票
6 回答
6785 浏览

python - 用 Python 编写基于套接字的服务器,推荐的策略?

我最近正在阅读这篇文档,其中列出了一些可用于实现套接字服务器的策略。即,它们是:

  1. 每个线程为多个客户端提供服务,并使用非阻塞 I/O 和级别触发的就绪通知
  2. 每个线程为多个客户端提供服务,并使用非阻塞 I/O 和就绪更改通知
  3. 每个服务器线程为多个客户端提供服务,并使用异步 I/O
  4. 使用每个服务器线程为一个客户端提供服务,并使用阻塞 I/O
  5. 将服务器代码构建到内核中

现在,我会很感激在 CPython中应该使用哪个提示,我们知道它有一些优点,也有一些缺点。我最感兴趣的是高并发下的性能,是的,当前的一些实现太慢了。

因此,如果我可以从简单的开始,“5”就出来了,因为我不会将任何东西侵入内核。

“4” 看起来它也因为 GIL 而必须出局。当然,您可以在这里使用多处理来代替线程,这确实会带来显着的提升。阻塞 IO 还具有更容易理解的优点。

在这里,我的知识有所减弱:

“1”是传统的选择或轮询,可以简单地与多处理结合。

"2" 是准备更改通知,由较新的 epoll 和 kqueue 使用

“3”我不确定是否有任何具有 Python 包装器的内核实现。

因此,在 Python 中,我们有很多很棒的工具,比如 Twisted。也许它们是一种更好的方法,尽管我已经对 Twisted 进行了基准测试,发现它在多处理器机器上太慢了。我不知道,也许用负载平衡器进行 4 次扭曲可能会做到这一点。任何意见,将不胜感激。

0 投票
9 回答
2087 浏览

performance - Web 服务器的理论性能限制是多少?

在当前部署的 Web 服务器中,其性能的典型限制是什么?

我相信一个有意义的答案是每秒 100、1,000、10,000、100,000 或 1,000,000 个请求中的一个,但今天这是真的吗?5年前哪个是真的?5年后我们可以期待什么?(即带宽、磁盘性能、CPU 性能等趋势如何影响答案)

如果它很重要,则应考虑 HTTP over TCP 是访问协议这一事实。操作系统、服务器语言和文件系统效果应该被认为是最好的。

假设磁盘包含许多静态服务的小型唯一文件。我打算消除内存缓存的影响,而 CPU 时间主要用于组装网络/协议信息。这些假设旨在将答案偏向“最坏情况”估计,其中请求需要一些带宽、一些 cpu 时间和磁盘访问。

我只是在寻找精确到一个数量级左右的东西。

0 投票
9 回答
8484 浏览

java - Java Socket 编程不适用于 10,000 个客户端

我可以创建多个线程来支持套接字编程中的多客户端功能;这工作正常。但是如果要连接 10,000 个客户端,我的服务器无法创建这么多线程。

如何管理线程以便我可以同时收听所有这些客户端?

另外,如果在这种情况下,服务器想要向特定客户端发送一些东西,那怎么可能呢?

0 投票
3 回答
796 浏览

linux - 用于创建高性能服务器应用程序的库

我记得找到了一个 C++(或者可能是纯 C)库,它执行线程池、套接字轮询和其他东西,需要在 Linux 上编写高性能服务器。(而且这个库本身不是Boost ——但可能是它使用了 Boost。)

像往常一样,我不记得图书馆的名字了。有什么猜测吗?

更新:不是 ACE

0 投票
6 回答
3336 浏览

c - 如何在现代多核/多套接字机器上扩展 TCP 侦听器

我有一个用 C 语言编写的守护进程,它需要同时处理 20-150K 的 TCP 连接。它们是长期运行的连接,很少会断开。它们在任何给定时间传输的数据量都非常少(甚至很少超过 MTU。这是一种刺激/响应协议),但对它们的响应时间至关重要。我想知道当前的 UNIX 社区使用什么来获取大量套接字,并最大限度地减少它们的响应延迟。我已经看到围绕多路复用连接到分叉工作池、线程(每个连接)、静态大小的线程池的设计。有什么建议么?

0 投票
4 回答
4142 浏览

linux - 一台 linux 机器可以有多少个打开的 udp 或 tcp/ip 连接?

可用内存、带宽、CPU,当然还有网络连接都存在限制。但这些通常可以垂直缩放。linux上还有其他限制因素吗?可以在不修改内核的情况下克服它们吗?我怀疑,如果不出意外,限制因素将成为千兆以太网。但是对于高效的协议,它可能需要 50K 并发连接才能淹没它。在我达到那么高之前会不会有其他东西破裂?

我在想我想要一个软件 udp 和/或 tcp/ip 负载平衡器。不幸的是,除了 http 协议之外,开源社区中似乎不存在类似的东西。但是使用 epoll 编写一个并不超出我的能力范围。我希望它会经过大量调整以使其规模化,但这是可以逐步完成的工作,我会成为一个更好的程序员。

0 投票
2 回答
304 浏览

apache - 提供大量图像的软件/系统?

在我们的高峰时段,我们需要提供大约 250/rps 的服务。我们正在做的是接受图像的 url,将图像从内存缓存中拉出,并通过 Apache 返回。

我们目前的系统是双核机器,内存为 4GB:2GB 用于 memcache 中的图像,2GB 用于 Apache;但是我们在高峰期看到了非常高的负载(20-30)。Apache 报告的平均响应时间是每个请求 30-80 毫秒,这对于从内存提供的简单 Apache 请求来说似乎有点慢。

有更好的工具吗?从磁盘提供服务不是一个选项,因为 IO 等待阻碍了它,所以我们将它移到内存中。CDN 是如何做到的?

编辑:嗯,系统是这样工作的。一个请求进来,我们检查一个“队列”,看看我们以前是否见过这个请求,如果我们有我们提供图像(从磁盘......或内存)。如果不是,我们在 memcached 队列中增加该请求的计数器,并且有工作机器实际生成图像,然后将其存储回主服务器。因此,目前当请求进来时,我们正在检查 memcached 数据库是否存在,然后我们将连接到另一个数据库以获取实际的图像数据库。当图像在磁盘上时,我们发现只有 file_exist 函数需要 30 多毫秒才能完成,因此我们将其移至内存。如果我们将图像移动到 ramdisk 会加快 file_exist 的速度,还是我们仍然需要先检查一下是否应该寻找图像?

0 投票
7 回答
4766 浏览

linux - 是否对 10000 个客户端/秒问题的解决方案进行了现代审查

(俗称C10K问题)

是否对c10k问题的解决方案进行了更现代的评论(最后更新:2006 年 9 月 2 日),特别关注 Linux(epoll、signalfd、eventfd、timerfd..)和 libev 或 libevent 等库?

讨论现代 Linux 服务器上所有已解决和仍未解决的问题的东西?