如何扩展Web应用程序

时间:2014-09-13 01:47:33

标签: php mysql zend-framework2 cloud mysql-cluster

我的基本问题是:如何开始构建可以快速增长的Web应用程序?

一点背景:我的客户要求提供Web应用程序。我不能详细说明,但它是一种电子商务和众筹资金。因此,他希望花一些钱,并期望一个可以无限增长的网站。

我打算用Zend Framework 2和MySql构建它。我的问题是我没有大型网络应用程序的经验。我到处读:没问题,只需启动项目,如果它变大,那么你可以对它做出反应并添加缓存,聚类等。

但这是真的吗,还是我必须从一开始就添加一些可扩展性机制?例如,云服务器(Amazon EC2)对文件系统采用不同的方法。以后可以切换吗? 或者负载平衡怎么样?我遇到了会话处理的问题,或者没有?那么MySql呢?或者最好直接使用NoSql方法?

所以我目前的计划是:

  • 第1步: 使用ZF2和MySql正常构建Web应用程序。
  • 第2步:添加缓存,如memcache和操作码
  • 步骤3:MySql集群或NoSql或负载均衡或云服务器??

更新:

好的,我知道我的问题有点过于宽泛。因此,我尝试将其追溯到一些具体问题:

  • 更好地直接启动云服务器?
  • 云服务器可以无限增长吗?

2 个答案:

答案 0 :(得分:2)

缩放是一个复杂的问题,不同的项目有不同的需求。我最近读了一本关于扩展PHP应用程序的好书。也许这可以帮到你:https://leanpub.com/scalingphp

本书的一些提示

  • 传入请求的负载均衡器
  • 1个用于写入的Mysql主服务器和用于读取的x mysql从属服务器(如果主服务器停止服务器可以升级
  • 使用会话存储我觉得这本书推荐Reddis(不确定,几周之后)
  • 运行Nginx而不是Apache

并且在个人说明中:

  • 这可能与味道有关,但我会推荐Laravel作为PHP框架,它比ZF更轻,并且(再次品尝..)更优雅。

现在我不记得这本书了,但是如果你得不到足够的信息,请通过电子邮件与我联系,我会查阅。

我是否必须从一开始就关注扩展,或者稍后添加负载平衡和会话存储等技术是否容易?

我从这本书中学到的是,在他们的案例中(Twitpic),在项目变得庞大并经历了大量停机时间之后,缩放开始了。在我看来,考虑一下你想要采取哪些缩放步骤是一件好事。当您的项目需要扩展时,可以扩展专用(My)SQL服务器或负载均衡器。但是当您计划使用会话存储服务时,我建议您从一开始就使用它,这样您就不必在需要扩展时重写代码。此外,一些会话存储服务在RAM中存储尽可能多的信息,这会降低执行时间。

另外,当您设置服务器时,我会说从Nginx开始,它使用的资源比Apache少。

答案 1 :(得分:2)

你的计划:

Step 1: Build the web application normally with ZF2 and MySql.
Step 2: Add caching like memcache and opcode
Step 3: MySql cluster or NoSql or load balancing or cloud server??

这是我的建议:

Step 1: Build the web app on CodeIgniter with MySQL (lighter, and faster than ZF2 with MySQL)
Step 2: Do memchace, opcode and don't forget phpfpm 
Step 3: Use Amazon EC2 and use their Load Balancing features to load balance between servers.