![优化 nginx/php-fpm/postrgresql](https://linux22.com/image/803615/%E4%BC%98%E5%8C%96%20nginx%2Fphp-fpm%2Fpostrgresql%20.png)
我有:
- CPU E5-2407(四核 Xeon 2.2GHz)
- 16GB 内存 DDR3
- RAID1 Intel520 SSD 240GB
我自制的应用程序在 7 个页面(一个由客户以 API 调用,其他由带有 10 秒计时器的 CURL bash 循环调用)+ 网站上使用永久 PG 连接。API 页面的调用量将达到每天 100 万次(现在每天约 1000 次)。API 页面的作用只是将数据插入表中,然后通过循环过程进行处理。
我将在大约一个月内用 C 程序改变 bash 循环,这样 API 页面将是唯一使用 nginx 调用的页面(网站除外,但与 API 相比,它的体积非常小)。
您会推荐如何设置 nginx/PG/FPM 的进程/子进程/缓存/缓冲区?
谢谢 :)
答案1
我无法代表堆栈的其他层发言,但对于 Pg,请将 PgBouncer 置于 PostgreSQL 前面的事务池模式中。这意味着当您在客户端代码中生成更多持久性工作程序时,您不会大量增加 PostgreSQL 后端的数量。它还将降低大量短期 Pg 工作程序的启动/拆卸成本。
Postgresqlmax_connections
插槽不是免费的,即使未使用,其性能也会随连接数和活动会话数呈非线性增长。请参阅此维基页面了解详情。
此外,如果应用程序有大量只读、变化缓慢的数据,请考虑将其缓存在 Redis 或 Memcached 之类的东西中。您会发现,当您这样做时,PostgreSQL 的LISTEN
功能NOTIFY
可以轻松实现细粒度和及时的缓存失效。只有当您知道现实世界的负载是什么样的以及最常受到攻击的内容时,这可能才是值得追求的。
除此之外:用你的工作量作为基准然后再进行基准测试。然后再进行基准测试。模拟工作负载基准测试无可替代 - 除了现实世界的工作负载,它总会给你带来一些惊喜。