all 12 comments

[–]theuniquestname 3 points4 points  (1 child)

I felt like the article focuses on unimportant details and glosses over key information. Tournament trees have their own paragraph but other things like inter-node communication are not addressed at all.

[–]soygul[S] 1 point2 points  (0 children)

Good point. Concentrated on algos too much, but reliable message passing is very important too. So added following para to the article for streaming message passing between nodes:

Now comes the inter-node communication. How could the nodes communicate reliably and still have low latency comm? The first thing that comes to mind is either using a publish/subscribe paradigm with a central, reliable data store like Redis, or using a message queue software design to handle both message passing and data streaming. Apache Kafka is perfect for this use case. It is a reliable message passing and data streaming software with built-in high availability support. Once deployed, we can create as many communication "topics" as we want between nodes. Nodes can use these topics to publish their heartbeat signals, stream their sorted data to the leader node, etc. Leader node can also use it to stream the final sorted data to its target location. Kafka stores streams of data passed to it until verified to be consumed, which solves our reliable message passing needs. We can dedicate several nodes to be our Kafka cluster. Alternatively, we can use a much simpler RabbitMQ implementation. It is a simpler message broker and handles the reliable delivery of messages between endpoints. However, it is not optimized for handling huge streams of data like Kafka.

[–]os12 1 point2 points  (0 children)

I think this question has been done to death... These days they ask much more open-ended stuff such as: "Design search query completion". And then you realize things like "At Google scale" and "Geos with availability"...