mirror of
				https://github.com/donnemartin/system-design-primer.git
				synced 2025-11-04 02:02:31 +03:00 
			
		
		
		
	Add Master-master replication section
This commit is contained in:
		
							
								
								
									
										30
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								README.md
									
									
									
									
									
								
							@@ -918,3 +918,33 @@ The master serves reads and writes, replicating writes to one or more slaves, wh
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
* Additional logic is needed to promote a slave to a master.
 | 
					* Additional logic is needed to promote a slave to a master.
 | 
				
			||||||
* See [Disadvantage(s): replication](#disadvantages-replication) for points related to **both** master-slave and master-master.
 | 
					* See [Disadvantage(s): replication](#disadvantages-replication) for points related to **both** master-slave and master-master.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Master-master replication
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Both masters serve reads and writes and coordinate with each other on writes.  If either master goes down, the system can continue to operate with both reads and writes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p align="center">
 | 
				
			||||||
 | 
					  <img src="http://i.imgur.com/krAHLGg.png">
 | 
				
			||||||
 | 
					  <br/>
 | 
				
			||||||
 | 
					  <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### Disadvantage(s): master-master replication
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* You'll need a load balancer or you'll need to make changes to your application logic to determine where to write.
 | 
				
			||||||
 | 
					* Most master-master systems are either loosely consistent (violating ACID) or have increased write latency due to synchronization.
 | 
				
			||||||
 | 
					* Conflict resolution comes more into play as more write nodes are added and as latency increases.
 | 
				
			||||||
 | 
					* See [Disadvantage(s): replication](#disadvantages-replication) for points related to **both** master-slave and master-master.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### Disadvantage(s): replication
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* There is a potential for loss of data if the master fails before any newly written data can be replicated to other nodes.
 | 
				
			||||||
 | 
					* Writes are replayed to the read replicas.  If there are a lot of writes, the read replicas can get bogged down with replaying writes and can't do as many reads.
 | 
				
			||||||
 | 
					* The more read slaves, the more you have to replicate, which leads to greater replication lag.
 | 
				
			||||||
 | 
					* On some systems, writing to the master can spawn multiple threads to write in parallel, whereas read replicas only support writing sequentially with a single thread.
 | 
				
			||||||
 | 
					* Replication adds more hardware and additional complexity.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### Source(s) and further reading: replication
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [Scalability, availability, stability, patterns](http://www.slideshare.net/jboner/scalability-availability-stability-patterns/)
 | 
				
			||||||
 | 
					* [Multi-master replication](https://en.wikipedia.org/wiki/Multi-master_replication)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user