使用什么技术来避免过多的虚拟机

时间:2016-12-21 10:20:10

标签: performance web-applications architecture google-cloud-platform

我有一个小型的网络和移动应用程序,部分运行在用PHP编写的Web服务器上(Symfony)。我有一些客户使用该应用程序,并慢慢扩展到更多客户端。

我的后端架构目前看起来像这样:

  • 数据库是在GCP上运行的Cloud SQL(每个客户端都拥有它自己的 数据库实例)
  • 文件存储在云存储(GCP)或S3(AWS)上,具体取决于客户端。 (每个客户都拥有它自己的桶)
  • PHP应用程序在计算引擎VM(GCP)中运行,(每个客户端都拥有自己的VM)

现在的问题是,在PHP代码中,客户端特定的唯一内容是具有数据库凭据和Storage / S3密钥的设置文件。所有其他代码对于每个客户端都完全相同。大多数不同的虚拟机全天闲置,等待每个客户端使用几个小时。

我试图找到一种方法来避免为每个客户创建和维护VM。我如何重新架构我的后端,以便每个客户端可以保留单独的数据库和存储桶,但只在需要容量时才扩展我的VM?

我听到很多关于Docker的事情,正在考虑将数据库凭据和密钥保存在Redis数据库或云数据存储区中,正在研究Heroku,AppEngine,Elastic Beanstalk,......

这是我现在看到的理想情景

  1. 传入请求已完成,命中负载均衡器
  2. 从请求中确定请求所针对的客户端
  3. 查找正确的设置文件或数据库中的凭据
  4. 将设置文件注入未使用的"容器"
  5. 处理请求
  6. 让容器再次闲置
  7. 在那里的某个地方,根据传入的请求或流量确定,如果我需要旋转或减少容器以处理额外或减少(临时)负载。

    所有这些信息超载让我陷入困境,我不知道选择哪个方向,而且我无法看到实施上述任何技术将如何实际解决我的问题。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到最少:

  • 根据客户重写配置文件的加载
  • 在一台虚拟机上创建多个后端网站(我认为是最佳选择)