TiDB CTO here, I think that a clear boundary between components is beneficial for the maintainability of a distributed systems like TiDB, and automated deployment tools like `tiup`(https://tiup.io) and the Operator of Kubernetes shield end-users from this complexity in order to maintain best practices in deployment. While still providing enough debugging details for advanced users.
That’s one of worst part of TiDB to be honest.
Single boundary with simple flag listing peers (or DNS SRV address) would bring you a lot of smaller companies and/or hobbyists who will contribute.
Having different parts written in different languages is awful too, because it brings some micro improvements (if any) but makes project look complex and scary for many new-comers :(
Single binary is for sure preferable but given that they have k8s operator shouldn't be too bad? CRDB also had its faults - their CDC to kafka had terrible reliability even on enterprise versions.