cores, processes, and time. • A queue of discrete requests/jobs/transactions and workers which can complete this work • A slew of concurrent, long lived connections
◦ In-stream decisions ◦ Reason people get Cisco qualifications ◦ SPoF (can be mitigated) • Software ◦ Plethora of options ◦ Performance tradeoffs ◦ More cleverness ◦ More deployability
◦ Make decisions based on latency, worker load, geography, etc. (e.g. ELB) ◦ Dynamic: see Varnish DNS Director and Nginx Resolver / Nginx lua ◦ Hash Based: Consistent hashing based on incoming request data: see haproxy map Links: http://rapgenius.com/James-somers-herokus-ugly-secret-lyrics
requestors to the same backend worker ◦ Source IP ◦ Cookie-based ◦ How does this work in high availability? • Non-sticky: don't stick to backend workers ◦ Means you have to be clever about shared session state
not too much • Check that you're getting a valid response from the backend ◦ not just that port 80 is open ◦ is it accepting http? ◦ is the page loading? ◦ is it loading correctly (ie, is the DB up?) • Build a url which gives you good health indicators, and tell the LB to check it • Spend time configuring your LB error pages