| ▲ | thruway516 2 hours ago | |||||||||||||||||||||||||
Yes. Now do it on a production level distributed system with thousands of request per second with network latency and network failure and every race condition you can think of. Orders of magnitude more difficult. | ||||||||||||||||||||||||||
| ▲ | mrkeen an hour ago | parent | next [-] | |||||||||||||||||||||||||
I'm skeptical in the opposite direction (i.e. too difficult to have been solved) I believe there's a tension between high-throughput (distributed) and centralised (id++), and I'm not sure it can be wished away. I built a paxos implementation that could assign values to sequential keys. It runs at a decent speed when there's no contention, but slows down when different paxos nodes are asked to assign to the same key (they argue and retry etc.). A partial solution is to use a leader (i.e. putting id++ on one node), which prevents that kind of chatter. Another partial solution is topics/partitions (which is just a fancy way of keeping independent id++ counters that don't interfere with one another.). I don't count this as a solution because it's morally equivalent to running multiple clusters that don't know about each other. I can't quite picture the bookkeeping that would let 10 nodes record contiguous ids without paying the centralisation cost. | ||||||||||||||||||||||||||
| ▲ | QuantumNomad_ 2 hours ago | parent | prev [-] | |||||||||||||||||||||||||
I don’t understand either. If I have three machines, all getting a slice of 300 ids each at the same time (same timestamp bits), then there is no way to tell how the total 900 ids are supposed to actually be ordered in terms of what time they happened exactly. You only know the order of each group of 300, but not how the items from the three groups interleave with each other. So then what’s the point of having the timestamp oracle in the first place? | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||