Aside from a few external process calls there are now zero external dependencies required as part of the node.js boot process. Yay!
		
			
				
	
	
		
			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.
 |