Just use Postgres, until it actually hurts
The queue, the cache, the search index, the vector store, the job scheduler and the analytics table for a product with 40,000 daily users all live in one Postgres 18 instance. That is not a compromise. It is the design. Here is what each piece looks like, what it costs, and the three specific signals that would make me move one of them out.