La sharding nella pratica è complicata perché raramente è possibile eseguire automaticamente (e quindi elasticamente nel cloud) la partizione del DB per bilanciare efficacemente le query di bilanciamento. In pratica si arriva sempre con zone calde e uno dei pochi modi in cui è possibile è progettare lo schema db che anticipa tali zone calde (che è qualcosa che l'elasticità cloud non ti darà).
L'altro problema con il sharding è la perdita di disponibilità di un frammento sul fallimento del nodo che trasporta il frammento. In genere, è necessario rinunciare a una coerenza rigorosa o alla disponibilità durante la condivisione. Potresti voler esaminare il teorema di CAP di Brewer che indica i compromessi che hai a fare quando si costruisce un sistema distribuito. In pratica, i sistemi distribuiti tendono a complicarsi con i sistemi intrecciati con diverse proprietà di disponibilità e coerenza.
Bottomline ... c'è poco automatico qui. La corretta progettazione dei componenti distribuiti può portarti molto lontano.