我知道这些问题很难回答:)但我想了解将服务分离到不同服务器上的影响。
具体来说,我正在建立一个网站,它将有一个媒体服务器(apache 提供静态文件)、一个应用服务器(apache 处理 php 文件)、一个主数据库服务器和一个从属数据库服务器。
我打算在媒体和应用服务器上以共享池的形式运行 memcached,但我想知道这样做是否昂贵(在时间和资源方面)?显然,每次请求 memcached 调用(从应用服务器)时,它都必须与媒体服务器建立 tcp 连接,找出结果的位置,然后返回它们。
对于像这样的小型网站设置,增加应用服务器上的 RAM 而不是跨服务器池化 memcached 是否更好?或者差异如此之小以至于不值得担心?
尽管我使用 memcached 作为示例,但我更希望答案保持相当通用,因为相同的场景可以应用于其他服务(如数据库)。
答案1
答案2
需要回答几个问题才能更好地回答您的问题。
- 它是一个单一的网站吗?
- 它是否使用密集型资源(大量服务器端编程、流媒体视频等)?
- 您只使用视频、数据库和 php/.net 吗?
- 服务器的规格怎么样?
- 硬盘速度是多少?是否处于磁盘阵列配置中?
- 有多少个处理器?
- 多少内存?
- 您正在运行 100mb 或 1000gb 网卡和交换机吗?
- 你的上行速度是多少?
- 你的操作系统是否精简并优化了?
答案3
远远没有足够的信息给出可能正确的答案,而实际上运行一些测试/基准测试是确保你得到正确答案的唯一方法。
根据您的描述,我最好的猜测是,池化会增加单个请求的延迟,但会增加在事情陷入停滞之前您可以处理的总负载。
但是当我说我怀疑它可能会增加单个请求的延迟时,我的意思是根据您的网络设置,延迟量可能在几毫秒到几十毫秒之间。如果您的网站足够繁忙,那么使用两倍的缓存进行更少的数据库调用所带来的速度优势将大大抵消这一影响。如果媒体服务器和应用服务器的硬件大致相同,则您的应用服务器很可能会获得大量的 CPU 使用率,而媒体服务器的 CPU 将相当空闲,这意味着您实际上可能仅在媒体服务器上使用 memcached 而不是应用服务器上获得最佳性能。
确保优化的唯一方法是测试。测试、基准测试、分析等。没有测试,您永远不知道性能是提高了还是降低了。使用真实的用户组合(以便获得正确的缓存命中和未命中组合)运行端到端测试(换句话说,模拟 Web 客户端发出真实 Web 客户端会发出的所有文件请求),既针对中等负载,也针对“我们刚刚被 slashdotted”负载。自动化测试,以便轻松重复。在两个/所有服务器上使用 memcached 进行测试,仅在一台服务器上测试,仅在另一台服务器上测试,一台服务器上的 RAM 比另一台服务器多,等等...