News for hackers. Stuff that matters.
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by 0xbadcafebee on Tuesday April 11, 2023 @02:25PM (#35529136)
Why use something as complicated as SQLite? You can use a plain old set of directories and files as a queue, with sane, portable, exclusive, atomic locks, on any filesystem, with concurrent readers/writers. That's how we ran mail servers that handled millions (now billions) of messages a day, 20+ years ago.
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by nomel on Tuesday April 11, 2023 @02:50PM (#35529581)
Yeah, I'm super confused with this. Getting a few thousand per second seems relatively trivial, on an Arduino. Maybe there's something I'm missing here, or is this the abstractions that software lives at these days?
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by TedDoesntTalk on Tuesday April 11, 2023 @05:23PM (#35531770)
This limits simultaneous writes to the maximum number of open file handles supported by the OS. I don’t know what that is, but I don’t see how it can compare to a multiple multiplexed TCP/IP sockets.

When you’re writing billions of messages per day, I don’t see how a file system scales.

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by MobiusHorizons on Tuesday April 11, 2023 @08:56PM (#35533758)
Close the file handle if you aren’t actively processing the file.
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by TedDoesntTalk on Tuesday April 11, 2023 @09:01PM (#35533783)
That still allows for perhaps 3000-4000 simultaneous writes, depending on how many file handles are in use by other processes.
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by vidarh on Wednesday April 12, 2023 @03:44AM (#35536239)
On Linux, /proc/sys/fs/file-max has the maximum number of simultaneous open filehandles supported by the kernel. On my laptop this is about 1.6 million
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by Izkata on Wednesday April 12, 2023 @10:59AM (#35540865)
And mine is about twice that.

But also keep in mind every executable has at minimum its own executable as an open file. Picking a random python process I currently have running, lsof reports it has 41 open *.so files.

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by vidarh on Wednesday April 12, 2023 @11:07AM (#35541014)
Yes, but it's also highly unlikely that if you're trying to push transactions per second into that kind of range that you'd be doing it with individual processes per transaction. You'd also be likely to be hitting IO limits long before the number of file descriptors is becoming the issue.
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by quintes on Tuesday April 11, 2023 @03:46PM (#35530467)
Yep I’ve used this approach for file transfers/ messaging between two systems. Primitive but get the lock process unlock and move sequence working and it works for that kind of use case
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by Sesse__ on Tuesday April 11, 2023 @06:54PM (#35532805)
But your durability goes down the drain on power loss or similar. Files are _really_ complicated to get durable.
Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by mst on Wednesday April 12, 2023 @01:28AM (#35535373)
Solution: use a qmail install as the queue manager, and a custom mail server it relays to as a job handler.

There's already a spec for transferring SOAP over SMTP so the request/response part is already built for you.

(couldn't resist, sorry)

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by vidarh on Wednesday April 12, 2023 @03:40AM (#35536220)
Been there, done that. In production.

We ran a mail provider, and so had a heavily customised Qmail setup, and when we needed a queue we figured we might as well use that. Meant we could trivially do things like debugging by cc:'ing messages to a mailbox someone connected a mail client to, for example.

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by mst on Wednesday April 12, 2023 @09:18AM (#35539173)
My ISP days were not unsimilar, and had we a TARDIS it might be fun to go back to when both setups were still there and compare notes.

However, I'd hope the SOAP part made it clear I was exaggerating a little for effect :)

... also because the idea of the custom server meaning you could have the main system's qmail handle spaced retries based on SMTP status codes amused me.

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by vidarh on Wednesday April 12, 2023 @11:23AM (#35541314)
I mean SOAP fit right in with the zeitgeist of that era... I seem to remember we were sending XML (shudder), as we had quite a lot of other stuff using XML, but nothing as verbose as SOAP.

Our main CGI (yes...) written in C++ (I can hear you squirm from here) was also loosely inspired by CORBA (stop that screaming) in terms of "sort-of" exposing objects via router that automatically mapped URLs to objects, and which used XML for persistence and an XML based rendering pipeline (not that different from React components, actually, except all C++ and server side).

Hit all the 90's buzz words.

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by mst on Thursday April 13, 2023 @07:28AM (#35553826)
Yeah, I had quite a bit of XML flying around, plus the inevitable "all our vendors want to communicate via CSV over FTP", and some customer facing perl CGIs plus a daemon or two I'd written that usually spoke XML over TCP sockets.

Plus lots of NFS for the shared filestore that the qmail SMTP nodes and the courier/qmail-pop3d mail receipt nodes mounted.

Plus ... yeah, you can see why I thought we'd not find each others' setups -too- surprising.

So, no, not going to squirm, because I mean, yes, I know, but it all (mostly) worked and the customers weren't unusually unhappier with us than they are with any provider ;)

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by 0xbadcafebee on Wednesday April 12, 2023 @11:43AM (#35541630)
Sorry, I don't follow? SQLite also has durability problems on power loss. You can use exactly the same method that SQLite uses to flush data to disk. There is no need for a WAL because the queue operations are atomic, using rename() on POSIX filesystems (including NFS). There's no rollback of course, but you can recover items that are stalled in the queue. With a journaled filesystem, fdatasync() after each atomic operation, and battery-backed RAID, I can't imagine it getting more durable [in comparison to SQLite].

Interestingly, journaled rollback mode in SQLite is probably worse durability than the file/directory queue method. (https://www.sqlite.org/lockingv3.html#how_to_corrupt) (https://www.sqlite.org/atomiccommit.html#sect_9_0) It depends on the same system-level guarantees about the filesystem and hardware, except it also depends on POSIX advisory locks, which are fallible and implementation-specific; while the file/directory queue solely depends on rename() being atomic, which it always is.

Re:SQL Maxis: Why We Ditched RabbitMQ and Replaced It with a... by Sesse__ on Thursday April 13, 2023 @12:04PM (#35557577)
> Sorry, I don't follow? SQLite also has durability problems on power loss.

No, it doesn't. Once COMMIT returns, your data is durable.

> You can use exactly the same method that SQLite uses to flush data to disk.

Good luck with that! It took them about ten years to get it right, and the SQLite people are world class. (You can't just copy their code wholesale, since they have one file to worry about and your scheme has tons.)

> With a journaled filesystem, fdatasync() after each atomic operation, and battery-backed RAID, I can't imagine it getting more durable [in comparison to SQLite].

The problem is lack of imagination. :-) See https://danluu.com/deconstruct-files/ (and the linked papers) for an overview of all the things that can go wrong. In particular, if you only only ever fdatasync(), your files are not even guaranteed to show up after a power loss.