TIO enforces a very strict 64 process limit. I thought that was very generous.
And by very strict, I mean the entire request is nuked from orbit if it is exceeded.
The runner account is also limited to 128 processes in total (i.e., for all requests running in the same arena), so two Q# running at the same time would paralyze the arena.
DO also has firewalls now. I forgot about this (they added the feature just when I moved to Linode), so I should be able to make the private network a bit more private.
But with a load balancer, I think the arenas wouldn't even have to communicate that much any more.
The exception being cache.
A distributed cache is probably a bigger pita than keeping my own load balancer. The actual redundancy (the web server is still a single point of failure) and automated health checks would have been nice though.
A dedicated web server with a non-floating IP might restore Russian traffic. I think I'll be able to get a non-banned, non-floating IP if I try hard enough.
The web server is actually the only sever who's (non-floating) IP is banned.
The current setup relies on being able to swap quickly between servers, so kernel updates can be applied, one of the arenas can take over, etc. DNS is way to slow for that.
So if I make tio.run resolve to a non-floating IP, I lose all of that. And even though the droplet's own IP isn't blocked, tio.run still won't work in Russia if it resolves to a floating IP.
Hah, I just got a new floating IP, and this one isn't blocked!
@Dennis Currently Dyalog APL exits with strange error codes on TIO. Unicode always exits with 0 (except by interrupt or actual APL system crash) and Classic exits with 2 if everything is a-okay, but 0 if an error happened. What do you think of me adding a line to the wrapper such that no error gives 0 and error gives the APL error code (1-99) or maybe just 1?
@Dennis Yes, in the real thing (a REPL) you'd end with an error message (this you see on TIO too) and can investigate, including entering ⎕EN to see the error number. You need this number to set up a trap for the error.
@Dennis Classic doesn't do scripts at all, and the 2 means further REPL input was missing, while an error causes it to quit, so that's 0. Unicode just quits with 0 if scripted. However, the way we set TIO's wrapper up resembles REPL usage.
(even if it uses script mode underneath the covers, since script mode mixes code and stdin and therefore is pretty useless)