我有一个链接共享网站(比如 reddit)。它现在托管在 godaddy deluxe 共享主机上。我计划将其迁移到 aws。
我看过一个关于扩展到 1000 万用户的 AWS 网络研讨会。但基本上它只是说,超过一定程度就无法以垂直方式扩展,因此从一开始就选择以水平方式扩展。
我不需要支持 1000 万用户。假设我需要每天支持 100,000 名用户。网站最多会有 1000 名并发用户。
用例
- 用户会发布指向该网站的链接。每 1000 个用户中只有一个会发布链接。
- 大多数用户只是在网站上搜索链接、阅读描述等。
- 该网站上每天会有大约5000条评论。
- 它主要是基于文本的网站。
- 网站上的图片很少,除了用户头像和横幅,两者都限制在 2MB。图片存储在数据库中。
- 具有论坛的常见功能,如注册、登录、帐户等。
规划架构
- 1 个 EC2 实例
- 1 个 RDS 实例
- 1 53 号公路区域
- 1 个弹性 IP
- 1 s3(仅用于备份)
我计划使用这种简单的方法进行扩展 - 从 t2.micro 开始,随着用户群的增长,只需升级 ec2 实例即可。RDS 实例也是如此。
我知道 1 个 EC2 或 RDS 会使其成为单点故障。如果其中任何一个发生故障,我计划终止该实例并从映像/备份启动一个相同的实例。如果网站每 30 天离线 1 小时,我没问题。
请记住,我没有人可以协助我,这是一个个人努力。如果影响到用户,我可以找人协助 AWS 方面。
- 我可以通过这种方式支持 100,000 名用户吗?
- 我应该在什么断点升级到下一个 Ec2 实例,直到达到 100,000 个用户/1000 个并发用户?(例如,直到 5 个并发用户 - t2.micro/db.t2.micro,直到 40 个并发用户 - EC2 实例类型 2/Rds 实例类型 2 等)
- 在执行此计划之前还有什么我没有考虑/需要考虑的吗?
答案1
很难说一个 Web 应用程序是否能在特定系统上处理 X 个客户端。这在很大程度上取决于许多因素,包括应用程序的编写方式、使用的框架等。
最好的选择是找到可以用来对应用程序的使用进行基准测试/模拟的东西。由于您似乎已经运行了 Web 应用程序,因此您可以轻松地在短时间内设置任何大小的 ec2 实例,运行一些测试,然后将其关闭。
能够水平扩展将为未来处理增长提供更好的途径。如果网站在更大的实例上遇到困难,或者您需要扩展到 100,000 以上,会发生什么情况?您可能还会发现,仅仅转移到更大的实例可能不会带来性能的线性增长。
有一件事确实引人注目——
图像存储在数据库中。
将图像和其他不需要应用服务器专门处理的内容存储在其他地方。由于您已经在使用 AWS 堆栈,因此 S3 是存储图像和其他静态数据的明显位置。不要将应用服务器的时间浪费在静态资源上。