标签: scalability

如何解决linux子目录数量限制?

我有一个网站,可以存储用户个人资料图片。每个图像都存储在用户特定的目录 (Linux) 中。目前我有 30 多个客户群,这意味着我将拥有 30 多个文件夹。但是我当前的 Linux 机器(ext2/ext3)不支持创建超过 32000 个目录。我该如何度过这一关?即使是 YouTube 的人也有同样的问题,视频缩略图。但是他们通过迁移到 ReiserFS 解决了这个问题。我们不能有更好的解决方案吗?

更新:当在 IRC 中询问时,人们询问是否将其升级到 ext4,它有 64k 的限制,当然你甚至可以通过它。或者内核黑客来改变限制。

更新:如何根据用户 ID 范围将用户群拆分为文件夹。意思是一个文件夹中的 1-1000,另一个文件夹中的 1000-2000。这似乎很简单。你说呢,伙计们?

坦白说,就没有其他办法吗?

linux filesystems directory scalability

10
推荐指数
2
解决办法
2万
查看次数

在 2GB RAM E6500 CPU 上优化 apache 每天 10K+ wordpress 浏览量

我在 ubuntu 上有一个带有 apache/php 的专用服务器,为我的 Wordpress 博客提供每天大约 10K+ 的综合浏览量。我在 APC 上安装了 W3TC 插件。

但是服务器时不时地停止响应或变慢,我必须重新启动 apache 才能恢复它。

这是我的配置我做错了什么?

ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
TimeOut 40
KeepAlive on
MaxKeepAliveRequests 200
KeepAliveTimeout 2
<IfModule mpm_prefork_module>
  StartServers 5
  MinSpareServers 5
  MaxSpareServers 8
  ServerLimit        80
  MaxClients         80
  MaxRequestsPerChild 1000
</IfModule>
<IfModule mpm_worker_module>
  StartServers       3
  MinSpareServers    3
  MaxSpareServers    3
  ServerLimit        80
  MaxClients         80
  MaxRequestsPerChild  1000
</IfModule>
<IfModule mpm_event_module>
  StartServers       3
  MinSpareServers    3
  MaxSpareServers    3
  ServerLimit        80
  MaxClients         80
  MaxRequestsPerChild  1000
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP} …
Run Code Online (Sandbox Code Playgroud)

scalability php5 wordpress apache-2.2

10
推荐指数
2
解决办法
2万
查看次数

为超过 64k 个 websocket 扩展 HAProxy

我们正在尝试设计一种能够处理超过 64k 个 websocket 的架构。

我们首先尝试使用 Amazon ELB,但它的设计不允许意外的流量激增或 websocket。(TCP 模式意外超时 websockets)

使用 HAProxy,这些限制不适用,但我们将被限制在 HA 和后端服务器之间维护的 ~64k websockets。

想到的多种解决方案:

  • 多个 HAProxy 实例,使用 DNS 进行负载均衡(Route53 有一个加权选项)
  • 两个带有 Keepalived 的 HAProxy 实例,多个内部 IP 地址(不确定是否可行)

有一个更好的方法吗 ?

domain-name-system scalability load-balancing haproxy websocket

9
推荐指数
1
解决办法
1702
查看次数

自动扩展 MySQL 服务器的方法?

我运行的网站流量激增,因此自动缩放解决方案在这种情况下非常有利可图。目前,Web 服务器能够水平自动扩展,但瓶颈在 MySQL 服务器上。

  • 我曾尝试使用 Amazon RDS 多可用区,但 12 GB 数据库需要 15 分钟才能升级,并且有几分钟的停机时间。当我已经知道在某个特定时刻会发生流量激增时,它有很大帮助。
  • 我也考虑过 Xeround。这可能是最好的解决方案,尽管它对于这种规模的数据库来说非常昂贵。无论如何,这不是一种选择,因为我在法律上需要数据库位于欧盟。
  • 我已经阅读了有关 Scalr 的内容,但不确定这是否有帮助以及如何帮助。
  • 我已经看到许多云托管提供商提供垂直扩展解决方案,我认为它的停机时间为 0(不确定这是否真的可能,据我所知他们使用 Xen 管理程序)。这可能是一个解决方案,但我想知道它是否没有停机以及 MySQL 配置(以及操作系统上的许多其他东西)如何能够在不停机的情况下进行升级。
  • 我曾尝试使用 MySQL 从属服务器,但它根本没有帮助。
  • 我正在使用 memcache,它有很大帮助,但这还不够。我需要因为写入而升级,而不仅仅是因为读取。

