我是一个初级的后端开发人员,每个月平均有大约100.000个用户。我们的高级后台开发人员突然辞职了,现在我只能靠自己了,还有很多东西需要学习。因此,这是初学者的问题。
我们有一个Symfony 3应用程序使用Doctrine和Sonata Admin捆绑包连接到一个MySQL数据库(托管在AWS RDS上),运行在大约2-4个AWS EC2实例上。我们需要处理的大多数请求都是GET请求,它们为每个用户返回相同的数据,因此非常可缓存,这就是为什么我们只需要2-4个EC2实例就可以为大量用户服务的原因。
现在,我的任务是创建一个非常轻量级的“分析”系统,每次用户使用应用程序时,它都会为每个用户存储一些数据。这意味着每个用户每次使用应用程序时都会向数据库写入POST请求。
我们有时在应用程序中有20.000个并发用户。如何才能在不破坏EC2自动伸缩或阻塞数据库的情况下实现这一点?此用户数据对时间不敏感,因此不必立即将其写入数据库。延迟一个小时左右是可以接受的。
谢谢。
发布于 2020-08-18 12:15:35
我推荐使用SNS + SQS + Lambda来实现这一点。一种常见的设计模式称为“扇出”。在此模式中,发布到SNS主题的消息并行分发到多个SQS队列。通过使用此模式,您可以构建利用并行、异步处理的应用程序。例如,您可以在用户每次使用应用程序时向主题发布一条消息。独立的进程(使用AWS Lambda),每个进程从单独的SQS队列读取并将其推送到数据库中。

图片共享来源:https://www.jeremydaly.com/how-to-use-sns-and-sqs-to-distribute-and-throttle-events/
此设计模式的优势:
requirements.
https://stackoverflow.com/questions/63449415
复制相似问题