我正在使用CodeIgniter来实现我的API。请查找使用的服务器资源和技术如下:
概要
Framework : CodeIgniter
Database : MySQL (Hosted on RDS) (1 MASTER & 2 SLAVE)
Hosting : AWS t2.Micro
Web Server : Nginx
以下是根据我的测试报告的LOADER.IO报告。
我的API最短响应时间:383 MS
点击数:10000/1分钟并发
如下图所示AVERAGE RESPONSE为6436 MS。
我期待至少100000/1 MIN用户在我的应用程序上观看活动。
如果有人可以提供一些优化建议,我将不胜感激。
到目前为止我做过的主要事情
1)从APACHE切换到NGINX
2)MASTER / SLAVE配置(1 MASTER,2 SLAVE)
3)检查应用程序中的USER JOURNEY中的每个INDEX
4)代码优化:如您所见,383 MS是API的良好响应时间 5)使用MYSQL的EXPLAIN来检查查询的解释
答案 0 :(得分:1)
我建议你专注于调整你的mysql以获得更快的查询执行,从而节省时间。 对此,我建议做以下事项:
您可以在/etc/my.cnf(Red Hat)或/etc/mysql/my.cnf(Debian)文件中设置它们:
# vi /etc/my.cnf
然后追加以下指令:
query_cache_size = 268435456
query_cache_type=1
query_cache_limit=1048576
在上面的示例中,可以使用query_cache_limit系统变量将高速缓存的各个查询结果的最大大小设置为1048576。内存大小以Kb为单位。
这些更改将使您的查询通过缓存经常执行的查询结果来提供更快的结果,并且还会在任何行更新时更新其缓存结果。这将由mysql引擎完成,这是你如何节省时间。
更多建议:
当您使用t2.micro
时,您将获得1Gig的RAM和1个CPU。因此我建议使用t2.medium
,它将为您提供4.0 GiB RAM和2个CPU。
答案 1 :(得分:1)
对于每秒1667 SELECTs
,您可能需要多个Slaves。有了这样,你可以任意缩放。
然而,SELECTs
可能会变得足够高效,不需要额外的奴隶。我们来看看查询。请加入SHOW CREATE TABLE
和EXPLAIN SELECT ...
。
每秒可以运行数千个简单查询。
" 100000/1 MIN" - 这是100K 连接吗?或者从较少数量的连接中查询 ?有一个很大的区别 - 建立连接比执行简单查询更昂贵。此外,拥有100K 同时连接比我听到的更多。 (而且我已经看过数千台服务器。我看过10K连接(高水位)和3K" Threads_connected" - 由于各种原因,两者都处于深度干扰状态。我几乎从未见过更多超过200" Threads_running" - 这是同时执行的实际查询;这对于稳定性来说太多了。)
哎哟 - 在1GB内存上query_cache_size
为256MB,你没有其他任何空间!这是一个 tiny 服务器。即使在较大的服务器上,不也将可调参数设置为超过50M。否则"修剪"减慢速度比QC加速它们更快!
而且,这些表有多大?
而且,SHOW VARIABLES LIKE '%buffer%';
而且,你在运行什么版本?在吞吐量停止改进之前,版本5.7被评定为大约64个同时查询,并且(相反),响应时间为无穷大。
要进行实际的基准测试,您需要为
提供实际值重量级人物每天提供数百万个网页。典型的页面涉及:连接,执行一些查询,构建html,断开连接 - 所有(通常)在不到一秒钟内完成。但只有一小部分时间是任何运行。也就是说,100个连接可能等于在任何时刻运行的0-5个查询。
请谈谈每秒需要运行的查询。请限制同时运行的查询数量。