[英]Scalability 101: How can I design a scalable web application using PHP?
我正在构建一个Web应用程序,并有几个简单的问题。 根据我的学习,在最初构建应用程序时不应该担心可伸缩性,并且应该只在流量增加时开始担心。 然而,这是我的第一个网络应用程序,我不太确定我是否应采取一种方法,我以特别的方式设计事物,然后“修复”它们。 我一直在阅读有关人们如何开始使用应用程序的故事,该应用程序可在一两周内吸引数百万用户。 不是说我会面对同样的情况,但我不禁要问,这些人怎么做呢?
目前,我在Lunarpages上购买了一个共享主机帐户,这让我开始构建和测试应用程序。 但是,我有兴趣学习如何使用云以可扩展的方式构建相同的应用程序,例如Amazon的EC2。 根据我的理解,我可以看到几个组件:
具体来说,我正在尝试执行以下操作:
我能够找到有关个别主题的资源,但无法找到从大局出发的内容。 有人可以帮我开始吗?
就个人而言,我认为你应该考虑你的应用程序最初如何扩展 - 否则你将遇到问题。
我并不是说您最初需要将其构建为多服务器系统,但如果您认为以后需要这样做,请注意现在的问题。
根据我的经验,这包括以下内容:
会话。 除非您使用“粘性”负载平衡,否则您必须有一些在服务器之间共享会话状态的方法。 这可能意味着将会话数据存储在共享存储或数据库中。
文件上传和复制。 如果您允许用户上传文件,或者您有一个允许您上传图像/文档的CMS,则需要满足这些文件还需要找到群集中其他节点的方式。 但是,如果您已经沿着上面提到的共享存储路径走下去,那么应该覆盖它。
数据库可伸缩性。 如果您使用的是传统数据库服务器,您可能需要考虑如何在该级别实现可伸缩性。 这可能意味着编写您的应用程序,以便您使用一个连接字符串进行读取,而另一个用于写入 然后,您可以自由地实现复制,其中一个主节点处理插入/更新,将更改级联到只读取处理大量工作的节点。
中间件。 您甚至可能希望沿着实现某种面向消息的中间件解决方案的路线完全交付业务逻辑功能 - 这将为您在未来扩展此业务逻辑层提供高度灵活性。 虽然最初这将是一个很大的复杂性和工作,并没有很大的回报。
您是否考虑过首先使用虚拟机? 您可以在本地计算机上运行2-3个虚拟机并像实际服务器一样进行设置,它们将无法处理实际流量级别。 如果您正在寻找的只是学习经历,那么它可能是一种理想的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.