kon*_*_pe 10 cloud scala amazon-web-services playframework cloudcaptain
这是一组问题,而不是一个非常具体的问题.在过去的几周/几天里,我一起困惑地了解了如何在"云端"正确托管JAVA PLAY应用程序,因为很多这些信息分散在不同的服务上,我觉得要将所有这些小块收集到一个,因为在完整的背景下,很多事情都很重要.但是,我把我的考虑转移到问题的底部,因为它们主要是我的意见和主观发现,我不想对此负责.如果我弄错了,请不要犹豫,指出这一点.
我们的场景:我们在Java PLAY框架(https://www.playframework.com/)中编写了一个非常简单的应用程序,在iOS和Android以及后端系统上工作(用于管理,内容管理和API) ),将数据存储在MySQL DB中.虽然大多数用户与服务器的交互快速简便(登录,同步一些数据),但还有一些数据密集型任务(将一些<100mb数据拉链下载到手机上,将几mb上传到服务器).因此,我们正在寻找一种解决方案,以合理的方式为用户提供远离我们服务器的合理响应时间.明显的下一步是在云端托管.
水平缩放:首先,我们的app只有1个EC2实例将在eu-1a中运行.如果需要更多实例,并且更多实例实际上有利于更快的响应时间,我们将需要评估一个实例实际需要多少资源.
跨区域的水平扩展:一旦应用程序从另一个区域生成大量用户负载,整个EC2实例应该被复制并放到另一个区域,运行db read副本(请参阅在amazon Web服务和https 上设置全局可用的Web应用程序: //aws.amazon.com/de/blogs/aws/cross-region-read-replicas-for-amazon-rds-for-mysql/).
EC2实例的垂直扩展:在最近的旧主机设置测试中,数据库被证明是瓶颈而不是播放应用程序及其服务器的硬件规格.因此,尚不完全清楚垂直缩放会对响应时间产生多大影响.如果t2.micro实例与m3.xlarge实例一样好,当然我们宁愿从这里向上攀爬.
RDS的垂直扩展:我们需要估计有多少流量到达DB服务器以及需要什么CPU/RAM /等.也许我们也会在这里努力工作.
全局重定向:使用Amazon Route 53(?)完成.来自Tokio的用户应该被重定向到在亚洲运行的EC2实例; 从罗马到欧洲EC2实例的用户.这不仅会影响应用内的API调用,还会影响内容传送(双向).
我非常感谢各种想法(!),也有关于下面写的背景信息.如果你能指点我进一步阅读以自己解决我的问题,我也非常感激 - 关于这一点只有大量的信息,但这使得很难缩小答案.我确实有托管/服务器的知识,但我很确定有真正的专家在那里等着用知识打击我.:)
当前主机设置:负载均衡器在2个根Linux服务器上分配流量,两个服务器都运行PLAY应用程序,其中一个也持有MySQL安装.
目前的托管设置有三大缺陷:
Java PLAY的托管选项: 关于此,有很多不同的博客文章.简而言之:
很多选择和可能的设置/价格.特别是在发现使用boxfuse(https://boxfuse.com/)进行部署之后,我选择了AWS,因为它提供了我们所需要的1个来源.Boxfuse每月的成本很低,但完全集成到AWS中.支持缩放以及3种常见环境(dev/test/prod).支持非常出色.
设置看起来不错。不过,我会做出一项改变:您的大量上传和下载。由于移动速度可能并不理想,因此您应该避免让您的应用程序服务长时间运行的请求,因为这会不必要地占用服务器线程。相反,请考虑让用户使用预先签名的 URL 直接从 S3 上传和下载。然后,当您认为这样做具有经济意义时,您可以将 CloudFront 添加到组合中。
R53 可以很好地为每个最终用户选择最好的服务器。
对于 EC2,请考虑使用 ELB + Auto-Scaling Group 设置。即使只是一个实例,您也可以获得永久健康监控和自动重生的好处。如果您期望更多负载,则可以根据预期瓶颈(CPU、网络 I/O)自动扩展。这将为您提供更加自主和强大的设置,而不是根据您自己的监控分析手动扩展和缩小(尽管如果您坚持使用不可变的基础设施和蓝/绿部署(如 Boxfuse 提供的功能),扩展部分非常容易)。