by saganus on 3/19/24, 2:56 AM with 118 comments
by west0n on 3/19/24, 3:55 AM
by KyleSanderson on 3/19/24, 7:23 AM
https://www.microsoft.com/en-us/research/blog/introducing-ga...
by oaiey on 3/19/24, 9:18 AM
Seems they have tons of internal need and are willing to share.
by jiggawatts on 3/19/24, 6:17 AM
For reference, something commonly used with IIS for ASP.NET apps was to have an out-of-process "session state" store, so that if the web app process restarted, users wouldn't lose their sessions and have to log in from scratch. Sure, you can put this somewhere central like SQL Server, but then every web page request sits there waiting for the session state to load before it does any processing at all. Session state is also typically locked in some way, which has all sorts of performance issues.
The typical current solution is to use Redis for both caching and session state, and this works... okay-ish. Throughput is high, sure, but Redis is a separate resource in Azure and is stupidly expensive. I really don't want to pay Oracle DB prices for something this simple. It's also a bit of a hassle to wire up.
In this article they talk about 300 microsecond response times, but that's irrelevant in any zone-redundant design because all Azure load balancers use random zone selection. So you'll have a web server picked in a random zone, then it'll contact a cache server in a random zone in turn. That server in turn may not have your key and have to contact yet another random zone to get your cache data! Your traffic ping-pongs between data centres. This introduces about 1-3ms of delays, up to 10x higher than the advertised numbers for Garnet.
The ideal scenario would be something like what Microsoft Service Fabric does: it has a "reliable collections"[1] service that runs locally on each host node and replicates to two other nodes. A web app can always read its cached values from the same physical host. The latency can be single-digit microseconds in some cases, which is thousands of times faster than any naively load balanced external service, no matter how well optimised.
I don't want 30% faster than Redis. I want 3,000x faster.
[1] https://learn.microsoft.com/en-us/azure/service-fabric/servi...
by lxe on 3/19/24, 3:42 AM
by caleblloyd on 3/19/24, 3:22 PM
I am having trouble understanding this. Why wouldn't they wrap that in a transaction internally for you, and make the command atomic? What other atomicity "gotchas" are there.
by giancarlostoro on 3/19/24, 3:53 AM
by mtmk on 3/19/24, 11:31 PM
It's also quite intriguing for me to see it's written in C#, as that's my native tongue. I'd be keen on dedicating some time to delve into the code.
by DonnyV on 3/19/24, 2:35 PM
"After thousands of unit tests and a couple of years working with first-party teams at Microsoft deploying Garnet in production (more on this in future blog posts!), we felt it was time to release it publicly" https://microsoft.github.io/garnet/blog
by ksec on 3/19/24, 4:07 PM
by cpressland on 3/19/24, 8:28 AM
by zokier on 3/19/24, 7:21 AM
by legulere on 3/19/24, 6:37 AM
Would be interesting to know why it was forked, why the changes can't be incorporated and wether FASTER continues to be developed
by Weryj on 3/19/24, 10:08 AM
by throwaway38375 on 3/19/24, 10:47 AM
I trust Redis to not do something weird with their licensing or pricing in the future.
Plus Redis has billions of production hours under its belt.
It's easier to install and understand.
by wokwokwok on 3/19/24, 5:00 AM
Of course, as a research project it doesn't have the same stability / support, etc. as redis, but I could easily imagine this rolling into a real product if it's popular.
...and as an MIT license, if nothing else, the code is a fun read. :)
[0] - https://github.com/microsoftarchive/redis?tab=readme-ov-file...