Arsitektur Lakebase

Lakebase memisahkan penyimpanan dari komputasi. Mesin Postgres yang menjalankan kueri Anda bersifat stateless, dan data Anda berada di lapisan penyimpanan yang tahan lama yang tetap berdiri secara independen. Pemisahan inilah yang memungkinkan autoscaling, scale-to-zero, instant branches, read replicas, dan fast failover.

Untuk menunjukkan apa yang diubah Lakebase, halaman ini dimulai dengan desain database tradisional satu mesin untuk kontras, lalu menjelaskan bagaimana Lakebase memisahkan desain yang sama menjadi lapisan-lapisan independen dan apa fungsi setiap bagian.

Bagaimana database tradisional dibangun

Sebelum melihat Lakebase, pertimbangkan model yang digantikannya. Basis data Postgres konvensional adalah sebuah monolit. Satu mesin menjalankan mesin query dan menulis baik log tulis (WAL) maupun file data ke disk yang terpasang di titik mount lokal. Secara tradisional, disk-disk ini benar-benar lokal, bagian dari mesin yang sama, tetapi seiring berkembangnya infrastruktur, seringkali mereka adalah perangkat penyimpanan yang terhubung ke jaringan.

WAL dan file data memainkan dua peran yang saling melengkapi:

  • WAL mempercepat penulisan. Postgres menambahkan setiap perubahan ke log secara berurutan sebelum mengakui commit, yang cepat dan tahan lama pada satu disk.
  • File data mempercepat pembacaan. Postgres mematerialisasi versi terkini dari setiap halaman ke dalam file data, sehingga sebuah kueri dapat membaca baris tanpa memutar ulang log.

Monolit basis data tradisional pada satu mesin, di mana mesin kueri menulis ke log write-ahead dan membaca dari file data di disk lokal.

Mengakses semua data Anda melalui satu mesin memiliki kekurangan:

  • Ketahanan terkait langsung dengan infrastruktur fisik mesin tersebut. Anda juga harus menyediakan penyimpanan terlebih dahulu dan memprediksi seberapa besar beban kerja Anda akan bertambah, yang mempersulit manajemen biaya dan perencanaan ketahanan.
  • Ketersediaan tinggi dan berbagai jenis skala horizontal membutuhkan klon fisik dari seluruh basis data.
  • Jika mesin itu gagal, Anda bisa kehilangan data. Teknik seperti penyimpanan RAID mengurangi risiko ini, tetapi redundansi tambahan dapat secara signifikan meningkatkan biaya menjalankan sistem.

Arsitektur Lakebase

Lakebase mempertahankan tanggung jawab yang sama tetapi memisahkannya menjadi dua lapisan independen:

  • Lapisan komputasi yang menjalankan Postgres standar tanpa status.
  • Lapisan penyimpanan yang terdiri dari safekeeper, pageserver, dan penyimpanan objek cloud.

Dua peran dari monolit langsung dipetakan ke komponen baru. WAL, yang mempercepat penulisan, menjadi penjaga, yang mana skala menulis. File data yang dipercepat bacaan menjadi pageserver, yang kemudian menskalakan bacaan.

Arsitektur Lakebase dengan lapisan komputasi Postgres tanpa status di atas lapisan penyimpanan yang terdiri dari safekeeper, pageserver, dan penyimpanan objek.

Karena data berada di penyimpanan objek cloud dan bukan di satu mesin, Lakebase menyediakan komputasi elastis dan skalabel serta penulisan tahan lama yang direplikasi di berbagai zona ketersediaan. Tidak ada penyimpanan yang harus disediakan: Anda hanya membayar untuk penyimpanan yang Anda konsumsi, dan Anda tidak perlu merencanakan mode kegagalan seperti kehabisan disk.

Model ini juga meningkatkan performa. Lakebase menulis setiap perubahan langsung ke beberapa lokasi, sehingga menghindari beban perlindungan sobek-tulis tradisional dan penyelarasan blok. Karena setiap penulisan sudah menuju beberapa lokasi, performa tetap konsisten baik high availability diaktifkan maupun tidak.

