- PgDog, PostgreSQL’in önüne konulan bir proxy’dir; uygulamayı yeniden yazmadan bağlantı havuzlama, yük dengeleme ve sharding ile Postgres’i yatay olarak ölçeklendirir
- Mongo veya Dynamo gibi veritabanlarının var olma nedenini Postgres’in ölçeklenme sorunu olarak görüyor; 100 TB’tan büyük tabloları ve saniyede 1 milyon sorguyu işleyebilse başka veritabanına gerek kalmayacağını savunuyor
- PgDog, production’da saniyede 2 milyondan fazla sorgu işliyor, doğrulanmış kapsamda 20 TB’tan fazlasını sharding ile böldü ve GitHub Docker pull sayısı 1,4 milyonu aştı
- Üç kişilik ekip, Postgres tabanlı büyük ölçekli uygulamalar ve Instacart’ın Nisan 2020’deki 5 kat büyüme deneyimi üzerine; RDS, Aurora ve EC2’de Postgres sharding sorunlarıyla uğraştı
- Basis Set, YC, Pioneer Fund ve diğerlerinden 5,5 milyon dolar yatırım aldı; PgDog’u her ölçekte Postgres’i çalıştıran açık kaynak bir ürün olarak geliştiriyor
Yatırım ve ürün yönü
- PgDog’un geliştirilmesi, Postgres’in ihtiyaç duyulan tek veritabanı olduğu bakış açısıyla başladı
- Mongo veya Dynamo gibi veritabanlarının var olma nedenini Postgres’in ölçeklenme sorunu olarak görüyor
- Postgres 100 TB’tan büyük tabloları ve saniyede 1 milyon sorguyu düzgün biçimde işleyebilse başka veritabanı kullanılmayacağını düşünüyor
- PgDog, mevcut Postgres’in önüne bir proxy koyarak yatay ölçeklendirme sağlıyor
- PgDog, şirket içi ortamlar ve kullanıcının kendi bulut hesabı dahil her yere dağıtılabiliyor
- Docker imajını çekip
DATABASE_URLdeğerini değiştirdiğinizde işi PgDog devralıyor
Mevcut durum ve uygulama geçmişi
-
Mevcut durum
- PgDog, production’daki onlarca deployment ortamında saniyede 2 milyondan fazla sorgu işliyor
- Doğrulanmış kapsamda PgDog, 20 TB’tan fazlasını sharding ile böldü
- PgDog açık kaynak ve isteyen herkes dağıtabilir
- GitHub’daki Docker pull sayısı 1,4 milyonu geçti
- Yeni sürümler her perşembe çıkıyor
- Discord topluluğu büyüyor; her gün soru yanıtlanıyor ve destek veriliyor
-
Ekip ve güven dayanakları
- PgDog, üç kişilik küçük bir startup
- Ekip; altyapı mühendisi, uygulama mühendisi ve generalist rollerinden oluşuyor
- Ekip, Postgres geniş çapta ilgi görmeden önce bile Postgres tabanlı uygulamalar geliştirip bunları büyük ölçekte çalıştırdı
- Instacart’ta, şirketin Nisan 2020’de 5 kat büyüdüğü dönemde Postgres işletme deneyimi kazandı
- O sıradaki en büyük sorun, Postgres’in dakikada yüz binlerce market teslimat siparişini işlemesini sağlamaktı
- RDS, Aurora ve EC2 üzerinde Postgres’i sharding ile böldüler; temel ilkeler ve çok sayıda kodla gerçek sorunları çözdüler
- Aynı teknoloji bugün açık kaynak ürün olarak sunuluyor
-
Dağıtım modeli ve finansman
- PgDog’un geliştirilmesi bir pivot değil; tek hedef hâlâ Postgres ölçeklendirmesi
- PgDog, kullanıcının bulutunda, colocation rack’inde, şirket içi sistemlerinde ve dizüstü bilgisayarında çalışacak şekilde tasarlandı
- PgDog, bağımlılıklar veya gizli serverless maliyetleri olmadan ihtiyaç duyulan yerde çalışıyor
- CPU sağlayabiliyorsanız PgDog’un çok iş parçacıklı kodu tüm CPU’yu kullanıyor
- Postgres benimsenmesinin artmaya devam edeceğini düşünüyor
- Basis Set, YC, Pioneer Fund ve diğer yatırımcılardan 5,5 milyon dolar yatırım aldı; bu da birkaç yıllık runway sağlıyor
- Amaç, Postgres’in herkes için ve her ölçekte düzgün çalışmasını sağlamak
-
Enterprise edition
- PgDog’un Enterprise edition sürümü, AWS üzerinde daha kolay çalışması için geliştiriliyor
- Enterprise edition, ekibin SLA tabanlı desteğini sunuyor
1 yorum
Hacker News yorumları
Mongo veya Dynamo gibi veritabanlarının var olma sebebinin Postgres'in ölçeklenme sorunları olduğu söylenir, ama Postgres'i birkaç yerde kullandıktan sonra gördüm ki birinci öncelikli sorun her zaman yüksek erişilebilirlikti, ölçeklenme değil
Tek bir Postgres kümesiyle dakikada 100 bin işlemi rahatça işledik, ancak birincil düğüm ölünce çağrı alıp yedek düğüme elle failover yapmak, ardından yedek düğümü de yine elle değiştirmek gerekiyordu
Manuel araçlar çok zahmetliydi ama en azından çalışıyordu; otomatik çözümler ise bunun yanına bile yaklaşamıyordu
İyi bir HA hikâyesi olmadığından, self-hosted Postgres'ten mümkün olduğunca kaçınır oldum
Health check ve failover içeren bir load balancer varsayılan olarak çalışıyor; artık yeterince gerçek kullanımda da sınandığı için bakmaya değer
https://github.com/patroni/patroni
Benim kullanım senaryomda gerçekten çok iyi çalıştı
“Why Us” bölümünde “Instacart'ta Postgres işlettik ve şirket 2020 Nisan'ında 5 kat büyürken Postgres'in dakikada yüz binlerce market teslimat siparişini işlemesini sağlamak en büyük sorundu” yazıyorsa, bundan daha iyi bir neden biz anlatısı herhalde olmaz
Tek bir Postgres instance'ının bile bunu rahatça kaldırabileceği izlenimi veriyor
Modern yüksek kaliteli kurumsal SSD'ler saniyede yaklaşık 35 bin gerçek
fsyncişleyebilirTabii bunun Postgres'ten mi yoksa başka tasarım kusurlarından mı kaynaklandığını bilmiyorum
Temel olarak anlamaya çalışıyorum: şu anda büyük bir sunucuda 4TB'lık bir DB var
PGDog gibi bir proxy aracı kullanırsam, her biri yaklaşık 500GB taşıyan 8 küçük sunucu ve proxy için 1 orta ölçekli sunucu çalıştırdığım bir yapıya mı dönüşüyor?
Mevcut projede birçok servisten çok yoğun yazma trafiği geliyor ve web uygulaması da buradan okuma yapıyor
Artık indeksleme, sorgu optimizasyonu, caching ve sunucu yükseltmeleri ne kadar yapılırsa yapılsın fayda etmeyeceği bir noktaya yaklaşıyoruz
DB boyutunu küçültmek için statik verinin çoğunu ClickHouse'a taşımayı da değerlendiriyoruz, ama PgDog veya başka bir sharding yaklaşımının bu kullanım için işe yarayıp yaramayacağını duymak isterim
Ulaşırsan sevinirim (lev@pgdog.dev)
Yardım edebiliriz ya da en azından şu anda neyin çalışıp neyin çalışmadığını söyleyip seçeneklerini daha net görmeni sağlayabiliriz
pgdog belgelerini okursan, isteklerin hangi shard sunucusuna yönlendirileceğini ona bildirmen gerektiğini görürsün; sihirli biçimde kendiliğinden çalışmıyor
Yine de özellikle pahalı olan Postgres bağlantılarını yeniden kullandığı için değerli
Sihir olmadığı için içeride neler döndüğünü anlaman gerekir; örneğin shard'lar arası transaction yoktur
Veri tutarlılığına önem veriyorsan sharding zordur, bu yüzden önce uygulamanın read replica'lardan fayda sağlayıp sağlayamayacağına bakardım
Replica'ların her biri tüm verinin bir kopyasını tutar ve yazmalar yalnızca master'a gider; ayrıca neredeyse gerçek zamanlıdan biraz geride kalabilen bir replica'da çalıştırılması uygun transaction'lara kendin karar vermen gerekir
Örneğin bir web sayfası oluşturmak için yapılan okumalar replica'dan yapılırsa genelde güvenlidir, ama oku-değiştir-yaz türü işlemler için aynı şey geçerli değildir
Postgres'taki en büyük kesinti nedenlerinden biri olan major sürüm yükseltmesi için bunun nasıl yardımcı olacağını merak ediyorum
Pooler, failover ve yük dengeleme için harika ama yükseltmeler yüzünden yılda bir ya da iki kez düzenli olarak 10-20 dakikalık kesinti gerekiyor
Eski sürümden yeni sürüme mantıksal çoğaltma yardımcı olabilir ama kısmi yazmalar ya da garip durumlar olmadan her şeyi yeni cluster'a aktarma işi yine de gerekli gibi görünüyor
Bu konuda deneyimi olan var mı merak ediyorum
DB boyutu yaklaşık 1-1.5TB ama değişim miktarı ya da saniye başına sorgu sayısı aşırı yüksek değil
Esasen burada anlatılan yöntem bu: https://www.pgedge.com/blog/always-online-or-bust-zero-downt...
Kod olarak altyapı kurulumunuz varsa, yalnızca major sürümü farklı olan ama ayarları aynı yeni bir cluster oluşturup şemayı içe aktarır, eski sürümün read replica'sından veri kopyalamaya başlar, eski sürümün yazı kabulünü durdururuz (kesinti başlangıcı), sequence numaralarını senkronize eder ve servisi yeni cluster'a yönlendiririz (kesinti sonu)
CloudNativePG gibi bir şey kullanırsanız CLI araçları ve bildirimsel sözdizimiyle bu sürecin bir kısmını otomatikleştirir
Yoksa bunu kendiniz zaman ayırıp çözmeniz gerekir
Kulağa karmaşık gelebilir ama staging DB'de prova edip düzgün çalıştığında production'da da aynı prosedürü uygulayabilirsiniz
Ayrıca Postgres 19'da sequence'ların tek seferlik mantıksal çoğaltılması için bir yama var gibi görünüyor: https://www.depesz.com/2025/11/11/waiting-for-postgresql-19-...
Cluster'ı sıralı şekilde döndürürseniz kesinti çok küçük oluyor, kabaca 60 saniye kadar olabilir
Bu saatten sonra bunu bir gün görür müyüm emin değilim
Bunun neden mutlak en yüksek öncelik olarak görülmediğini hâlâ merak ediyorum
Tebrikler Lev, funding için
Burada PgDog'u memnuniyetle kullanıyoruz
Proxy özellikleri arasında bağlantı başına farklı bağlantı ayarlarını, örneğin
statement_timeout, ele alabilmesini oldukça beğeniyorumEskiden RDS Proxy'yi incelediğimde bunu desteklemiyordu, pgbouncer da sanırım desteklemiyordu; bu yüzden uygulamada çok fazla değişiklik gerekiyordu
PgDog'da ise şeffaf biçimde çalışıyor
Bunun, az önce duyurulan Supabase multigres ile karşılaştırılabilir olup olmadığını merak ediyorum
Bir Enterprise Edition görüyorum; hangi özelliklerin açık kaynak olmadığını net biçimde söyleyebilir misiniz merak ediyorum
Yeni eklenen özelliklerin, VC yatırımcılarına karşılık vermek için EE lisansı altında olacağını düşünüp düşünmediğinizi de merak ediyorum
Birincisi, çok düğümlü dağıtımları yöneten control plane; bu, PgDog'u kolayca dağıtıp kullanabilmeniz için “kutudan çıktığı gibi çalışan” bir deneyim sunuyor
İkincisi, hizmet kalitesi (QoS); kötü sorguların veritabanını çökertmesini önlemek için onları otomatik olarak engelliyor
Son olarak P0'a kadar SLA garantili destek alabiliyorsunuz
Yeni özellikler iki kategoriye ayrılıyor
Sharding ve büyük ölçekli Postgres işletimi her zaman açık kaynak olacak; altyapı yönetimi ve PgDog'u büyük ölçekte kolay çalıştırmayı sağlayan özellikler ise enterprise olacak
PgDog, Neki ve multigres'in çıkmasını görmek güzel
Gerçekten de bu Postgres'in temel sorunu ve burada index hint olmaması da ayrıca bir sorun; bu yüzden Postgres 19'u bekliyorum
Yapılandırması zor ama bugünlerde AI yardımıyla kurmak daha kolaylaştı
pg_hint_planeklentisi core'a dahil değil ama planner'ı override etmeniz gerektiğinde oldukça yetenekli“Bildiğimiz kadarıyla 20TB'den fazlasını shard ettik” ifadesi muhtemelen bir yazım hatası
20TB o kadar da büyük değil
Çok daha fazlasını shard etmiş olduklarını düşünürdüm
Her veritabanında sıcak veri / soğuk veri oranı farklı olduğu için daha fazla bilgi olmadan kıyaslamak mümkün değil
Daha iyi bir ölçüt IOPS olabilir
RDS, provisioned IOPS için çok daha fazla para harcamazsanız ya da Aurora kullanmazsanız, maksimum IOPS açısından oldukça düşük kalıyor
Karşılaştırma olsun diye, yaklaşık 10 yıl önce Segment'te yaklaşık 50TB veriye sahip tek bir Aurora PostgreSQL instance'ı işletiyorduk; bu, S3'te depolanan çok daha büyük bir dosya külliyatı içindeki potansiyel tanımlayıcı verileri indekslemek için kullanılıyordu
PgDog güzel
Dürüst olmak gerekirse ihtiyacım yok ama ormanda yürüyüş yaparken dinleyecek bir şey bulamayınca tesadüfen Postgres FM podcast'ini dinledim, ilgimi çekti ve kendi şirket içi Kubernetes ortamımda kullanıyorum
https://open.spotify.com/episode/6qgpfiW68KcvRASs6649Fb