3 ms·
Works better than ever. If anyone ever asks how my search engine, running on consumer hardware and hosted off domestic broadband, how it survives the hacker ne
by marginalia_nu 3y ago
Works better than ever. If anyone ever asks how my search engine, running on consumer hardware and hosted off domestic broadband, how it survives the hacker news front page time and time again without the load times even deteriorating a bit, while many other websites that are ostensibly static in nature tend to keel over?
Then the answer is something like this.
* nginx
* Java
* Macroservice architecture
* Vertical scaling
* Server-side rendering
* Minimal javascript, no session cookies. These things bump the cost of each page-load.
* /var/log with relatively sparse logging in the sunny day path
Like this is a pretty strict design philosophy. You can probably do more JS and front-end stuff than I do, but it should be understood it's not free. My page loads incur for the most part a single request each. There are websites where each page load incurs hundreds of requests. It's worth repeating: Back-end requests are not free. They are cheap, but they are not free. When you have a dozen users and they incur a few thousand requests, that may be within what your server can deal with. When you have a thousand users and they incur hundreds of thousands of requests, it's probably not as fine.
- Tade0 3y agoLet's also not forget that browsers generally limit the number of requests they send at a time - IIRC the current limit is 6, so a site may be slow just because it sends many requests. Even (or maybe especially?) popular products like Gmail are guilty of this, sending easily over 200 requests. That's 700ms(!) worth of stalled requests in the best case scenario.
- marginalia_nu 3y agoHTTP/2 does mitigate this a bit, I think it's mostly just a limitation in the number of threads. Even with pools or green threads, a CPU can only do so many things in parallel. Context switching is expensive.
- mdaverde 3y agoQuestion: how do you reliably deploy? And if it's just scp-ing tarballs, how do you handle dependencies? Do you run & upgrade any third-party processes that rely on having their filesystem or deps? Struggling with this because even in a small app in a Linode box, I don't mind just cp-ing my bins but there's always other things/versions they need. Thinking of bringing in Ansible to help me out here. Deploying feels easier in the container, Kubernetes world
- pdntspa 3y agocapistrano makes it pretty easy/repeatable, at least for me deploying RoR code onto my VPS All it is basically doing is a git pull, symlinking in the vendor code (gem) cache, doing all the rails preflight ceremony, and updating a "current release" symlink to point at the new folder. Oh and it restarts the servers (nginx, rails). At a previous job I had an 8-line shell-script that did almost the same thing and it worked for years.
- marginalia_nu 3y agoIf your problem is needing to synchronize a complex mesh of services when you upgrade stuff, the solution is to not have a complex mesh of services that needs managing. I have a dist-directory, in it is a directory for with each release version, and a symlink current pointing to the current release. To deploy a new version, I create a new directory, unpack each service, and then redirect the symlink ... then "systemctl restart service-name".
- mdaverde 3y agoJust read your article: https://www.marginalia.nu/log/09-system-upgrade/ https://www.marginalia.nu/log/09-system-upgrade/ You got rid of a lot but where did the functionality for those tools go? I understand wanting to get rid of containers & Kubernetes, but did you rewrite/bake the functionality in to your app? or maybe not care about monitoring and logs temporarily for now?
- marginalia_nu 3y agoI mostly just got rid of the functionality. I do logs with grep and monitoring with vanilla prometheus. Kubernetes and the surrounding ecosystem can create many of the problems they set out to solve.
- Capricorn2481 3y agoHow do you handle authentication without cookies?
- marginalia_nu 3y agoI don't.