Amazon web services 将PHP Codeigniter项目转移/迁移到AWS

Amazon web services 将PHP Codeigniter项目转移/迁移到AWS,amazon-web-services,amazon-ec2,amazon-rds,Amazon Web Services,Amazon Ec2,Amazon Rds,我们公司的软件产品由Web App、Android和iOS App组成。 我们有350多个客户机,也就是说,我们有每个客户机的350多个数据库(MYSQL)和一个代码文件存储库(PHP Codeigniter)。当新客户购买我们的软件时,我们只需复制旧的空数据库,客户就可以使用该软件。这是我们的架构。 现在我们计划转向AWS,但我们不知道这种体系结构真正需要哪种AWS服务 我们有Codeigniter 3.1版本、PHP7和MYSQL。您可以在单个EC2实例上实现这种系统,只需在当前服务器上安装

我们公司的软件产品由Web App、Android和iOS App组成。 我们有350多个客户机,也就是说,我们有每个客户机的350多个数据库(MYSQL)和一个代码文件存储库(PHP Codeigniter)。当新客户购买我们的软件时,我们只需复制旧的空数据库,客户就可以使用该软件。这是我们的架构。 现在我们计划转向AWS,但我们不知道这种体系结构真正需要哪种AWS服务
我们有Codeigniter 3.1版本、PHP7和MYSQL。

您可以在单个EC2实例上实现这种系统,只需在当前服务器上安装相同的软件即可。不过,在这种情况下,您最好在比AWS更便宜的地方进行托管

但是,我建议您使用RDS、EC2、S3和Cloudfront实现它

RDS

我建议您在RDS上运行数据库:

  • 数据库服务器在与PHP完全不同的资源上竞争,因此,如果您遇到性能问题,就不可能知道数据库和PHP在同一个实例上发生了什么。CPU不足会导致内存不足,反之亦然
  • 内置的长达35天的时间点恢复为我节省了很多时间,当您有一个难以复制的bug或某人(您)意外删除了大量数据时,它非常有用
除此之外,我建议您也选择Aurora for MySQL,而不是MySQL RDS,尤其是我希望您的磁盘数据库大小小于50GB:

  • 在MySQL RDS上,您需要调试至少100GB的磁盘,以获得足够好的生产性能。100GB在所使用的EBS磁盘上每秒为100x50kb
  • 相比之下,在AWS Aurora上,您可以获得6个不同存储位置的读取性能,而无需提交任何磁盘空间。这样既省钱又更高效
  • Aurora在恢复时间点以及“哑”查询(即表扫描)方面也要快得多
EC2

  • 我建议不要看比t3、c5或m5更老的实例,因为它们有新的“nitro虚拟机监控程序”,速度更快,而且更便宜。根据经验,使用这些实例,您可以从现有的CPU数量上降低一个级别
  • 如果可以使用c6/m6/t4实例
  • 我还发现c5a及其等价物也具有同样的性能
  • AWS建议始终使用自动缩放,但如果您在其他地方安装了一台服务器,那么您已经赢了,因为您可以在几分钟内恢复
  • 一旦EC2费用达到每月600美元,一定要考虑自动缩放。事实上,每一个webapp的编写方式都允许在任何时间点更换服务器。通过自动缩放,您可以在第二个/第三个etc实例上以50-90%的折扣使用Spot实例,从而节省大量资金
S3

将所有客户提供的文件存储在S3上,不要进入共享文件系统

  • 这比任何磁盘或文件系统都便宜得多,并具有许多自动化功能,如版本控制、跨区域备份、归档、事件触发器等
  • 永远不要公开访问您的存储桶
Cloudfront

将所有客户提供的文件存储在S3上的关键好处是,您可以使用Cloudfront为它们提供服务,而无需支付CPU费用。Cloudfront仅对交付的流量收费。S3仅对使用的空间收费。通过Cloudfront交付的每个文件都不使用服务器的CPU、套接字和网络带宽。除此之外,从EC2到S3以及从S3到Cloudfront的传输都是免费的。你只需要支付你已经支付的流量

您需要使用已签名的URL或已签名的Cookie正确保护您的客户端文件。为此,您可以为每个客户机创建单独的S3存储桶,也可以创建单个存储桶

奖金:SQS

web应用程序中的许多事情现在不需要完成。他们可以稍等一会儿,有时100毫秒,有时几分钟或几小时

任何可以等待的事情,我建议开始实现从SQS队列中读取的后台进程。您的web应用程序将需要最少的时间将所需的工作及其参数推送到SQS队列中。然后,您的后台进程可以按照(大致)进入队列的顺序进行处理。当您使用普通web服务器处理后台队列时,随着时间的推移,您已经获得了更好的服务器负载分布。这是因为您无法控制web请求的数量,但您可以控制处理后台项目的速度(当然,在一定程度上)。 后来,当你有大量的后台处理和大量的流量时,你可以考虑使用不同的服务器进行后台处理。
还有很多方法可以将其他事件驱动的代码挂接到进入队列的项目上,包括监视某些项目超出的限制等。

您可以在单个EC2实例上实现此类系统,只需在当前服务器上安装相同的软件即可。不过,在这种情况下,您最好在比AWS更便宜的地方进行托管

但是,我建议您使用RDS、EC2、S3和Cloudfront实现它

RDS

我建议您在RDS上运行数据库:

  • 数据库服务器在与PHP完全不同的资源上竞争,因此,如果您遇到性能问题,就不可能知道数据库和PHP在同一个实例上发生了什么。CPU不足会导致内存不足,反之亦然
  • 内置的时间点恢复功能长达35天,多次为我省去了麻烦,非常棒