title: How to implement sharding?
body: <p>First world problems: We've got a production system that is growing rapidly, and we are aiming to grow our user base even more.  At peak times our DB is flatlining at 100% CPU, which I take as an indication that it's pretty much stretched to the limit.  Being an AWS instance, we could always throw some more hardware at it, but long term, it seems we will need to implement sharding.</p>
  
  <p>I've Googled all over and found lots of explanations of <strong>what</strong> sharding is, <strong>why</strong> it is a good idea under certain circumstances, <strong>what</strong> design considerations, etc... but not a word on the practicality of <strong>how</strong> to do it.</p>
  
  <p>What are the practical steps to shard a database?  How do you redirect queries to the appropriate shard?  And how do you run reports that require data from all shards?</p>