Fly.io Multi-Region Wasp setup with database Replicas
I'm planning to run a multi-region service. My service, spellfast.ai, should be fast globally, so I'm scaling to multiple regions. The best way to do this in my case is by using database replicas, which are clones of the primary region's database. The benefit is that you have one database, and the clones receive updates. The setup involves setting up different ports for reading from database replicas and catching write requests, proxying them from replicas to the database in the primary region.
docs: https://fly.io/docs/postgres/advanced-guides/high-availability-and-global-replication/#connecting-to-read-replicas
Is such a custom setup even possible with Wasp? Any suggestions on how to achieve this?
8 Replies
Hi @sion0921. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:
----------------------
Based on the provided knowledge sources, there isn't specific information about setting up a multi-region Wasp service with database replicas on Fly.io as you've described. However, I can provide some insights and suggestions based on the available information about Wasp and Fly.io deployment:
1. Wasp's deployment to Fly.io is primarily focused on single-region setups. The Wasp CLI deployment documentation (https://wasp-lang.dev/docs/advanced/deployment/cli#deploying) shows how to deploy to a single region.
2. Wasp uses Prisma as its ORM, which doesn't natively support read replicas or multi-region setups out of the box. This might pose challenges for your desired setup.
3. Wasp's deployment process creates three separate apps on Fly.io: client, server, and database. The deployment documentation (https://wasp-lang.dev/docs/advanced/deployment/cli#deploying) doesn't mention any built-in support for multi-region or database replica setups.
4. While Wasp allows setting environment variables for deployment, there's no mention of configuring multiple database connections or read replicas in the environment variables section (https://wasp-lang.dev/docs/advanced/deployment/cli#flyio-regions).
Given these limitations, achieving your desired multi-region setup with database replicas might be challenging using Wasp's standard deployment process. However, you might consider the following approaches:
1. Custom Deployment: Instead of using Wasp's built-in deployment, you could generate the deployable code using Wasp and then manually set up the multi-region deployment on Fly.io. This would involve more work but give you more control over the setup.
2. Proxy Layer: You could potentially deploy a proxy layer in front of your Wasp application that handles routing read and write requests to the appropriate database instances.
3. Feature Request: Consider submitting a feature request to the Wasp team for multi-region support with database replicas. The Wasp project is actively developed, and such a feature might be valuable for other users as well.
It's worth noting that implementing such a complex setup might require modifications to the generated Wasp code or additional configuration that goes beyond Wasp's current capabilities.
For the most accurate and up-to-date information, I recommend reaching out to the Wasp community or maintainers directly, as they might have more insights or upcoming features that could address your needs.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------
Sorry @sion0921, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:
Perhaps try again in 15mins?
Any human suggestions?
Hey @sion0921 -> Wasp uses Prisma for all related to databases, so this will mostly depend on what kind of Prisma support has for this + is that ok with Wasp.
I have never done something like this Prisma though -> have you checked out what Prisma says in this case, how would one use Prisma in such setting?
🤷♀️
Wohooo @sion0921, you just became a Waspeteer level 4!
I've got replicas working. In fact, it wasn't difficult, done by utilizing the server setup function.
Awesome, thanks for sharing @sion0921 ! What did you do in the server setup function?
@sion0921 nice stuff, I'm also curious about how you did it 🙂 we want to learn from you!