lin*_*ked 16 nginx scaling high-volume redis
我正在构建一个分析包,项目要求指出我每天需要支持 10 亿次点击。是的,“亿”。换句话说,每秒持续不少于 12,000 次点击,并且最好有爆发的空间。我知道为此我需要多台服务器,但我试图在“向其投入更多硬件”之前从每个节点中获得最大性能。
现在,我已经完成了点击跟踪部分,并进行了很好的优化。我几乎只是将请求直接保存到 Redis 中(以便以后使用 Hadoop 进行处理)。该应用程序是 Python/Django,带有用于网关的 gunicorn。
我的 2GB Ubuntu 10.04 Rackspace 服务器(不是生产机器)每秒可以处理大约 1200 个静态文件(使用 Apache AB 对单个静态资产进行基准测试)。相比之下,如果我用我的跟踪链接替换静态文件链接,我仍然每秒收到大约 600 个请求——我认为这意味着我的跟踪器得到了很好的优化,因为它只比提供相同的静态资产慢 2 倍反复。
然而,当我对数百万次点击进行基准测试时,我注意到一些事情——
我的问题——
一种。看起来我已经把这台服务器最大化了吗?1,200/s 静态文件 nginx 性能与其他人经历过的性能相当吗?
湾 对于此类大容量应用程序,是否有常见的 nginx 调优?我将工作线程设置为 64,将 gunicorn 工作线程设置为 8,但调整这些值似乎对我没有多大帮助或伤害。
C。是否有任何 linux 级别的设置可能会限制我的传入连接?
d. 在长时间运行的测试中,什么会导致我的性能下降到 250r/s?同样,在这些测试期间内存没有最大化,并且硬盘使用为零。
提前致谢,所有:)
编辑 这是我的 nginx 配置——http: //pastie.org/1450749——它主要是香草,明显的脂肪被修剪掉了。
你在滥用 Nginx 的 worker_threads。绝对没有必要运行那么多工人。您应该运行与 CPU 一样多的工作程序,并称其为一天。如果您在同一台服务器上运行 gunicorn,您可能应该将 nginx worker 限制为两个。否则,您只需要用管理所有这些进程所需的所有上下文切换来处理 CPU。
归档时间: |
|
查看次数: |
17722 次 |
最近记录: |