Hacker News new | ask | show | jobs
by fulafel 2790 days ago
Web applications can be surprisingly complicated distributed systems, when you take into account..

- the JS frontend that communicates with AJAX and/or WebSockets IPC with the backend

- the backend may actually be a bunch of microservices

- the fact that there are many concurrent frontends (users)

- messages from frontends may end up reordered/dropped/rerouted on their way to different backend ipc channels (microservices or replicated backend)

- the frontends are untrusted (the user or browser may tamper with your code running there)

- the backend server is also often replicated / sharded

- there are caches (think Redis) that the backends share in addition to the main DB.

- load balancers, high-availability reverse proxies with various failover propreties, etc

- various caching behaviours that are only partly under your control (browser-side content caching, DNS, etc)

- all of the above are interconnected over unreliable channels

- there are secrets and security involved so functional assurance ("pressing button X always makes function Y happen") doesn't tell you enough

(I have no TLA+ experience so can't say how one would use it with a web app, though).