29 puan yazan xguru 2021-10-18 | 1 yorum | WhatsApp'ta paylaş
  • Yılın başında Notion’ı 5 dakikalığına kapatıp, birkaç aydır üzerinde çalıştıkları PostgreSQL sharding işlemini gerçekleştirdiler

→ Sonuç olarak hemen “inanılmaz hızlandı” tepkileri gelmeye başladı

  • Sharding yapmaya ne zaman karar verildi

→ 5 yılda on binlerce kat büyürken, uzun süre sorunsuz kullanılan Postgres monolit kapasite sınırını aşmaya başlamıştı

→ VACUUM sürekli kesintiye uğramaya başlamıştı ve yakında TXID wraparound yaşanacağı öngörüldüğü için sharding çalışması başlatıldı

  • Sharding şemasını tasarlamak

→ Uygulama seviyesinde sharding

⇨ Hangi veriler shard edilecek

⇨ Veriler hangi anahtarla partition edilerek bölünecek

⇨ Kaç shard oluşturulmalı ve nasıl yapılandırılmalı

→ Karar #1

⇨ Notion’ın veri modeli block birimi etrafında kuruluydu

⇨ block tablosuna bağlı tüm tabloları shard etmeye karar verdiler (Space, Discussion, Comment vb.)

→ Karar #2

⇨ block, workspace ID ile partition ediliyor

⇨ Her workspace’e bir UUID atandığı için bunu kullandılar

→ Karar #3

⇨ Yapı 480 mantıksal shard ve 32 fiziksel DB’den oluşuyor

512 gibi 2’nin kuvveti olan bir sayı yerine 480’in seçilme nedeni, daha esnek biçimde bölünebilmesi
  • Shard’lara taşımak

→ 1. Eski ve yeni DB’ye çift yazım yapmak (Audit Log ile birlikte)

→ 2. Çift yazım başladıktan sonra eski DB’deki verileri yeni DB’ye backfill etmek

→ 3. Yeni DB’deki verileri doğrulamak

→ 4. Yeni DB’ye geçmek (incremental olarak ilerledi)

  • Zor yoldan öğrenilen dersler

→ Daha erken shard edin: Mevcut DB üzerindeki yük çok artana kadar beklendiği için, migration’ın kendisi de ekstra yük yarattı ve bu yüzden yavaş ilerlemek zorunda kaldılar

→ Hedefiniz zero-downtime taşıma olsun: Nihai geçiş sırasında çift yazımın throughput’u temel darboğaz oldu.

→ Ayrı bir partition anahtarı yerine bileşik PK kullanın: Mevcut DB’nin PK’si olan id ile partition anahtarı olan space_id birleştirilseydi, uygulama içinde space_id değerlerini taşımaya gerek kalmayabilirdi

1 yorum

 
xguru 2021-10-18

Postgres’in TXID konusu her zaman gündeme gelen başlıklardan biridir