繁体   English   中英

可伸缩性101:如何使用PHP设计可伸缩的Web应用程序?

[英]Scalability 101: How can I design a scalable web application using PHP?

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

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

  • 有一个负载均衡器首先接收请求,然后决定在哪里路由每个请求
  • 然后,此请求由服务器副本处理,然后服务器副本处理请求并更新(如果需要)数据库并将响应发送回客户端
  • 如果有类似的请求进入,那么像memcached这样的缓存机制会进入图片并从缓存中返回对象
  • 处理数据库复制的黑盒子

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

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

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

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

我并不是说您最初需要将其构建为多服务器系统,但如果您认为以后需要这样做,请注意现在的问题。

根据我的经验,这包括以下内容:

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

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

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

  • 中间件。 您甚至可能希望沿着实现某种面向​​消息的中间件解决方案的路线完全交付业务逻辑功能 - 这将为您在未来扩展此业务逻辑层提供高度灵活性。 虽然最初这将是一个很大的复杂性和工作,并没有很大的回报。

您是否考虑过首先使用虚拟机? 您可以在本地计算机上运行2-3个虚拟机并像实际服务器一样进行设置,它们将无法处理实际流量级别。 如果您正在寻找的只是学习经历,那么它可能是一种理想的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM