扩展 10MPage.com:托管不断增长的互联网档案的务实方法
10MPage.com 的目标是通过允许用户向海量在线档案贡献 64x64 像素图像来捕捉 2025 年互联网的状态。 作为一名独立开发人员,我在早期阶段优先考虑成本效益,托管在预算友好的 VPS 上。 然而,可扩展的架构对于未来的增长至关重要。 本文详细介绍了我的分阶段扩展计划,重点是简单性和最少的停机时间。
应用架构:
该应用程序使用 Laravel 和 PHP 构建,严重依赖后台进程(由 Laravel Horizon 和 Supervisor 管理)进行图像处理、网格放置和电子邮件发送。 Redis 处理缓存和作业,而 MySQL 存储数据。 Nginx 和 PHP-FPM 服务 Web 请求。 初始单服务器设置如下所示:
扩展策略:
我的扩展计划涉及逐步过渡到多服务器架构,最大限度地减少每个步骤的停机时间:
第 1 阶段:隔离 Redis(零停机)
第一步是将 Redis 移动到单独的服务器。 应用程序可以临时使用本地文件系统缓存,并且作业队列可以短暂暂停。 这涉及设置新服务器、配置网络访问和重定向 Redis 连接。 迁移完成后,原服务器上的Redis将被关闭并卸载。
第 2 阶段:实施负载均衡器(零停机时间)
接下来,我将介绍 HAProxy 作为负载均衡器,利用其主动健康检查等高级功能。 该服务器还将处理 SSL 终止。 DNS 将更新为指向负载均衡器,将流量分配到现有的 Web 服务器。
第 3 阶段:分发工作服务器(零停机时间)
Laravel Horizon 的设计允许无缝添加工作服务器。 将设置新服务器,部署应用程序,并且工作人员开始使用 Supervisor。 然后可以关闭原来的worker。 扩展工作人员只需复制此过程。
第 4 阶段:部署多个 Web 服务器(零停机时间)
与工作服务器类似,添加了额外的 Web 服务器,配置了 Nginx 和 PHP-FPM,并向负载均衡器注册。 复制简单,确保高可用性。
第 5 阶段:专用数据库服务器(最短停机时间)
最后,原始服务器成为专用数据库服务器。 所有不必要的软件都被删除。 虽然目前单个强大的数据库服务器就足够了,但将来扩展此组件可能需要集群和短暂的停机时间。
部署自动化:
我的基于 Git 的部署流程将适应处理多个服务器,仅在需要时使用脚本来部署和重新启动服务(例如,在重新启动之前检查 Horizon 状态)。
解决单点故障:
当前架构存在单点故障(负载均衡器、数据库、Redis)。 未来的改进将包括负载均衡器的冗余。 数据库和 Redis 扩展将在以后的文章中讨论。
容器和集群:
虽然我很欣赏容器和集群,但我相信它们对于这个项目当前的规模来说是多余的。 所选择的方法优先考虑快速初始设置并避免不必要的复杂性。 机器快照和克隆足以在早期阶段进行扩展。
结论:
这一务实的扩展计划优先考虑简单性和成本效益,同时确保 10MPage.com 能够应对未来的增长。 分阶段方法可最大程度地减少停机时间并在整个扩展过程中保持功能。 通过专注于清晰的渐进策略,我可以致力于构建项目本身,一次向这个雄心勃勃的互联网档案添加一个图块。 今天贡献您自己的图块!
以上是我计划如何扩展我的 Laravel (PHP) 应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!