我将在我的codeigniter 3应用程序中使用aws elasticache Redis。我得到了相当多的流量,我想知道在设置方面是否有任何我需要注意的地方?我在peek上每分钟收到1700次请求,并将其用于php会话。我想知道弹性缓存实例大小是多少(AWS)
我不再使用数据库支持的会话,因为这会导致GET_LOCK出现问题,导致大量连接堆积。
根据我的初步测试,它似乎工作得很好,速度也很快。我查询了会话表(多个应用程序实例)的大小,会话数据为100MB。
发布于 2019-12-14 07:18:46
我用托管在亚马逊网络服务中的基于tomcat / java的应用程序做了类似的事情,我们从基于DynamoDB的会话管理转移到了亚马逊网络服务管理的memcached。根据我的经验,下面是我可以提供的一些建议。
读取:在高峰时间,你每分钟收到1700个请求。假设在峰值秒期间,您每秒收到大约1700 / 60 = ~30个请求,这是所选elasticache实例应该能够处理的最小读取吞吐量。
写道:,你没有提到任何关于有多少新用户登录的信息,但我认为可以放心地假设它不会像阅读量那么高。如果您灵活地管理会话长度,则可以轻松地管理写入。就目前而言,可以放心地假设它将低于读取吞吐量。
这意味着您可以使用cache.t3.small (具有自动故障转移功能的多可用区),它具有2vCPU和1.37 if,足以容纳您的吞吐量和100MB会话存储needs.
发布于 2019-12-10 14:28:59
AWS有一份文件涵盖了以下内容-
https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/nodes-select-size.html
这真的取决于你拥有的数据量(也试着估计你的增长),你的应用程序是不是写得很重等等。
我建议您也阅读一下"Configure Amazon ElastiCache for Redis for higher availability“文档,并将其纳入您的考虑范围。
发布于 2019-12-11 00:38:33
这个问题很有趣。我用NGINX做了一些很接近的事情,只有2 2GB的内存。我建议的第一件事是如果可能的话,实现大量的缓存逻辑。您可以同时使用redis作为缓存和会话驱动程序,但除非必要,否则确保这1700个连接不会全部命中DB,这一点非常重要。
其次,您需要确保您的服务器和数据库配置为能够正确管理该数量的连接。为此,有三个特别有用的资源:https://gist.github.com/denji/8359866 (对阅读https://www.nginx.com/blog/tuning-nginx/也很有用)、MySqlTuner和PHP FPM High Performance Tuning。
同样根据经验,由于unix内核的限制(可以是tweaked for improvement),在端口上运行FPM比在套接字中运行它更可靠。
最后,我还添加了cloudflare,以防止基本的ddos攻击等,并知道您只需担心真正的用户。
https://stackoverflow.com/questions/59202618
复制相似问题