有什么建议?先感谢您

mysql scalability scalr amazon-rds

8
推荐指数
1
解决办法
7213
查看次数

如何在我的网络服务器上实现每秒 50 万个请求?

我最近给自己赠送了一台新的专用服务器,我正试图从中榨取最大的性能,以获得乐趣和学习。

我正在尝试实现该服务器每秒可以处理的最大可能请求数,目标是 500K 请求/秒,如此处所述 - http://lowlatencyweb.wordpress.com/2012/03/20/500000-requestssec-modern-http-servers -很快/

服务器详情

英特尔® 至强® E3-1270 4 核 (8 HT) x 3.4 GHz

内存 24 GB DDR3 ECC

硬盘空间 2,000 GB (2 x 2,000 SATA) RAID 软件 RAID 1

局域网 100mbps

操作系统 Centos 6.3 64 位

nginx

对于静态 txt 文件,我只能达到 35K 请求/秒。我在同一台机器上运行基准测试。我知道 NIC 限制和网络开销

ab -n100000 -c200 http://localhost/test.txt
Run Code Online (Sandbox Code Playgroud)

更新- 165K 请求/秒

我尝试了另一个名为的基准测试工具wrk,它给了我 165K 请求/秒。非常酷!

更新 2 - 250K 请求/秒

配置文件

#######################################################################
#
# This is the main Nginx configuration file.
# …
Run Code Online (Sandbox Code Playgroud)

performance nginx scalability web-server performance-tuning

8
推荐指数
3
解决办法
7万
查看次数

在 SMP 系统上使用多队列 NIC 进行多线程处理

数据包如何从网络接口队列调度到 CPU,然后再转发到线程进行处理?在涉及如何跨队列散列数据包、硬件中断与软中断、CPU/内存/应用程序/线程局部性以及多线程与多进程守护进程时,需要考虑什么,以避免尽可能多的数据包重新调度/复制?

我有一个多线程网络守护进程(比如,Unbound 解析器)在 Debian amd64 和 Linux 2.6.32(是的,旧的)上运行 16 个本机线程,因此应用程序负载分布在 16 个 CPU 上。网卡是 bnx2 (BCM5709S),支持 8 个 MSI-X rx/tx 队列。每个队列的 IRQ 通过静态映射 /proc/irq/n/smp_affinity 中的中断亲和性分配给单独的 CPU(irqbalance 从来没有做得很好),队列散列类型(RSS 类型)是默认的(IP src+dst , TCP 运动+dport),使用默认的散列键。

所有这些都有助于分散负载,但并不均匀:通常有一个应用程序线程完成其他线程两倍的工作(=每秒请求数),一个 CPU(可能是处理该特定线程的一个)软中断率是其他线程的两倍CPU。

CPU 启用了超线程,但我还没有做任何事情来在“真实”内核之间分散负载(我真的应该这样做)。

Linux 附带了一个相当全面的网络扩展文档,但我遗漏了一些空白:

该文档是关于 RSS 配置的:

如果设备支持足够的队列,典型的 RSS 配置将是每个 CPU 有一个接收队列,否则每个内存域至少有一个接收队列,其中内存域是一组共享特定内存级别(L1、L2 、NUMA 节点等)。

问:如何确定服务器的 CPU/缓存/内存域配置?

有关接收流控制 (RFS) 的信息似乎回答了我关于将数据包发送到正确的 CPU/线程的一些问题:

RFS 的目标是通过将数据包的内核处理引导到正在运行使用数据包的应用程序线程的 CPU 来提高数据缓存命中率。

Q:在DNS解析的情况下,通常有一个查询包和一个应答包。使用多线程守护进程,是否只有一个线程运行 bind()+recvfrom(),因此在将工作调度到其他线程之前,无论如何必须处理所有新传入的数据包?这个特殊的用例会从分叉操作(每个 CPU 一个进程)中受益吗?

问:那么接收流控制通常最适合多线程 TCP 守护进程吗?

Q:如何确定是多线程还是多进程操作?显然有共享内存和数据结构、资源争用等,但我正在考虑数据包流和应用程序侦听器。

问:如果没有接收流控制,或者使用简单的 UDP 服务,数据包是否会到达“错误”的 CPU,因此会以某种方式重新调度到“正确”的 CPU?这会触发 NET_RX 软中断吗?

