我有:
我自制的应用程序在7个页面上使用永久的PG连接(一个由客户作为API调用,另一个由具有10s计时器的CURL bash循环调用)+网站。 在API页面上,每天的通话量将达到100万次(现在大概是每天1000次)。 API页面angular色只是将数据插入到表中,然后由循环处理来处理。
我会用一个C程序在一个月内更改bash循环,所以API页面将是唯一使用nginx调用的(除了网站,但与API相比,它将是一个非常小的体积)。
你会推荐nginx / PG / FPM的进程/subprocess/caching/缓冲区的设置?
谢谢 :)
我不能说堆栈的其他层,但是对于Pg,把PgBouncer放在PostgreSQL前面的事务池模式中。 这意味着当你在你的客户端代码中产生更多的持久化的工作者时,你不会大量地抛出PostgreSQL后端的数量。 这也将减less大量短期Pg工人的启动/拆卸成本。
即使未使用,Postgresql max_connections
插槽也不是免费的,性能也随着连接数量和活动工作会话的数量而非线性地扩展。 看到这个维基页面的细节。
此外,如果应用程序有很多只读,缓慢变化的数据考虑caching在像Redis或Memcached的东西。 你会发现PostgreSQL的LISTEN
和NOTIFY
function可以在你这样做的时候轻松地实现细粒度和及时的caching失效。 一旦你知道真实世界的负载是什么样的,什么是最经常被击中的,这可能只是一些追求。
除此之外: 以您的工作量为基准 。 然后再做一些基准testing。 再来一些。 模拟工作负载基准testing是无可替代的 – 除了真实世界的工作负载,它总是给您带来一些惊喜。