<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Concurrency on Percona Community</title><link>https://percona.community/tags/concurrency/</link><description>Recent content in Concurrency on Percona Community</description><generator>Hugo 0.168.0</generator><language>en</language><lastBuildDate>Thu, 15 Oct 2026 12:15:00 +0000</lastBuildDate><atom:link href="https://percona.community/tags/concurrency/index.xml" rel="self" type="application/rss+xml"/><item><title>Retry-safe webhook ingestion with PostgreSQL: duplicates, concurrent requests and old snapshots</title><link>https://percona.community/blog/2026/10/15/retry-safe-webhook-ingestion-postgresql/</link><pubDate>Thu, 15 Oct 2026 12:15:00 +0000</pubDate><guid isPermaLink="true">https://percona.community/blog/2026/10/15/retry-safe-webhook-ingestion-postgresql/</guid><description>&lt;p&gt;&lt;em&gt;This is a synthetic laboratory example, not a customer production incident. AI assisted with drafting and checking the material.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A webhook sender cannot always tell whether a delivery worked. The receiver may commit a database transaction and lose the connection before returning a response. A retry then arrives for work that is already complete.&lt;/p&gt;
&lt;p&gt;Event IDs address that ambiguity, but they do not solve ordering. Two different events can describe the same object, and the older event can arrive last. A receiver that blindly replaces the stored state can move an order from a newer revision back to an older one.&lt;/p&gt;</description></item><item><title>PostgreSQL as a Workflow Engine: Building Reliable Long-Running AI Jobs Without Kafka</title><link>https://percona.community/blog/2026/09/16/postgresql-workflow-engine-long-running-jobs/</link><pubDate>Wed, 16 Sep 2026 11:00:00 +0000</pubDate><guid isPermaLink="true">https://percona.community/blog/2026/09/16/postgresql-workflow-engine-long-running-jobs/</guid><description>&lt;p&gt;Every document-processing system I have worked on arrives at the same shape. Something uploads a file, something else has to read it, run it through an extraction or inference step that takes seconds to minutes, and store a result. The work is slow, it fails sometimes, and the answer has to be auditable afterwards.&lt;/p&gt;
&lt;p&gt;The default advice is to put a message broker in front of it. That advice is not wrong, but it is usually given before anyone has measured whether the database already sitting in the stack can do the job. So I built the thing and measured it: a job queue inside PostgreSQL, four different claim strategies, workers scaled from 1 to 16, a worker killed mid-job on purpose, and query plans checked against a queue table buried under half a million completed rows.&lt;/p&gt;</description></item></channel></rss>