Scaling a High-Traffic Rate Limiting Stack with Redis Cluster
brandur.org
brandur.org
So it's interesting to see a counterexample. What led you to go spelunking in nginx?
I used to read source-code specifically to look for security problems. Auditing of code as a small hobby. I found some fun issues over the years.
Reading code has become a habit these days. If I depend upon a library I try to glance at it. If I install a new application I try to have a read of some of it. It stops you from blindly depending on poor-quality software, and sometimes makes you choose an alternative.
Also, I have seen so many problems arise from the fact that code is easier to write than to read, so I consciously make an effort to not avoid reading code, and I’m sure that leaked over here.
I believe it was brought up in the keynote (which I missed unfortunately), and also as part of one of the Redis Clients talks.
The one thing I would note that doesn't seem to be covered is if you are using a relatively large Lua script and running eval over and over it's getting cached every time, instead `SCRIPT LOAD ...` can be ran, which spits out a sha1 which can then be ran with `EVALSHA (sha1) (keys) (args)`. This can potentially speed stuff up as well as cutting back on memory.
Plus, it's just plain fun to use.
It all seems a bit much. I've solved similar problems in the trading space (processing raw market data feeds) with much less.
It's interesting how different communities have their hammers and nails. Redis seems to have really taken over certain consumer-web-oriented communities. In other more enterprise communities I've seen people lean heavily on distributed cache products like Hazelcast etc. And in trading this sort of thing is so bread and butter and common that everybody has internal solutions.
The fintech industry is generally years ahead in performance but most companies will trade those solutions for easier dev/ops.
Touring a Fast, Safe, and Complete(ish) Web Service in Rust: https://brandur.org/rust-web
Scaling Postgres with Read Replicas & Using WAL to Counter Stale Reads: https://brandur.org/postgres-reads
Redis Streams and the Unified Log: https://brandur.org/redis-streams
https://www.envoyproxy.io/docs/envoy/v1.6.0/intro/arch_overv...
We've been using Memcache all while and have no desire to change that.
100 million set operations per second is not the same as 100 million counter increments etc.
I'm quite interested to see how they implemented a queueing solution without the new Redis Streams infrastructure.