700 karma · joined August 7, 2013
Another point worth mentioning is that, single transaction coordinator model is undervalued in community. Majority of systems have the following query pattern (sorted descending):
1. Single key read --> you don't need to contact coordinator
2. Single key write --> you don't need to contact coordinator. OCC with simple version number works here.
3. Multi-key asynchronous write (updating second, third keys using a pub/sub infrastructure) --> you don't need to contact coordinator in this case.
4. True multi-key transactions that should happen atomically --> need to contact coordinator
If a single coordinator can process 20-30K/s transactions of category 4, then total throughput of the system would be around 300K queries per second which is sufficient for many workloads.
In Bookkeeper, one producer can fence the current active producer from appending to log. If majority of Bookkeeper nodes respond with OK to a FENCE request, then the current producer can not append to the log. This helps implementing master-slave database replication quiet trivial. Master keeps appending to log, and slaves keep reading from log. In case master fails, one of the slaves sends a FENCE request to Bookkeeper nodes which reliably blocks current Mal-functioning master from appending to db log.
However in Kafka, this isn't a native operation. Any client can push to a topic. There is no easy way to safely do this.
I was looking forward to see how Twitter team actually handled this specific use case.
So technically they are better than Kafka. But as the article mentions, they just used SSDs to get around this issue in Kafka. By looking at article the only valid reason to switch to Kafka seems to be KStream.
How did you solve producer fencing mechanism which was built into Bookkeeper with Kafka (Assume I need to limit only one client to be able to write to a topic)?
1. Wasn't it simpler to just store the Key/Pointer(Offset) in RocksDB and put the values in the value log? Then the whole database just becomes a simple wrapper on top of RockDB(or whatever K/V database) with bunch of files as value log.
2. Why 16 bytes for value pointer? 8 bytes is sufficient.
3. If LSM size is around 5GB, screw LSM. I would rather use a simple immutable HashTable which gives you consistent snapshot out of the box for persisting to disk. Every 15 minutes launch a thread to serialize the index to disk.
Am I missing something or there is some more detail missing? I mean the reasoning to write a whole database from scratch isn't convincing.
Sure. That's one of the responsibilities of a team lead: to help team members to work and gradually build up their CVs. I want my team to experiment new stuff and learn while working. But I also want to limit the risk boundary. The whole reason why younger people are leaving dinosaur companies is that no one in management layer lets juniors experiment and fail. End of the day junior devs also want to improve and develop.
1. Parallel recovery when a node fails
2. Limited read capacity of multiple consumers reading different parts of the log.
Log Device from Facebook also addresses these issues.
Most probably yes. Since IPv6 is deployed more on consumers side rather than enterprises. So it's not surprising that over the weekend IPv6 traffic hits a peak.
I can't stop myself comparing people. :D
1. Going from bad to good requires x amount of effort/persistence.
2. Going from good to best requires 1000x amount of effort.
When you've put 800x amount of effort, you'll realize this harsh bitter fact. You have already given up on your hobbies, family, social life, ... and you are still considered as "good+" not "best-". To bypass being-best-barrier you need more than persistence.
Things like IQ, family wealth, great coach, ... matter when you are approaching near top of the hill.
I'm about to finish my master thesis. I implemented a couple of ideas collected from multiple papers in my thesis, and I can say all of those absolutely stunning results were just intelligently crafted experiments that are not applicable elsewhere.
Basically, my whole thesis is just to show that some paper was wrong and the idea is not applicable in another experiment.
Your criticism regarding functionality might be true, but there is no reason for competitors to charge more.
I'm just a simple email user -- 50 emails per week -- and I don't keep them in my inbox. As soon as I'm done with them, I delete them. A simple 50MB inbox is sufficient for me. I just need an ad-less mail box. For me anything beyond 5$/year is expensive as hell.
- There is no many-to-many log recovery whereas -- for example in Pulsar/DistributedLog -- logs are stored in small segments and distributed to multiple nodes.
- Read scalability. Since all the log is stored in one node (with some replicas) the readers are bound to single disk sequential read capacity. Again Pulsar stores logs in segments that are distributed among broker nodes which helps a lot when there are many readers.
- Cross vendor replication which makes migration much easier.
- No dependency on vendor provided replication protocols.
- Ability to use in-app databases such RocksDB, SQLite, ...
- Upgrading DB nodes becomes way easier since they are totally separated from each other.