Hi, you can use replication with the technique outlined in the 2-phase commit document. Secondaries in a replica set are eventually consistent with the primary.
You can use slaveOk or ReadPreference in your MongoDB driver to choose whether to read from secondaries or the primary. If you want to ensure that you are reading the transaction you just committed, then read from the primary, and make sure you're setting the safe=True flag on all inserts and updates.
The 2-phase commit technique will work the same in a sharded environment as non-sharded.