Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
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.
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:
- Postgres memodifikasi halaman yang terdampak di memori dan menghasilkan catatan WAL.
- Compute mengalirkan catatan WAL ke safekeeper.
- Ketika kuorum safekeeper mengakui catatan tersebut, transaksi akan dikomitmenkan dan klien berhasil.
- Pageserver menerapkan WAL secara asinkron dan menyimpan halaman yang diperbarui ke penyimpanan objek.
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:
- Buffer pool (memori): Postgres shared buffers di compute RAM.
- Cache komputasi lokal: Cache yang didukung disk pada node komputasi, berukuran relatif terhadap memori komputasi.
- Pageserver: Pada cache miss, compute meminta halaman dari pageserver, yang kemudian merekonstruksinya pada LSN yang diminta.
- Penyimpanan objek: Pageserver membaca dari penyimpanan objek secara internal saat diperlukan. Kueri tidak langsung sampai ke 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.