A plain-English explanation of the servers, the software, and the real performance numbers — written for people who don't write code for a living.
A VPS (Virtual Private Server) is a rented computer in a data centre that runs 24/7 and serves the website to anyone who visits. Think of it as a dedicated employee who answers every visitor's request around the clock. The three specs that matter most are CPU, RAM, and storage.
| Spec | VPS 1 — Old | VPS 2 — Current |
|---|---|---|
| CPU cores | 1 core | 2 cores |
| RAM | 2 GB | 8 GB |
| SSD Storage | 25 GB NVMe | 100 GB NVMe |
| Web server | App only | App + Nginx |
1 CPU core
One chef in the kitchen. Every order is prepared one at a time. When traffic spikes, a queue builds up — earlier customers wait while the chef finishes the current dish.
2 CPU cores
Two chefs working in parallel. When 200 people arrive at once, both cores handle requests simultaneously, halving the time customers spend waiting.
2 GB RAM
A small counter. The chef can only keep a few ingredients out at once — room for the app, the database connections, and not much else. Adding features risks running out of space.
8 GB RAM
A large counter. The app, the AI semantic search engine (Ollama), nginx, and the database can all run simultaneously without competing for space. Comfortable headroom for growth.
25 GB
A small pantry. Fits the operating system, the app, and an early-stage database. Once the article archive grows, there is no room to expand without migrating everything.
100 GB
A spacious pantry. Years of articles, uploaded images, AI model files (Ollama), and database backups fit comfortably. NVMe means reads and writes are extremely fast — no spinning hard drive delays.
Nginx is a piece of software that sits in front of the Go application and manages every incoming visitor before the app ever sees them.
Nginx handles the HTTPS padlock encryption so the Go app doesn't have to. Every visitor's connection is encrypted without the app lifting a finger.
CSS, JavaScript, and image files are served directly by Nginx from disk — without the Go app being involved at all. Faster for the visitor, less work for the application.
When 200 visitors arrive at once, Nginx accepts all their connections instantly and queues requests to the app in an orderly way — preventing the app from being overwhelmed.
Nginx compresses responses before sending them to the browser, reducing how much data travels over the network. Pages load faster on slower connections.
These numbers are from a live load test: 200 simultaneous users, each making 50 requests as fast as possible — 10,000 total requests per run. Like sending the entire audience of a medium-sized concert to the website at the exact same moment.
| Metric | VPS 1 — no nginx | VPS 2 — before nginx | VPS 2 — with nginx |
|---|---|---|---|
| Requests/second | 251 | 452 | 466 |
| Avg. response time | 756 ms | 207 ms | 147 ms |
| Slowest response | 1,013 ms | 2,447 ms | 652 ms |
| 99th percentile | 925 ms | 392 ms | 273 ms |
| Failed requests | 0 | 49 timeouts | 66 timeouts |
| Test duration | 41 s | 17 s | 15 s |
faster average response time compared to the old single-core server (147 ms vs 756 ms).
reduction in worst-case response time (652 ms vs 2,447 ms before nginx was configured).
requests handled per second — equivalent to serving over 1.6 million page views per hour from a single mid-range server.