1

我在 M6G 8X 大型服务器中使用 Laravel 8 部署了一个 API。我的系统架构如下。

Client -> NGINX -> PHP-FPM -> Laravel API -> PGBouncer -> PostgreSQL/PostGIS

API 从 Postgres 函数将结果返回给客户端请求,该函数使用来自 120 亿条记录的表中的信息,平均耗时 300 毫秒。我使用 jmeter 对 500 个并行请求的 50K 请求进行了负载测试,而我的吞吐量仅为 390 Requests/Sec。

为了缓解这个问题,我在 Redis 内存中加载了 120 亿条记录,并使用 RediSearch FT.Aggregate 函数在 Redis 中对 postgres 函数进行了相同的操作和地理空间过滤器,我得到的结果平均为 250-300 毫秒. 我对 50K 请求和 400 个并行请求进行了相同的负载测试,其中我只有 45 个请求/秒的吞吐量,这比 Postgres 函数方法差得多。

Client -> NGINX -> PHP-FPM -> Laravel API -> Redisearch -> Redis

请让我知道如何使用 Redis 方法提高并发请求的吞吐量,因为我的假设是 Redis 中没有锁定问题或与 Postgres DB 问题的连接。谢谢。

示例查询

FT.AGGREGATE test_idx "@location:[-84.31455662683010 33.92779720276280 20 mi]" 
APPLY "geodistance(-84.31455662683010,33.92779720276280, @location)" as distance 
APPLY "(@a*(( 20-(@distance/1609.344))/20))" as a1 
APPLY (@a1*@b) as a1b 
APPLY 1 as test 
GROUPBY 1 @test 
    REDUCE SUM 1 @a1 as a_total 
    REDUCE SUM 1 @a1b as a1b_total 
    APPLY (@a_total/(3.14*(20^2))*100) as val_1 
    APPLY (@a1b_total/@a_total) as val_2

4

0 回答 0