Q:网卡队列和CPU之间是否有NET_RX软中断?CPU 和监听线程/进程之间是否也有一个?如果接收线程将数据包调度到工作线程,是否还有另一个可能?

太糟糕了,Ben Hutchings …

linux scalability load-balancing threads linux-kernel

8
推荐指数
0
解决办法
3620
查看次数

postgreSQL vs Cassandra vs MongoDB vs Voldemort?

决定使用哪个数据库?有什么比较吗?

  • 现有:postgresql
  • 问题
    • 不容易横向扩展。需要分片等
    • 聚类不能解决数据增长问题
  • 寻找:任何易于水平扩展的数据库
    • Cassandra(Twitter 使用那个?)
    • MongoDB(迅速普及)
    • 伏地魔
    • 其他?
  • 为什么?
    • 数据随着滚雪球效应增长
    • 现有的 postgresql 定期锁定表等以用于 vaccuum 任务
    • 目前归档数据很潮
    • 现有档案、真空、……过程中定期进行的人工交互
    • 需要一个'设置它。算了吧。只需在数据增长更多时添加另一台服务器。解决方案类型

database scalability database-performance sharding

7
推荐指数
1
解决办法
9694
查看次数

可以使用多个 CPU 内核的 IPSec 软件

谁能推荐一个好的 IPSec 软件,它可以使用多个 CPU 内核Linux 双 CPU 四核 E5620 Xeon设置(总 16HT 内核)上实现~2Gbps 的性能?

我试过 OpenSwan 和 StrongSwan。OpenSwan KLIPS 堆栈仅在单个 CPU 内核上运行。KLIPS+OCF 加密卸载似乎也很糟糕,因为它以 70% 的速度消耗了所有 16 个 CPU 内核,而仅提供了约 600Mbps 的传输速度。作为副产品,它还对 TCP 数据包进行重新排序。

到目前为止,使用不同协议的OpenVPN,我们能够在相同的硬件上实现 ~2Gbps 的负载平衡,没有任何问题。16 个内核中只有 4 个被 100% 使用。现在是时候用 Ipsec 做同样的事情了。最好应该是 OpenSource IPsec 解决方案。

更新:

我的最新发现表明 IPsec NETKEY 堆栈可能能够毫无问题地处理两场流量(但仅限于多队列 NIC)。我无法肯定地验证这一点,因为似乎 NAPI 在高负载下将 NIC 驱动程序切换到轮询模式,那时所有性能从 1.7 Gbps 下降到 500 Mbps。此外,ubuntu 10.04 似乎没有考虑某些内核线程的时间,因此我看不到工作负载如何分布在所有 CPU 内核上。

linux performance scalability ipsec

7
推荐指数
1
解决办法
2996
查看次数

TCP端口耗尽是真的吗?

需要多快分配临时端口才能进入 TCP 端口耗尽状态?

有人告诉我有 ~4k(旧版 Windows)、~16k(新版 Windows)或 ~28k(RH Linux)端口可用于客户端请求。现在,端口号池是全局的还是每个远程 IP 地址?

如果它们是全局的,由于端口在 240 (Windows) 或 60 (RH Linux) 秒后才可重用,因此需要以每秒 ~16/66/466 的速率相应地分配它们?

这样对吗?

根据您的经验,这是我应该担心的事情吗?

scalability port tcp

7
推荐指数
1
解决办法
1万
查看次数

Apache 在生产环境中的 Windows 上?为什么不?

“每个人”都知道 Apache 适用于 Linux/Unix,而在 Windows 上 IIS 是必经之路。

但是,我不是 Linux 专家,如果在生产环境中使用与开发过程中使用的设置相同的设置,那将是一种极大的解脱。我是一名独立开发人员,我正在努力使事情尽可能简单。我已经摆脱了其他问题,例如存储(-> 云)电子邮件(-> 邮戳)。

那么,当我将 Apache 放在来自 Rackspace 的 Windows 虚拟专用服务器中并将其用作PHP 项目的主要生产环境时,可能会发生什么真正的缺点?与不必学习不同操作系统的可能性相比,获得更多 VPS 资源的钱并不是什么大问题。

预计不会出现超大流量。我的 PHP 项目也可以相当优化。有一些繁重的脚本,但仅适用于内部(登录)用户。所有其他的都可以或多或少地静态提供。

windows php scalability apache-2.2

6
推荐指数
1
解决办法
5992
查看次数