4 ms·
The proof only shows that you can't get all three CAP. You can get any two out of three though. In practice, partition tolerance is the most important property
by apengwin 8y ago
The proof only shows that you can't get all three CAP. You can get any two out of three though.
In practice, partition tolerance is the most important property to have, since there's no point in having a distributed system if it can't function if any part of the system is down (it has to be fault tolerant).
- Chickenosaurus 8y agoPartition tolerance isn't about a system's behavior when some part of the system is down. Partition tolerance is about preventing diverging state in multiple sets of nodes that can't reach the nodes in another set, usually because of networking problems.
- snazzybazzy 8y ago>when some part of the system is down >usually because of networking problems. In distributed systems, those are the same thing. If I am a node -- n1, communicating with various other nodes, the only way I can tell if another node -- n2 is alive or not, is sending messages to it and receiving responses. If the network is having issues and I can't communicate with it, for all intents and purposes, that node n2 is down from my perspective n1. Edit: Also, diverging of state relates to consistency and not partition tolerance.
- danbruc 8y agoThere is a difference. If you can not communicate with a group of nodes they may still process requests if they are just unreachable and not down. So you must assume they are up and potentially processing requests instead of assuming they are down and not causing any trouble if you care about consistency.
- fjsolwmv 8y agoPartition tolerance is about preventing inconsistency (as you say) OR availability (turn off the system when it partitions). That's what the CAP theorem is about. You can get partition tolerance at the expense of availability,for by refusing writes during a partition.
- MaxBarraclough 8y ago> partition tolerance is the most important property to have, since there's no point in having a distributed system if it can't function if any part of the system is down This is really a question of definitions, no? If partition-tolerance is a defining property of a distributed database system, then of course they all have it. Plenty of database systems don't have partition-tolerance: non-distributed database systems.
- danbruc 8y agoPlenty of database systems don't have partition-tolerance: non-distributed database systems. Non-distributed database systems are inherently partition-tolerant because they can not break into partitions in the first place.
- annabellish 8y agoPartition tolerance is not a defining property of distributed systems, just a very valuable one. You only really want to sacrifice partition tolerance if the precise correctness of your data is not tremendously important. A CA system can always respond and appear correct, but network partitions result in desyncs. I believe this approach is fairly popular in video games, where a CA system for multiplayer can provide each client with a coherent gameplay experience at the expense of things just breaking if a partition forms. Sorry, game over, please try again. Most serious systems, though, require P. One potentially interesting example that uses the current fashion of the day could be to compare payment networks. Visa's distributed payments system is CP, which is to say that it's a consistent system and getting a successful response back means your payment has gone through, but you have no guarantee of getting a successful response. The bitcoin network is AP, which is to say that it's a highly _available_ system which will never fail a response (so long as you can reach one node), but getting a successful response is no guarantee that your payment has gone through. In all cases, the sacrificed letter is not gone, merely imperfect. This does not mean that Visa is not Available, it just isn't _perfectly_ Available. It does not mean Bitcoin is not Consistent, it just isn't _perfectly_ Consistent. It does not mean that your video game is not Partition Tolerant, it just is not _perfectly_ Partition Tolerant. You can sacrifice any of the three and still have a distributed system, it will just behave differently.
- lucio 8y agoIf partition tolerance is the most important property to have, you can have it, as long as you don't need "C", consistency.
- fjsolwmv 8y agoThere's no point in having a system if it's not available. There's no point in having a system if it gives incorrect answers (inconsistent). In the real world, you have to make tradeoffs. Partition tolerant is "most important", it's awkwardly factored out of Availability -- "tolerant" is a variant of available. Your system can't be "partition intolerant "just because that means "not always unavailable". Another way of looking at it is what you imply: "partition tolerant" is a synonym for "distributed".
- ithkuil 8y agoIt seems you think about partition tolerance in terms of whether the whole system tolerates a partition. Usually partition tolerance is intended as the ability of every single node to accept operations (e.g. new writes) even if said node is on the minority side of a partition, and still operate within specs (i.e. the database offloads consistency problems to the application, usually also guaranteeing some form of eventual consistency)