« Tüm yayınlar

Postgres Kuyrukları Gerçekten Ölçekleniyor: 30K İş/Saniye

DBOS, SKIP LOCKED, koşullu izolasyon seviyeleri ve kısmi indekslerle Postgres kuyruklarını saniyede 30K işe ölçekledi.

Postgres tabanlı kuyrukların büyük yükleri kaldıramayacağı, bunun yerine RabbitMQ veya Redis gibi özel sistemlere geçilmesi gerektiği yaygın bir kanıydı. DBOS ekibi, bu kanının aksine, doğru optimizasyonlarla Postgres kuyruklarının binlerce sunucuda saniyede 30 bin iş akışı işleyebildiğini gösterdi.

Üç temel optimizasyon bunu mümkün kıldı. İlk olarak FOR UPDATE SKIP LOCKED kilitleme cümlesi, aynı satırları aynı anda çekmeye çalışan işçiler arasındaki çekişmeyi ortadan kaldırdı. İkincisi, işlem izolasyon seviyesinin koşullu hale getirilmesi: genel akış kontrolü gerektirmeyen kuyruklar için REPEATABLE READ yerine READ COMMITTED kullanılarak yüksek eşzamanlılıkta yaşanan serileştirme hatalarının önüne geçildi. Üçüncüsü, ikincil indekslerin sıralı ve kısmi (partial) hale getirilmesi; bu sayede sorgu sırasında ekstra sıralama gereksinimi ve autovacuum'un indeks bakım yükü büyük ölçüde azaldı.

Bu değişiklikler mühendisler için önemli çünkü mevcut Postgres altyapısını yeni bir kuyruklama sistemine geçmeden ölçeklendirmenin mümkün olduğunu gösteriyor. SKIP LOCKED, koşullu izolasyon seviyeleri ve seçici indeks tasarımı, yüksek verimli iş kuyruğu sistemleri kurmak isteyen herkes için tekrar kullanılabilir bir model sunuyor.