我们目前的项目架构如下。 有2个亚马逊实例。两者都安装了Ubuntu 10.10。
实例1:(m1.large) - 此实例安装了Php,Apache和MySql。 它包含主要网站+ API(以Php开发)+数据库(MySql)
实例2:(t1.micro) - 此实例安装了Php,Apache和MySql。 它包含一个Javascript。
客户端 - 服务器互动: 在客户端,有一块JS代码在客户端加载 Instance 2 的JS文件。此JS文件创建请求并将其发送到实例1 上的API。 实例1上的API生成响应并将其发送到客户端。
在实例1中,有每周运行的cron进程,即每周日约5-6小时。
实例1的最大CPU利用率约为80%,而在周日当cron设置为运行时,它会超过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等新架构实施的任何新技术。
谢谢。
答案 0 :(得分:5)
以下是亚马逊Reference Architectures之一的链接,可能有所帮助:
简而言之:
答案 1 :(得分:0)
这是一个非常普遍的问题,但这里有一些要考虑的问题:
答案 2 :(得分:0)
这里有一些你可能想要考虑的事情:
您需要知道您获得的最大连续请求数,而不是一天的平均请求数。您可以通过在apache.conf中设置(达到某个限制)并使用autoscaling增加ec2实例的配置来改进和测试连续请求apache的数量。由于周日的cron作业导致cpu利用率上升,因此可以自动调整cpuutilization。
您可以考虑使用Cloudfront,它可以提高性能(如检索时间),还可以使应用程序具有高可用性。
如果您打算转到MongoDb,您将无法使用RDS。如果你坚持使用Mysql,你应该使用RDS。
在考虑内存缓存时,尝试在应用程序级别和数据库级别实现缓存,因为内存缓存可以给你一些差异。
Nginx是提供静态内容的好选择,可以作为一个好的代理服务器。
答案 3 :(得分:0)
这里的其他人真的很好。我想我会讨论静态内容,因为其他答案中的共同主题是使用像Nginx这样的东西。对我来说,我发现将图像,javascript,CSS等放入S3存储桶并放置Cloudfront发行版更容易,而不是甚至不得不试图为此内容提供Web服务器。您可以在边缘节点上获得更接近最终用户的静态内容,而不必担心任何扩展方面。
我还建议迁移到更新版本的Ubuntu(也许是Canonical的12.04)。
我会尝试不在任何实际的生产Web服务器上运行大型cron进程(即那些消耗大量CPU或磁盘周期的进程)。也许根据需要启动相同的实例,而不是在负载均衡器中执行这些任务。您还可以适当地调整/扩展Web服务器(不适用于cron运行时的最坏情况)
是否使用Mongo与MySQL实际上取决于您的数据结构(即它更适合于关系结构或无架构结构)。
答案 4 :(得分:0)
嗯,我同意@Mike Brant。这里的每个人都很好的投入和底线是 - “是否使用Mongo与MySQL实际上取决于您的数据结构(即它更适合于关系结构或无架构结构)。” 关于静态内容问题,我认为Nginx是一个相当不错的选择,但我不排除Cloudfront(主要是因为缺乏足够的经验)。但是对于你的数据库选择,如果你选择NoSQL,我认为{{ 3}}是一个不错的选择,如果你选择MySQL,我建议你除了RDS之外还要看看mongoDB。干杯:)