5 ms·
I have been happily using a pure Go stack. That includes Go's built in templates, and web server. I compile the entire application into a single binary and rsyn
by llmblockchain 2y ago
I have been happily using a pure Go stack. That includes Go's built in templates, and web server. I compile the entire application into a single binary and rsync it to the server. Then I restart the systemd service which picks up the new binary.
It's incredibly simple and old school. No kubernetes, docker, cdns, etc.
Write code, build binary, ship binary.
- codegeek 2y agoI love this stack and using it for my personal blog. But that gets very low traffic. Are you using this in production and at what level of traffic including DB writes etc. Would you be able to share some numbers if possible ?
- llmblockchain 2y agoI have two SaaS products using this stack, and my personal site. The SaaS products get decent traffic (millions of requests every month, thousands of requests per-minute). I use Postgres for everything and I have no complaints. I'm no Google, but it has been holding up very well (I've never had any issue with CPU, memory or anything). My simple release strategy does come with potential downtime, but the shutdown and start up are so fast it's very minimal.
- dakiol 2y agoHow do you release a new version of your service/app? Do you aim to do zero-downtime deployments? If so, how? The biggest issue I find is that doing zero downtime deployments on the same machine/server is a bit pita because of the port used by the service (cannot have a canary and a primary service running at the same time on the same port)
- llmblockchain 2y agoHonestly, I don't aim for zero downtime deploys. I simply don't care if I have a few seconds of possible service interruption during a deploy. If I did, I'd keep it simple. I use Nginx in front of the Go server. I'd likely use the Nginx server as a load balancer and replace each Go service one at a time to have no downtime. It doesn't matter how many ports you use as long as Nginx knows the port range. It will distribute the incoming requests to the Go processes. edit: For those wondering why I use Nginx. It's where I terminate SSL and I also use it for simple gzip/compression/caching for outgoing resources. I don't use Caddy or anything else. I've used Nginx for many years and it just... works.
- drakonka 2y agoThis is mine as well; I haven't worked with Go professionally in a few years, but have very fond memories.