Hi folks, I’m currently experimenting with methodologies on how to best implement a global load-balancing layer for my app servers on Digital Ocean and there’s a few pieces I’ve yet to put together.
Offer highly-available service to my users by routing all connections to the closest ‘cluster’ of
api servers in SFO, NYC, LON, and eventually Singapore.
Current Working Methodology
A (minimum) trio of
global-balancing servers receive all traffic. These servers are
DNS Round-Robin balanced as illustrated in this (frankly confusing) article:
How To Configure DNS Round-Robin Load Balancing.
global-balancing layer then routes the request to the
least connected server on the
load-balancing layer of the appropriate cluster:
lon-load-balancing-2, etc… This layer is also a (minimum) trio of droplets.
load-balancing layer then routes the request to the
least connected server in the app or api layer:
The details of the Nginx kung-fu can be found in this tutorial: Villiage Idiot: Setting up Nginx with GSLB/Reverse Proxy on AWS. It’s actually very cool.
Global Domain Breakdown
So once I rig everything up, my DNS would look something like this:
**GLOBAL** global-balancing-1.myapp.com global-balancing-2.myapp.com global-balancing-3.myapp.com **NYC** nyc-load-balancing-1.myapp.com nyc-load-balancing-2.myapp.com nyc-load-balancing-3.myapp.com nyc-app-1.myapp.com nyc-app-2.myapp.com nyc-app-3.myapp.com nyc-api-1.myapp.com nyc-api-2.myapp.com nyc-api-3.myapp.com **SFO** sfo-load-balancing-1.myapp.com sfo-load-balancing-2.myapp.com sfo-load-balancing-3.myapp.com sfo-app-1.myapp.com sfo-app-2.myapp.com sfo-app-3.myapp.com sfo-api-1.myapp.com sfo-api-2.myapp.com sfo-api-3.myapp.com **LON** lon-load-balancing-1.myapp.com lon-load-balancing-2.myapp.com lon-load-balancing-3.myapp.com lon-app-1.myapp.com lon-app-2.myapp.com lon-app-3.myapp.com lon-api-1.myapp.com lon-api-2.myapp.com lon-api-3.myapp.com
And then if there’s any strain on any given layer, in any given region, I can just spin up a new droplet to help out:
lon-load-balancing-5.myapp.com, etc… And thanks to Digital Ocean, our new benevolent supreme SaaS, this is quick and cheap to do.
Where do a I put the
It strikes me as odd that I would put them either all in one place, or spread that layer out around the globe either.
Say, for instance, I put them all in NYC. Then someone from France hits my domain. The request would go from France, to NYC, and then be routed back to LON.
Or if I put one of each in SFO, NYC, and LON then isn’t it still possible that a user from Toronto (Parkdale, represent) could send a request that ends up going to LON only to be routed back to NYC?
Do subsequent requests get routed to the same IP?
As in, if a user from Toronto sends a request that the
global-balancing layer determines should be going to NYC, does the next request from that origin go directly to NYC, or is it still luck of the draw that it will hit the nearest
global-balancing server (NYC in this case).
What about sessions?
Nginx to use the ip_hash; directive so it will direct the user to the same
api endpoint (a node process, in my case) but how will global balancing affect this, if at all?
Any DNS Examples? I’m not exactly a DNS expert (I’m currently trying to figure out why my CNAME records aren’t resolving) but I’m a quick study when provided with a solid example. Has anyone gone through this process before and can provide a sample of what the DNS records look like for a successful setup?
What about SSL/TLS?
Would I need a certificate for every server, or just for the three
global-balancing servers since that’s the only public-facing gateway?
If you read this whole thing then reward yourself with a cupcake. Thanks in advance for any help.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in Q&A, subscribe to topics of interest, and get courses and tools that will help you grow as a developer and scale your project or business.
Click below to sign up and get $100 of credit to try our products over 60 days!