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. |