我正在尝试了解未来需要的可能性。我正准备开通一个网络WordPress 多站点和超级数据库。我想让用户通过注册打开子域名站点,并且我需要一个在需要时使用第二台服务器的解决方案。
有 1 个主站点,子域之间没有连接。如果 blog_id > 50000,我需要以某种方式将请求转发到其他服务器。关于此问题有一些“旧”讨论:http://codex.wordpress.org/How_to_Scale_WPMU
这个想法是让一台 HTTP 服务器接收所有传入请求。该服务器使用 mod_proxy 和 mod_rewrite,将请求路由到 X 后端服务器,充当反向代理。
好吧,我几乎不会管理服务器,而且我在这个领域真的是新手。我该怎么做?
答案1
您链接到的“如何扩展 WPMU”页面提出了一个解决方案,这似乎是一个不错的解决方案,但我怀疑它的扩展性如何。他们所做的相当简单。他们使用主机名标头让反向代理决定将请求路由到哪个服务器。基本上,他们查看博客名称的首字母,然后将请求路由到 26 个服务器中的 1 个,每个服务器对应一个字母表。
这可能不能很好地扩展。首先,因为字母表中的某些字母会比其他字母更受欢迎。以字母 q 或 x 开头的博客将比以字母 e 或 m 开头的博客少得多。第二个问题是,如果一个或几个以相同字母开头的博客非常受欢迎,那么一台服务器的负载将比其他 25 台服务器高得多。其他服务器的利用率可能非常低,而这台服务器无法应对流量。对可用资源的利用率不是很好。
如此规模的负载平衡并非易事,需要在反向代理上采用更多智能逻辑。这对于您尝试构建的解决方案也是如此。如果您需要根据 blog_id 转发请求,则需要在反向代理上采用一些自定义逻辑,该逻辑可以查找主机名以找到 blog_id,然后决定将其转发到哪个服务器。我不知道使用 Apache 是否可以实现这种逻辑。我更像是 IIS 专家,要使用 IIS 构建这样的解决方案,必须编写自定义重写提供程序。这并不难,但也不能解决扩展问题。
要解决扩展问题,您需要额外的逻辑,以便能够动态地向当时流量很大的博客或博客组添加服务器。这需要反向代理和配置/部署系统之间的同步,以便能够动态地向博客池添加/移动服务器。博客平台 Squarespace 已将此作为其独特的卖点之一。
答案2
你应该用简单的方法扩展它:
- 在具有本地 MySQL 服务的单台服务器上启动。
- 稍后将您的数据库服务移至专用实例。
云计算对于这种事情来说是个不错的选择——开始时速度很慢,但计算资源始终可用。您还可以寻找为您管理服务器的提供商,并尝试与他们建立关系,以便他们能够一路为您提供帮助。
无论如何,都有很多事情要做(和学习):
- 如何扩展 PHP(例如,你可能首先使用 Apache,然后使用类似nginx和php-fpm)。
- 如何扩展 MySQL – 默认值通常不能很好地利用可用资源,等等。以后,您可以设置主-主 MySQL 设置和只读从属服务器来进一步扩展它。
- 实现缓存——例如WP超级缓存或者一些更激进的漆它可以缓存并处理博客请求,无需任何 PHP 或数据库交互。当更新不频繁时,这种方法非常有效。当然,当发生更新(新博客文章、编辑博客文章)时,必须采取措施使缓存无效。
所有这些方法在一段时间内都会有效,但没有最终的解决方案。或者没有“一劳永逸的解决方案”。
我不确定这里需要多少逻辑,而且自动执行效果不太好。
您最有可能遇到的问题是,有些博客比其他博客更忙。需要考虑的是如何轻松地将博客从一台服务器移至另一台服务器,例如移至新服务器(专用服务器或更空闲的服务器)。
这同样适用于您的数据库服务,到目前为止,您只能通过复制来扩展它。您可能需要做的一件事是为更繁忙的客户端等设置专用实例。我不确定 WP MU 在后端如何工作,无法回答其中有多少可以自动化,或者完成这项工作究竟需要什么。
底线:我不会做得太过分,我会随机应变。我不确定你是否能预测你的成功,但除非真的需要,否则我不会在基础设施上投资。
最后但并非最不重要的一点是,从我所了解的情况来看,你听起来像个初学者。所以不要误会我的意思,但我建议你要么花很多时间学习一些系统管理课程,并在此过程中成为一名 PHP 开发人员(和数据库管理员),要么想办法聘请可以为你解决这些问题的人。
高血压