title: How to maintain strong consistency in distributed computing?
body: <p>For example I have Master(M) and Slave1(S1) and Slave2(S2). If I do synchronous replication as below,</p>
  
  <ol>
  <li>Update Master, and lock the write  </li>
  <li>replicate Slave1 and Slave2   </li>
  <li>unlock the write of Master.</li>
  </ol>
  
  <p>But the above is not strong consistency.</p>
  
  <ul>
  <li>Scenario 1, when both replicates for S1 and S2 are successful,</li>
  </ul>
  
  <p>The users reading Slave1 or Slave2 can get different values at certain moment.</p>
  
  <ul>
  <li>Scenario 2, replicate S1 successful, but replicate to S2 fails.</li>
  </ul>
  
  <p>In this case, Master should cancel the write to S1. But users may already read it.</p>
  
  <hr>
  
  <p>So it's hard to maintain strong consistency. Therefore, what algorithms do companies use to maintain strong consistency if it's necessary?
  How to make the eventual write value be <strong>visible to clients at the exact same time</strong>?
  Thanks.</p>