mirror of
				https://github.com/donnemartin/system-design-primer.git
				synced 2025-11-04 02:02:31 +03:00 
			
		
		
		
	Add Application layer section
This commit is contained in:
		
							
								
								
									
										37
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								README.md
									
									
									
									
									
								
							@@ -845,3 +845,40 @@ Additional benefits include:
 | 
				
			|||||||
* [NGINX architecture](https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/)
 | 
					* [NGINX architecture](https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/)
 | 
				
			||||||
* [HAProxy architecture guide](http://www.haproxy.org/download/1.2/doc/architecture.txt)
 | 
					* [HAProxy architecture guide](http://www.haproxy.org/download/1.2/doc/architecture.txt)
 | 
				
			||||||
* [Wikipedia](https://en.wikipedia.org/wiki/Reverse_proxy)
 | 
					* [Wikipedia](https://en.wikipedia.org/wiki/Reverse_proxy)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Application layer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p align="center">
 | 
				
			||||||
 | 
					  <img src="http://i.imgur.com/yB5SYwm.png">
 | 
				
			||||||
 | 
					  <br/>
 | 
				
			||||||
 | 
					  <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Separating out the web layer from the application layer (also known as platform layer) allows you to scale and configure both layers independently.  Adding a new API results in adding application servers without necessarily adding additional web servers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The **single responsibility principle** advocates for small and autonomous services that work together.  Small teams with small services can plan more aggressively for rapid growth.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Workers in the application layer also help enable [asynchronism](#asynchronism).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Microservices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Related to this discussion are [microservices](https://en.wikipedia.org/wiki/Microservices), which can be described as a suite of independently deployable, small, modular services.  Each service runs a unique process and communicates through a well-definied, lightweight mechanism to serve a business goal. <sup><a href=https://smartbear.com/learn/api-design/what-are-microservices>1</a></sup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pinterest, for example, could have the following microservices: user profile, follower, feed, search, photo upload, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Service Discovery
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Systems such as [Zookeeper](http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper) can help services find each other by keeping track of registered names, addresses, ports, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Disadvantage(s): application layer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Adding an application layer with loosely coupled services requires a different approach from an architectural, operations, and process viewpoint (vs a monolithic system).
 | 
				
			||||||
 | 
					* Microservices can add complexity in terms of deployments and operations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Source(s) and further reading
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [Intro to architecting systems for scale](http://lethain.com/introduction-to-architecting-systems-for-scale)
 | 
				
			||||||
 | 
					* [Crack the system design interview](http://www.puncsky.com/blog/2016/02/14/crack-the-system-design-interview/)
 | 
				
			||||||
 | 
					* [Service oriented architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture)
 | 
				
			||||||
 | 
					* [Introduction to Zookeeper](http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper)
 | 
				
			||||||
 | 
					* [Here's what you need to know about building microservices](https://cloudncode.wordpress.com/2016/07/22/msa-getting-started/)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user