我算是新手了,所以如果我遗漏了一些显而易见的东西,我深表歉意,因为我的研究并没有给我带来太多与我们独特的情况相关的信息。
我将把一个 php 应用程序转换到基于云的服务器,该应用程序目前在单个服务器上运行,使用 localhost 上的 memcached 为每个用户存储极少量的数据(不是会话数据,只是特定于用户的高可访问性过渡数据)。我们正在尝试使其具有可扩展性,因为我们当前的 Web 服务器在极少数高峰负载期间开始限制并发 apache 连接。
我们将通过具有会话粘性的负载平衡器运行云 Web 服务器,但我无法决定是否调整应用程序以连接到独立专用服务器上的 memcached,以便所有 Web 服务器可以共享内存池,或者为 memcached 维护每个云服务器内存的一部分并保持应用程序指向本地主机,相信会话粘性以确保维护会话的服务器也将在其内存中维护用户数据。
我目前的想法是,专用的 memcached 服务器将是一种更简洁的实现,但如果我们最终将 memcached 的使用范围扩大到更复杂的数据,那么从长远来看,扩展起来可能会更复杂。而维护在每个云服务器上运行的 memcached 实例将在需要额外服务器时引入更多资源(再次假设维护用户会话的服务器可以可靠地查找缓存的用户数据)。
我会重视任何人的意见、见解或指出我理解中的任何缺陷。
答案1
我想说两种方法都是正确的,但我稍微倾向于使用每个服务器的 memcached。只要您在 memcached 中没有共享数据。
使用共享 memcached 您可以获得:
- 更高的延迟
- 更高的 LAN 流量
- 在 Web 服务器发生故障时缓存数据的稳定性(接管的服务器仍然拥有所有信息)
- 如果 memcache 服务器发生故障,你将丢失所有缓存数据(这可能是我看到的唯一问题)
- 你可以运行两个,但这会削减预算
使用每个服务器 memcached 您将获得
- 降低延迟
- 交通量较低
- 如果发生故障转移到另一台服务器,则没有旧数据
- 但如果一台服务器发生故障,其他服务器也不会丢失任何内容
- 而且更便宜