My Favorite Database is the Network
lucumr.pocoo.org
lucumr.pocoo.org
The two being contrasted here are the one centralized database (w/ master/slave, replica sets, etc of course) versus a peer-to-peer configuration.
We've been in a centralized hub and spoke model as cloud servers have taken off. As clients get more powerful and network links slow[1], we're going to move more to peer-to-peer models.
The concept described by the author is right in the middle: hub and spoke, but keep all the data on the spokes. Of course, the comments (EGreg) points out that this has a disadvantage of difficult access if the spoke is storing another spokes information.
Adding a couple peer-to-peer connections can help with this and WebRTC is a good technology for doing it. Once you connect peers, you can move data from peer-to-peer without hitting a central server again. Now, the central server is merely orchestrating rather then dictating.
The author (author of flask, werkzeug, ...) is probably on the forefront of things, so while you may not find that this model is useful yet, it's prudent to watch as it will become more prominent in the next couple years.
[1] Phones are getting more powerful and computers/laptops already feel like overkill for the youtube/redditing etc that we do. Networks are not slowing so much as wireless connections are getting clogged as more people are overloading cell providers.
One way you could get around it would be some kind of time based key like an RSA token. That way each of the servers would know all of the tokens a priori and you only accept that token for a limited period of time. Not perfect, but you still benefit from not being tied to your database.
However, it would be interesting to get rid of the client/server dichotomy and use WebRTC between clients.
Discussed here: http://tools.ietf.org/html/rfc6151
HMAC offers some level of protection against collision-weak hash functions, and that's why you can still use HMAC-MD5 today and be pretty OK (although I don't recommend it!).
It is `message = payload + "." + MD5(payload + secret_key)` though, so it is not vulnerable. The attacker cannot extend the payload part.