0

Our current architecture of a project is as below. There are 2 amazon instances. Both has Ubuntu 10.10 installed on it.

Instance 1: (m1.large) -- This instance has Php, Apache and MySql installed. It contains main website + API (Developed in Php) + Database (MySql)

Instance 2: (t1.micro) -- This instance has Php, Apache and MySql installed. It contains a Javascript.

Client-Server Interaction: On client side, there is a block of JS code which loads JS file of Instance 2 on client. This JS file creates request and sends it to API on Instance 1. API on instance 1 generates response and sends it to client.

On instance 1 there are cron processes which run on weekly basis, i.e. every Sunday for around 5-6 hrs.

Maximum CPU utilization on instance 1 is around 80% and on Sunday when cron is set to run, it goes above 95%. Average request count per day on main instance is around 225k.

**There is no issue on instance 2 of CPU utilization.Size of database is 7.5 GB**

Need of new Architecture: As we can see, in the current architecture the CPU Utilization is high. If we want to serve more requests, this architecture is not efficient. As our number of clients are increasing, number of requests on server and database size will also increase.

Can you please suggest new architecture design? We are also planning to change our database from MySql to MongoDB. Also, separate Database from instance 1. Is this a right decision?

Can anyone please suggest any new technology which we can implement for the new architecture like Memcached, nginx etc.

Thank you.

4

5 回答 5

5

这是一个指向可能有帮助的 Amazon参考架构之一的链接:

在此处输入图像描述

简而言之:

  • 将您的基础架构拆分为多个层(Web、应用程序、数据)
  • 使用 Auto Scaling 组随着您的流量增加/减少而加速/减速
  • 跨可用区拆分层以实现高可用性
  • 使用 CloudFront 托管静态图像/javascript/等。对于速度敏感的物品
于 2012-09-11T19:00:04.463 回答
0

好吧,我同意@Mike Brant。这里每个人的意见都很好,底线是 - “是否使用 Mongo 与 MySQL 真的取决于你的数据结构(即它更适合关系结构还是无模式结构)。” 关于静态内容问题,我认为 Nginx 是一个不错的选择,但我不排除 Cloudfront(主要是因为缺乏足够的经验)。但至于您的数据库选择,如果您选择 NoSQL,我认为mongoDB是一个不错的选择,如果您选择 MySQL,我建议您除了 RDS 之外,还可以看看Xeround 。干杯:)

于 2012-09-29T20:03:29.887 回答
0

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

  • 让您的数据库脱离应用服务器。您可以将Amazon RDS用于 Amazon 托管的 MySQL 实例。
  • 尝试为静态资源使用单独的网络服务器。nginx将是一个不错的选择。
  • nginx 也可以作为前端代理,将动态 PHP 请求转发到后端服务器。
  • 此选项还为您提供了更轻松的可扩展性。如果您需要额外的计算能力,只需添加更多后端 PHP 服务器,将它们添加到您的 nginx 配置中即可。
  • 在您的应用程序中,尝试使用连接到 memcache 的透明缓存层(可能应该安装在另一个实例上)。如果在缓存中找不到结果,则构建它(例如通过查询数据库)并将其存储在缓存中。以后的请求可以使用缓存中的结果。
于 2012-09-08T09:39:14.573 回答
0

好吧,这里有几件事您可能需要考虑:

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

  2. 您可以考虑使用 Cloudfront ,它可以提高性能(如检索时间),并使应用程序具有高可用性。

  3. 如果您计划迁移到 MongoDb,您将无法使用 RDS。如果你坚持使用Mysql,你应该使用RDS。

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

  5. Nginx 是提供静态内容的不错选择,并且可以充当良好的代理服务器。

于 2012-09-09T07:35:56.390 回答
0

这里其他人的想法真的很好。我想我会加入静态内容,因为其他答案中的共同主题是为此使用 Nginx 之类的东西。对我来说,我发现将图像、javascript、CSS 等放入 S3 存储桶并放入 Cloudfront 发行版要容易得多,而不必为这些内容提供 Web 服务器而烦恼。您可以在更靠近最终用户的边缘节点上获取静态内容,而根本不必担心任何缩放方面的问题。

我还建议迁移到更新版本的 Ubuntu(可能是 Canonical 的 12.04)。

我会尽量不在任何实际的生产网络服务器上运行大型 cron 进程(即那些消耗大量 CPU 或磁盘周期的进程)。可能会根据需要启动一个相同的实例,而不是在您的负载均衡器中)来执行这些任务。这也可以让您适当地调整 Web 服务器的大小/扩展(不适用于 cron 运行时的最坏情况)

是否使用 Mongo 与 MySQL 真的取决于您的数据结构(即它更适合关系结构还是无模式结构)。

于 2012-09-14T16:40:02.143 回答