Which is to say, run some tests. You might just find that you’re getting enough performance out of your database that you can random-spray across your shards, have a stateless front-end and auto-scaled back-end and sleep sound at night because your nice simple system pretty well takes care of itself.
Tim (of Tim’s dumb affinity code fame) presented a shortcoming conclusion. Besides running some tests to evaluate several sharding alternatives, you also have to be employing talented engineers in your company, so they can adapt the system according to the dynamic needs of sharding.
And 50% of the traffic being generated by the top 10 clients is not much, when compared with the Pareto principle that these situations usually fall into.