Architecture Amazon AWS服务器体系结构的重新设计

Architecture Amazon AWS服务器体系结构的重新设计,architecture,nginx,amazon-ec2,amazon-web-services,memcached,Architecture,Nginx,Amazon Ec2,Amazon Web Services,Memcached,我们当前的项目架构如下所示。 有2个amazon实例。两者都安装了Ubuntu 10.10 实例1:(m1.large)-- 这个实例安装了Php、Apache和MySql。 它包含主网站+API(用Php开发)+数据库(MySql) 实例2:(t1.micro)-- 这个实例安装了Php、Apache和MySql。 它包含一个Javascript 客户端-服务器交互: 在客户端,有一块JS代码在客户端加载实例2的JS文件。此JS文件创建请求并将其发送到实例1上的API。 实例1上的API生成响

我们当前的项目架构如下所示。 有2个amazon实例。两者都安装了Ubuntu 10.10

实例1:(m1.large)-- 这个实例安装了Php、Apache和MySql。 它包含主网站+API(用Php开发)+数据库(MySql)

实例2:(t1.micro)-- 这个实例安装了Php、Apache和MySql。 它包含一个Javascript

客户端-服务器交互: 在客户端,有一块JS代码在客户端加载实例2的JS文件。此JS文件创建请求并将其发送到实例1上的API。 实例1上的API生成响应并将其发送给客户端

在实例1中,cron进程每周运行一次,即每周日运行约5-6小时

实例1上的最大CPU利用率约为80%,周日cron设置为运行时,CPU利用率将超过95%。主实例上每天的平均请求数约为225k

**There is no issue on instance 2 of CPU utilization.Size of database is 7.5 GB**
新架构的需求: 我们可以看到,在当前的体系结构中,CPU利用率很高。如果我们想服务更多的请求,这种体系结构是没有效率的。随着客户机数量的增加,服务器上的请求数量和数据库大小也将增加

你能推荐新的建筑设计吗? 我们还计划将数据库从MySql改为MongoDB。另外,将数据库与实例1分开。这是一个正确的决定吗

有谁能推荐我们可以为新架构(如Memcached、nginx等)实施的新技术吗


谢谢。

这是一个非常笼统的问题,但这里有几点需要考虑:

  • 将您的数据库从应用程序服务器上删除。您可以用于Amazon托管的MySQL实例
  • 尝试对静态资源使用单独的Web服务器。这是个不错的选择
  • nginx还可以作为前端代理将动态PHP请求转发到后端服务器
  • 此选项还使您更易于扩展。如果您需要额外的计算能力,只需添加更多的后端PHP服务器,将它们添加到您的nginx配置中,就完成了
  • 在应用程序中,尝试使用连接到memcache的透明缓存层(可能应该安装在另一个实例上)。如果在缓存中找不到结果,则构建它(例如通过查询数据库)并将其存储在缓存中。以后的请求可以使用缓存中的结果
      这是一个非常普遍的问题,但这里有几点需要考虑:

      • 将您的数据库从应用程序服务器上删除。您可以用于Amazon托管的MySQL实例
      • 尝试对静态资源使用单独的Web服务器。这是个不错的选择
      • nginx还可以作为前端代理将动态PHP请求转发到后端服务器
      • 此选项还使您更易于扩展。如果您需要额外的计算能力,只需添加更多的后端PHP服务器,将它们添加到您的nginx配置中,就完成了
      • 在应用程序中,尝试使用连接到memcache的透明缓存层(可能应该安装在另一个实例上)。如果在缓存中找不到结果,则构建它(例如通过查询数据库)并将其存储在缓存中。以后的请求可以使用缓存中的结果
      好的,以下是您可能需要考虑的几件事:

    • 您需要知道最大连续请求数,而不是一天平均请求数。您可以通过在apache.conf中设置(达到一定的限制)并使用autoscaling增加ec2 instance/的配置来改进和测试apache处理的连续请求数。由于周日的cron作业,您的cpu利用率正在上升,因此在cpuutilization上进行自动缩放是一个不错的选择

    • >P>您可以考虑使用CyrdFrime,它提高了性能(如在检索时),也使应用程序高度可用。p>
    • 如果您计划迁移到MongoDb,您将无法使用RDS。如果你坚持使用Mysql,你应该使用RDS

    • 在考虑memcache时,尝试在应用程序级和数据库级实现缓存,因为memcache可能会给您带来一些差异

    • Nginx是一个很好的服务静态内容的选项,可以作为一个很好的代理服务器


    • 好的,这里有一些你可能想考虑的事情:

    • 您需要知道最大连续请求数,而不是一天平均请求数。您可以通过在apache.conf中设置(达到一定的限制)并使用autoscaling增加ec2 instance/的配置来改进和测试apache处理的连续请求数。由于周日的cron作业,您的cpu利用率正在上升,因此在cpuutilization上进行自动缩放是一个不错的选择

    • >P>您可以考虑使用CyrdFrime,它提高了性能(如在检索时),也使应用程序高度可用。p>
    • 如果您计划迁移到MongoDb,您将无法使用RDS。如果你坚持使用Mysql,你应该使用RDS

    • 在考虑memcache时,尝试在应用程序级和数据库级实现缓存,因为memcache可能会给您带来一些差异

    • Nginx是一个很好的服务静态内容的选项,可以作为一个很好的代理服务器


    • 这里有一个链接,指向亚马逊的其中一个网站,可能会有所帮助:

      简言之:

      • 将基础架构拆分为多个层(Web、应用程序、数据)
      • 使用自动缩放组在流量增加/减少时向上/向下旋转
      • 跨可用性区域拆分层以实现高可用性
      • 使用CloudFront托管静态图像/javascript/等,以提高速度敏感性 项目

      这里有一个链接,指向一个可能有帮助的亚马逊网站