Tabel berikut memetakan setiap bagian monolit ke padanan Lakebase-nya.

Monolit tradisional Lakebase Role
Satu komputer Komputasi tanpa keadaan Menjalankan mesin kueri Postgres
Disk WAL Lokal Safekeeper Abaly mencatat setiap perubahan yang telah dikomitmenkan.
File data lokal Pageserver dan penyimpanan objek Mematerialisasi dan menyimpan versi halaman

Lapisan komputasi

Lapisan komputasi menjalankan Postgres. Perangkat ini hanya memiliki status sementara: buffer bersama Postgres di memori dan cache komputasi lokal yang didukung oleh disk lokal cepat. Ia tidak memiliki data yang tahan lama.

Karena komputasi tidak memiliki status tahan lama:

  • Perangkat ini dapat diganti, di-restart, di-autoscale, atau diskalakan hingga nol tanpa memindahkan atau kehilangan data.
  • Alih-alih menulis ke sistem file lokal, ia mengalirkan WAL ke lapisan penyimpanan.
  • Beberapa instance komputasi dapat terhubung ke lapisan penyimpanan yang sama, yang merupakan cara Lakebase membaca replika dan failover cepat bekerja.

Lapisan penyimpanan

Lapisan penyimpanan ini tahan lama dan beroperasi secara independen dari komputasi. Ia memiliki tiga komponen.

Safekeeper

Safekeeper adalah WAL, yang diambil dari satu mesin dan dibuat sangat tersedia. Saat Postgres menghasilkan catatan WAL, ia mengalirkannya ke sekelompok safekeeper yang mereplikasi log tersebut dalam kuorum menggunakan protokol konsensus berbasis Paxos.

Transaksi dikomitmenkan ketika kuorum safekeeper mengakui catatan WAL, bukan ketika satu mesin menyelesaikan catatan lokal fsync. Ketahanan berasal dari replikasi antar node, bukan dari satu disk.

Pageserver

Pageserver adalah file data, diambil dan dibangun ulang dari WAL. Sebuah pageserver mengonsumsi aliran WAL dari safekeeper dan menghasilkan versi halaman sesuai permintaan. Ketika compute meminta halaman pada nomor urut log (LSN) tertentu, pageserver akan merekonstruksi dan mengembalikannya.

Pageserver berfungsi sebagai cache write-through di atas penyimpanan objek. Mereka secara asinkron mempertahankan halaman materialisasi ke penyimpanan objek cloud, dan rekonstruksi halaman tidak memblokir commit transaksi.

Penyimpanan objek di cloud

Penyimpanan objek cloud adalah fondasi daya tahan untuk seluruh lapisan penyimpanan. Halaman ini menyimpan data halaman yang server simpan.

Di Azure, Lakebase menyimpan data ke Azure Blob Storage.

Penyimpanan objek tetap di luar jalur hot query. Hanya pelayan halaman yang membaca dari sana. Untuk detail tentang cara kerja redundansi penyimpanan dan mengapa redundansi tersebut independen dari pengaturan ketersediaan tinggi komputasi, lihat Arsitektur Penyimpanan.

Cara kerja sebuah tulisan

Sebuah write mengalir dari komputasi melalui lapisan penyimpanan:

  1. Postgres memodifikasi halaman yang terdampak di memori dan menghasilkan catatan WAL.
  2. Compute mengalirkan catatan WAL ke safekeeper.
  3. Ketika kuorum safekeeper mengakui catatan tersebut, transaksi akan dikomitmenkan dan klien berhasil.
  4. Pageserver menerapkan WAL secara asinkron dan menyimpan halaman yang diperbarui ke penyimpanan objek.

Jalur penulisan Lakebase, di mana Postgres mengalirkan WAL ke safekeeper yang pengakuan kuorumnya mengkomitkan transaksi sebelum pageserver menerapkannya.

