I want the ability to "pause" HTTP traffic at a load balancer - so if you send a request it will look like it took a few extra seconds to respond, but actually the load balancer is holding it until the backend has been swapped out for a new version (for example) - what can I use?
Here's Braintree describing how they did that back in 2011 (original link is broken now but I have a quote on my blog) simonwillison.net/2011/Jun/30/br…
Presumably this is possible today using HAProxy or Traefik or some kind of nginx module... is there terminology for this that I should be searching for? "Pause traffic" doesn't appear to be a commonly used term
My goal is to implement seamless stateful container upgrades in a Kubernetes cluster, so I can pause traffic for a few seconds, replace the container and then finishing serving those paused requests
Since the containers have state running new and old at same time is best avoided
OK @caddyserver looks like it might be excellent for this
Here's an implementation of this pattern by Basecamp in nginx Lua:
"In our use cases, we 'hold' users requests for less than 10 seconds while we do our database maintenance via mysql_role_swap. The user sees a single long request, and things carry right along."
Trying to run two processes in a single Docker container on Cloud Run (Apache 2 and Datasette, to explore some reported bugs with mod_proxy) - urgh, this is so hard!
Found several recipes that work on my laptop but fail when I deploy them to Cloud Run github.com/simonw/dataset…
I'd love to figure this out because running two processes in the same container feels like a really useful trick to have in my pocket, but I may have to give up and run two separate containers instead - annoying when I'm just trying to provide a tiny interactive demo
I did get a new TIL out of this exercise - I figured out how to use the equivalent of "docker build --build-arg" with Google Cloud Build (you have to generate a cloudbuild.yml file and pass it to "gcloud builds submit --config") til.simonwillison.net/cloudrun/using…
I've had a bit of a breakthrough with this over the past couple of years: maintaining detailed progress notes in a GitHub issues comment thread has dropped my "getting back on track" time down to a fraction of what it was
The reason it takes 25 minutes to spin back up again is that you're holding a ton of stuff exclusively on your own memory - so write it down!
Something I've realized is that 90% of software engineering is research, not typing code - figuring out what the code needs to do, which APIs to use, how best to test it etc
So all of that research goes in issue comments. Here's my best recent example: github.com/simonw/s3-cred…
If I write a couple of KBs of data to the Biitcoin or Ethreum bloockchains that data still gets copied to every single active node, right?
Any estimates as to how much total disk space those 2KB take up worldwide?
Asking because evidently the idea of "storing data on the bloockchain" is a frequent point of confusion, I wonder if explaining how many copies that entails would help clarify things at all
In January 2021 there were an estimated 83,000 active full nodes, so presumably any data you write to the bloockchain gets duplicated 83,000 times? coindesk.com/tech/2021/01/2…
One of the biggest productivity tricks I'm using in the Datasette ecosystem is continuous deployment of live demos - every time I push to Datasette (+ a few other repos) it deploys a demo of latest main - it's fantastic for both catching bugs and linking to from issue comments
I've been working on the datasette-graphql plugin today and the live demo at datasette-graphql-demo.datasette.io/graphql helped me catch a bug where JS files were loading in the wrong order, breaking things - a problem that didn't occur on my laptop
@datasetteproj@EscolaDeDados To save attendees from having to get a working Python environment setup on their laptop, I instead encouraged them to use a free @gitpod account (gitpod.io) - I demonstrated each exercise in GitPod too
Cloud-based development environments are SO GOOD for tutorials
(I had planned to use GitHub Codespaces for this, but then realized that those are not freely available to non-paid users outside of the beta program yet)