Define the APIs expected from the system. This is your chance to analyze and define the read and write paths so that you can come up with the high-level design...
Game Data goes into the data pipeline. It's events like, "X player received a ball and succeeded in a pass" or "Y player scored a goal". Let's use protobufs. Each event has gameID, and a oneof GameEvent. This lands into a FIFO queue, where each queue represents 1 game.
From the queue begins the data processor we can either use a realtime streaming technology here, like spark/flink, but based on the speed and complexity we'd rather use servers with an Actor Model instead (like Akka). Games are stateful with rich historical context, requiring more than just a bunch of context-independent workers. Each "Game" and "player" will be actors, and the messages will be things that happen in that game or to particular players. That way, we can highly complex, low latency, inherently distributed logic about what happens in each game. It also reads and writes a historical record of every game to a document database (not relational, because of the sparseness of data and unstructured nature of supporting many kinds of sports).
Next, that fleet of Actors publishes to another queue notifications that need to happen. This is our messaging microsevice. It also writes to our a database that supports our web microservice.
Messaging MicroService:
Web Microservice: