49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								Small and Fast
							 | 
						||
| 
								 | 
							
								==============
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								We're targetting very tiny systems, so we have to
							 | 
						||
| 
								 | 
							
								be really small and really fast.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								We want to get from 0 to a listening socket as quickly
							 | 
						||
| 
								 | 
							
								as possible, so we have this little folder of boot
							 | 
						||
| 
								 | 
							
								code that uses no external modules and as few internal
							 | 
						||
| 
								 | 
							
								modules as reasonably possible.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* fs.readFileSync is fast (< 1ms)
							 | 
						||
| 
								 | 
							
								* v8's parser is pretty fast
							 | 
						||
| 
								 | 
							
								* v8's fast compiler is slow
							 | 
						||
| 
								 | 
							
								* v8's optimizer happens just-in-time
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Master
							 | 
						||
| 
								 | 
							
								======
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Master has a few jobs:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* spin up the reverse proxy (caddy in this case)
							 | 
						||
| 
								 | 
							
								* spin up the workers (as many as CPU cores)
							 | 
						||
| 
								 | 
							
								* manage shared key/value store
							 | 
						||
| 
								 | 
							
								* manage shared sqlite3
							 | 
						||
| 
								 | 
							
								* perform one-off processes once boot is complete
							 | 
						||
| 
								 | 
							
								  * SIGUSR1 (normally SIGHUP) to caddy
							 | 
						||
| 
								 | 
							
								  * watch and update ip address
							 | 
						||
| 
								 | 
							
								  * watch and update router unpn / pmp-nat
							 | 
						||
| 
								 | 
							
								  * watch and update Reverse VPN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Worker
							 | 
						||
| 
								 | 
							
								======
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Workers are the ones that master spins up to do the hard
							 | 
						||
| 
								 | 
							
								core stuff. They run the apis of the apps.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Low Mem
							 | 
						||
| 
								 | 
							
								=======
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								We need to profile very low memory devices and see if
							 | 
						||
| 
								 | 
							
								it is better to have just one process, or if master and
							 | 
						||
| 
								 | 
							
								worker is still okay over time.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The working suspision is that by occasionally starting
							 | 
						||
| 
								 | 
							
								up a new worker and killing the old one when memory usage
							 | 
						||
| 
								 | 
							
								starts to rise should fair pretty well and keeping
							 | 
						||
| 
								 | 
							
								the system stable.
							 |