zlacker

[parent] [thread] 8 comments
1. daenz+(OP)[view] [source] 2021-12-18 00:41:26
The transaction feature seems nice but how often is your application dropping queue messages because something happened between tx.commit() and queue.send(msg)? My experience has been that this is not an issue.
replies(3): >>peterh+32 >>NavinF+j7 >>travis+eb
2. peterh+32[view] [source] 2021-12-18 00:59:27
>>daenz+(OP)
If you're big enough to worry about the scalability of Postgres, you're big enough to experience this failure fairly often IMO.
replies(1): >>daenz+x2
◧◩
3. daenz+x2[view] [source] [discussion] 2021-12-18 01:04:30
>>peterh+32
Scalability was the second of two concerns I listed. The first was additional application complexity that real message queues hide from you by virtue of being a system built for that usage pattern.

>you're big enough to experience this failure fairly often IMO

Please explain how? You would either have to suffer from frequent network connectivity issues that affects only your db and not your queue, or your process must be mysteriously dying in the microseconds between those 2 operations. Either of those cases are not something I would consider things that happen "fairly often," even if you were processing trillions of messages per day.

In my experience, the vast majority of message processing failures happen at the worker level.

replies(1): >>peterh+We3
4. NavinF+j7[view] [source] 2021-12-18 01:41:10
>>daenz+(OP)
Oh that happens fairly often. In fact, some message will be lost every time your queue server reboots due to a power outage, PSU failure, kernel panic, OOM, etc. (Unless it spends almost all of its time idle in which case I guess no messages will be in flight)

You’re guaranteed to break the invariant sooner or later so you end up with all the usual complexity of keeping stuff in sync.

replies(1): >>daenz+T7
◧◩
5. daenz+T7[view] [source] [discussion] 2021-12-18 01:46:02
>>NavinF+j7
Your queue server rebooting is completely orthogonal to whether the application submitting the message can do so atomically or not. Use a cloud service if you care about durability.

Edit>> I see you edited your post after I responded. None of those scenarios qualify as "fairly often."

replies(1): >>VWWHFS+ne1
6. travis+eb[view] [source] 2021-12-18 02:18:56
>>daenz+(OP)
I am SUPER worried about this when it affects something really important, like getting the client/customer/merchant/cardholder their money. It seems like the world has moved on without me —- “ohh, three nines is enough”… “hrmmm maybe?…”
◧◩◪
7. VWWHFS+ne1[view] [source] [discussion] 2021-12-18 15:01:50
>>daenz+T7
Wish we would stop saying "use a cloud service" for everything. People can and do operate their own hardware, manage their own databases, and build and maintain their own application stacks. I don't know how we got to this point of learned helplessness where now we just have to use cloud providers for everything.
replies(1): >>daenz+pi4
◧◩◪
8. peterh+We3[view] [source] [discussion] 2021-12-19 09:49:23
>>daenz+x2
If the queue goes down you end up updating the db without enqueuing a job and now an engineer needs to go in and re enqueue the missing jobs manually.
◧◩◪◨
9. daenz+pi4[view] [source] [discussion] 2021-12-19 18:28:10
>>VWWHFS+ne1
It's not learned helplessness to avoid re-inventing the wheel. At the end of the day, the goal is to deliver value to customers, not invent a queueing system, unless your company's product is queueing systems.
[go to top]