by Leon Rosenshein

Distributed System Superpowers

We all work on distributed systems. We all like superpowers. If you were Distributed Systems Man what superpowers would you want? As a user of distributed systems I'd want, in no particular order:

*Idempotency*: I want to be able to send the same message multiple times until I get a response and not worry about partial application. If I have to set something and get a connection error then have to check to see if it was set, figure out the new set command, and try again I will get it wrong. Don't make me do that.

*Availability*: I want the system always work. Period. I should never get a "System unavailable" message. And if I do retrying immediately should just work.

*Scalability*: I want the system scale (up/out) when it gets slow. Make it automatic. Make it so I don't have to care if you scaled up/out. I want to send my message and have it get to the right place magically.

*Durability*: I want the system to remember what I told it. I don't care if the power fails in the DC or someone with a backhoe digs up a fiber. If I get a message that my submission (whatever it was) worked then the system should never forget it

*Consistency*: I want to be able to set something and then I (and everyone else) immediately be able to get that value. I don't want to care where the other person is, but when I get told I've updated something it should be updated for everyone.

Of course, providing those things is hard. According to the CAP theorem it's not possible. But we can come close. Caches. Queues. Shards. Duplication. And SLAs. Don't forget them. Maybe you can't promise everything, but figure out what you can promise, then deliver on that. So what's your superpower? Share in the thread.