gpt4 book ai didi

php - 可扩展性 101 : How can I design a scalable web application using PHP?

转载 作者:行者123 更新时间:2023-12-02 01:45:22 25 4
gpt4 key购买 nike

我正在构建一个网络应用程序,有几个简单的问题。根据我的了解,人们在最初构建应用程序时不应该担心可扩展性,而应该只在流量增加时才开始担心。然而,这是我的第一个 Web 应用程序,我不太确定是否应该采取一种方法,即以临时方式设计事物,然后“修复”它们。我一直在阅读有关人们如何开始使用一款应用程序并在一两周内吸引数百万用户的故事。并不是说我会面临同样的情况,但我不禁想知道,这些人是怎么做到的?

目前,我在 Lunarpages 上购买了一个共享托管帐户,这让我开始构建和测试该应用程序。然而,我有兴趣学习如何使用云以可扩展的方式构建相同的应用程序,例如亚马逊的 EC2。根据我的理解,我可以看到几个组件:

  • 有一个负载均衡器,它首先接收请求,然后决定将每个请求路由到何处
  • 此请求随后由服务器副本处理,该服务器副本随后处理该请求并更新(如果需要)数据库,并将响应发送回客户端
  • 如果出现类似的请求,那么像 memcached 这样的缓存机制就会启动并从缓存中返回对象
  • 处理数据库复制的黑匣子

具体来说,我正在尝试执行以下操作:

  • 设置负载均衡器(我的作业显示 HAProxy 就是这样的负载均衡器之一)
  • 设置复制以便同步数据库
  • 使用内存缓存
  • 配置 Apache 以与多个 Web 服务器配合使用
  • 对应用程序进行分区以使用 Amazon EC2 和 Amazon S3(我的应用程序需要大量存储)
  • 最后,如何在使用亚马逊服务时避免烫伤自己?因为这只是一个学习阶段,所以我可能可以使用 2-3 台带有简单负载均衡器和复制的服务器,但直到我想避免意外支付大量资金为止。

我能够找到有关各个主题的资源,但无法找到从大局出发的资源。有人可以帮我开始吗?

最佳答案

就我个人而言,我认为您应该考虑您的应用程序最初将如何扩展 - 否则您会遇到问题。

我并不是说您需要首先将其构建为多服务器系统,但如果您认为稍后需要这样做,请立即注意这些问题。

根据我的经验,这包括:

  • session 。除非您使用“粘性”负载平衡,否则您必须有某种方法在服务器之间共享 session 状态。这可能意味着将 session 数据存储在共享存储或数据库中。

  • 文件上传和复制。如果您允许用户上传文件,或者您有一个允许您上传图像/文档的 CMS,那么它需要考虑到这些文件还需要找到到集群中其他节点的方式。但是,如果您已经沿着上面提到的共享存储路线走下去,这应该可以覆盖它。

  • 数据库可扩展性。如果您使用传统的数据库服务器,您可能需要考虑如何在该级别实现可扩展性。这可能意味着对您的应用程序进行编码,以便您使用一个连接字符串进行读取,使用另一个连接字符串进行写入。然后,您可以自由地使用一个主节点来实现复制,该主节点处理插入/更新,将更改级联到处理大量工作的只读节点。

  • 中间件。您甚至可能想要沿着实现某种面向​​消息的中间件解决方案的路线来完全移交业务逻辑功能 - 这将为您将来希望如何​​扩展此业务逻辑层提供很大的灵 active 。尽管一开始这会很复杂,而且返回不会很大。

关于php - 可扩展性 101 : How can I design a scalable web application using PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com