Hey jaren hope things are well at Robinhood. Good question, there's a diagram on what a default deployment looks like alongside the M3 v1.0 announcement
https://medium.com/chronosphere/m3-v1-0-released-a-productio... and in depth documentation on the website
https://m3db.io/docs/overview/.
Storage, aggregation and compute are all separate and scale up/down independently. The coordinator and query services are both stateless and you just add more instances, DB nodes do not do compression/decompression for instance all this happens as part of computation on the query service.
M3DB for storage has a k8s operator that can manage clusters (expansion, etc), and the M3 aggregator can be deployed as a stateful set in k8s and also can be independently expanded.