Hacker News new | ask | show | jobs
by zenithm 3299 days ago
CosmosDB lets you set region failover priority if something goes wrong, does Fauna have a similar model?

How does an application know which region to talk to? Especially once you can select a subset of regions to be in. Some might not have the data you are looking for.

2 comments

Since FaunaDB is multi-master (or masterless, if you prefer), there is no failover step per se. Any region in the cluster can receive writes if it is part of the majority partition, and any region can serve consistent reads even if it's temporarily in a minority partition.

You don't have to set any priorities, and partition events don't change commit latency for the cluster majority.

Currently FaunaDB drivers use geo DNS in route53 to automatically find the closest region, although you can pin to specific regions if you know the cname. If that region doesn't own the data for the logical database in question, FaunaDB forwards the request internally.

In the future, drivers will maintain their own ϕ accrual failure detectors and make faster and smarter routing decisions than DNS can provide.

How do you handle write conflicts?
Transactions are strictly serialized; the paper explains how this works the best: https://fauna.com/pdf/FaunaDB-Technical-Whitepaper.pdf

We use a single-phase model inspired by Calvin, rather than Spanner's two-phase model. The tradeoff is that interactive transactions (like in SQL) are not supported, but overall latency and throughput are much better.

Do you use Cosmos? How is it?
I used DocumentDB a while ago but I haven't used the new version. It was a little strange.

You have to reason about every possible consistency configuration including transactions and indexes, but you don't actually get much control over what is indexed. And sort of like DynamoDB it doesn't really support general-purpose transactions, they have to be within a shard.

I think maybe the Mongo adapter is pretty nice though.