Sebuah transaksi menjadi tahan lama setelah kuorum safekeeper memiliki catatan WAL, karena log saja sudah cukup untuk merekonstruksi data. Pageserver membangun ulang dan menyimpan halaman data setelahnya, di luar jalur komit, sehingga penulisan tetap cepat tanpa membahayakan perubahan yang dikomitmen.

Cara kerja membaca

Membaca memeriksa hierarki cache, dari tercepat hingga terlambat, dan berhenti di lapisan pertama yang memiliki halaman tersebut:

  1. Buffer pool (memori): Postgres shared buffers di compute RAM.
  2. Cache komputasi lokal: Cache yang didukung disk pada node komputasi, berukuran relatif terhadap memori komputasi.
  3. Pageserver: Pada cache miss, compute meminta halaman dari pageserver, yang kemudian merekonstruksinya pada LSN yang diminta.
  4. Penyimpanan objek: Pageserver membaca dari penyimpanan objek secara internal saat diperlukan. Kueri tidak langsung sampai ke penyimpanan objek.

Hierarki cache baca Lakebase dari tercepat hingga terlambat: buffer pool, cache komputasi lokal, pageserver, dan penyimpanan objek.

Apa yang dimungkinkan oleh arsitektur ini

Memisahkan komputasi stateless dari penyimpanan tahan lama adalah yang memungkinkan beberapa fitur Lakebase:

Feature Apa yang dimungkinkannya
Skalabilitas Otomatis Karena komputasi bersifat stateless, Lakebase meningkatkan atau menurunkan ukuran komputasi sesuai beban kerja tanpa memindahkan data.
Skala-ke-nol Komputasi dapat berhenti sepenuhnya saat penyimpanan tetap ada, dan data langsung tersedia saat komputasi dilanjutkan.
Cabang instan Buat salinan database Anda yang terisolasi dan dapat ditulis dalam hitungan detik. Karena branching adalah operasi metadata copy-on-write terhadap penyimpanan bersama, tidak ada data yang diduplikasi.
Membaca replika Beberapa instance komputasi membaca dari lapisan penyimpanan yang sama, sehingga replika tidak memerlukan salinan data dan mulai dalam hitungan detik.
Kueri titik waktu Karena lapisan penyimpanan menyimpan riwayat, komputasi dapat terhubung ke titik waktu masa lalu dan membaca database seperti yang ada saat itu, tanpa menyalin data kembali ke tempatnya.
Failover cepat Failover mempromosikan instance komputasi sekunder yang terhubung ke penyimpanan yang ada, tanpa data yang harus dipindahkan.
RPO = 0 (tidak ada kehilangan data yang dikomitmenkan) Lakebase merekam setiap transaksi yang dikomitmenkan secara permanen sebelum mengakuinya, sehingga Anda tidak kehilangan data yang dikomitmenkan saat komputasi gagal, di-restart, atau diskalakan menjadi nol.

Bagaimana arsitektur ini mendukung LTAP

Karena Lakebase menyimpan setiap perubahan yang berkomitmen dalam penyimpanan objek cloud secara berkelanjutan, data yang sama dapat melayani beban kerja analitik bersamaan dengan transaksi tanpa pipeline replikasi terpisah. Ini adalah fondasi bagi Lake Transactional and Analytical Processing (LTAP), di mana satu salinan data Anda mendukung mesin transaksional dan analitik. Untuk mempelajari bagaimana LTAP membangun arsitektur ini, lihat arsitektur LTAP.

Langkah berikutnya

  • Arsitektur penyimpanan: Pelajari bagaimana redundansi penyimpanan bekerja dan mengapa hal ini independen dari pengaturan ketersediaan tinggi komputasi. Lihat Arsitektur penyimpanan.
  • Cabang basis data: Lihat bagaimana cabang menggunakan penyimpanan copy-on-write untuk menciptakan lingkungan instan dan terisolasi. Lihat Cabang.
  • Baca replika: Tambahkan instance komputasi hanya-baca yang berbagi lapisan penyimpanan yang sama. Lihat Membaca replika.
  • Konsep inti: Tinjau seluruh konsep yang membuat Lakebase unik. Lihat Konsep Inti.