WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Saya sarankan Anda membaca transkrip laporan awal tahun 2020 oleh Georgy Rylov β€œWAL-G: peluang baru dan perluasan komunitas”

Pengelola sumber terbuka menghadapi banyak tantangan seiring pertumbuhannya. Bagaimana cara menulis lebih banyak fitur yang diperlukan, memperbaiki lebih banyak masalah, dan mengelola untuk melihat lebih banyak permintaan tarik? Dengan menggunakan WAL-G (alat cadangan untuk PostgreSQL) sebagai contoh, saya akan memberi tahu Anda bagaimana kami memecahkan masalah ini dengan meluncurkan kursus pengembangan sumber terbuka di universitas, apa yang kami capai dan ke mana kami akan melangkah selanjutnya.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Halo lagi semuanya! Saya seorang pengembang Yandex dari Yekaterinburg. Dan hari ini saya akan berbicara tentang WAL-G.

Judul laporannya tidak menyebutkan bahwa ini tentang pencadangan. Ada yang tahu apa itu WAL-G? Atau apakah semua orang tahu? Angkat tangan Anda jika Anda tidak tahu. Sial, Anda datang ke laporan dan tidak tahu tentang apa.

Izinkan saya memberi tahu Anda apa yang akan terjadi hari ini. Kebetulan tim kami sudah cukup lama melakukan backup. Dan ini adalah laporan lain dalam seri yang membahas tentang cara kami menyimpan data dengan aman, terjamin, nyaman, dan efisien.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Di seri sebelumnya banyak laporan dari Andrei Borodin dan Vladimir Leskov. Ada banyak dari kita. Dan kami telah membicarakan WAL-G selama bertahun-tahun.

klik.ru/F8ioz β€” https://www.highload.ru/moscow/2018/abstracts/3964

klik.ru/Ln8Qw β€” https://www.highload.ru/moscow/2019/abstracts/5981

Laporan ini akan sedikit berbeda dari laporan lainnya karena lebih banyak membahas bagian teknis, namun di sini saya akan berbicara tentang bagaimana kami menghadapi masalah yang terkait dengan pertumbuhan komunitas. Dan bagaimana kami mendapatkan ide kecil yang membantu kami mengatasi hal ini.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Beberapa tahun yang lalu, WAL-G adalah proyek yang cukup kecil yang kami dapatkan dari Citus Data. Dan kami baru saja mengambilnya. Dan itu dikembangkan oleh satu orang.

Dan hanya WAL-G yang tidak memiliki:

  • Cadangan dari replika.
  • Tidak ada cadangan tambahan.
  • Tidak ada cadangan WAL-Delta.
  • Dan masih banyak yang hilang.

Selama beberapa tahun ini, WAL-G telah berkembang pesat.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Dan pada tahun 2020, semua hal di atas sudah muncul. Dan ditambahkan ke dalamnya apa yang kita miliki sekarang:

  • Lebih dari 1 bintang di GitHub.
  • 150 garpu.
  • Sekitar 15 PR terbuka.
  • Dan masih banyak lagi kontributor lainnya.
  • Dan masalah terbuka setiap saat. Dan ini terlepas dari kenyataan bahwa kami benar-benar pergi ke sana setiap hari dan melakukan sesuatu untuk mengatasinya.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Dan kami sampai pada kesimpulan bahwa proyek ini memerlukan lebih banyak perhatian kami, meskipun kami sendiri tidak perlu menerapkan apa pun untuk layanan Basis Data Terkelola kami di Yandex.

Dan di suatu tempat di musim gugur tahun 2018, sebuah ide muncul di benak kami. Biasanya tim memiliki beberapa cara untuk mengembangkan beberapa fitur atau memperbaiki bug jika Anda tidak memiliki cukup tenaga. Misalnya, Anda dapat menyewa pengembang lain dan membayarnya sejumlah uang. Atau Anda bisa magang sebentar dan juga memberinya sejumlah gaji. Namun masih terdapat cukup banyak kelompok orang, beberapa di antaranya sudah benar-benar tahu cara menulis kode. Anda hanya tidak selalu tahu kualitas kodenya.

Kami memikirkannya dan memutuskan untuk mencoba menarik siswa. Namun siswa tidak akan berpartisipasi dalam segala hal bersama kami. Mereka hanya akan melakukan sebagian pekerjaan saja. Dan mereka akan, misalnya, menulis tes, memperbaiki bug, mengimplementasikan fitur yang tidak mempengaruhi fungsi utama. Fungsi utamanya adalah membuat cadangan dan memulihkan cadangan. Jika kita melakukan kesalahan dalam membuat backup maka kita akan mengalami kehilangan data. Dan tentu saja tidak ada yang menginginkan hal ini. Semua orang ingin segalanya menjadi sangat aman. Oleh karena itu, tentu saja kita tidak ingin membiarkan kode yang kita percayai kurang dari milik kita sendiri. Artinya, kode non-kritis apa pun yang ingin kami terima dari pekerja tambahan kami.

Dalam kondisi apa PR mahasiswa diterima?

  • Mereka diharuskan untuk menutupi kode mereka dengan tes. Semuanya harus terjadi di CI.
  • Dan kami juga melalui 2 ulasan. Satu oleh Andrey Borodin dan satu lagi oleh saya.
  • Dan selain itu, untuk memeriksa bahwa ini tidak akan merusak apa pun di layanan kami, saya secara terpisah mengunggah perakitan dengan komit ini. Dan kami memeriksa pengujian end-to-end dan tidak ada yang gagal.

Kursus khusus tentang Open Source

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Sedikit tentang mengapa hal ini diperlukan dan mengapa ini, menurut saya, adalah ide yang bagus.

Bagi kami, keuntungannya jelas:

  • Kami mendapat tangan ekstra.
  • Dan kami mencari calon tim di antara siswa pintar yang menulis kode pintar.

Apa manfaatnya bagi pelajar?

Hal ini mungkin kurang jelas, karena siswa, minimal, tidak menerima uang untuk kode yang mereka tulis, namun hanya menerima nilai untuk catatan siswanya.

Saya bertanya kepada mereka tentang hal ini. Dan dalam kata-kata mereka:

  • Pengalaman kontributor di Open Source.
  • Dapatkan baris di CV Anda.
  • Buktikan sendiri dan lewati wawancara di Yandex.
  • Menjadi anggota GSoC.
  • +1 kursus khusus bagi yang ingin menulis kode.

Saya tidak akan berbicara tentang bagaimana kursus ini disusun. Saya hanya akan mengatakan bahwa WAL-G adalah proyek utamanya. Kami juga menyertakan proyek seperti Odyssey, PostgreSQL dan ClickHouse dalam kursus ini.

Dan mereka memberikan soal tidak hanya pada mata kuliah ini, tetapi juga memberikan ijazah dan tugas kuliah.

Bagaimana dengan manfaatnya bagi pengguna?

Sekarang mari kita beralih ke bagian yang paling menarik minat Anda. Apa gunanya hal ini bagimu? Intinya siswa memperbaiki banyak bug. Dan kami membuat fitur permintaan yang Anda minta untuk kami lakukan.

Dan izinkan saya memberi tahu Anda tentang hal-hal yang telah lama Anda inginkan dan yang telah terwujud.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Dukungan tablespace. Tablespace di WAL-G mungkin sudah diharapkan sejak WAL-G dirilis, karena WAL-G adalah penerus alat pencadangan lain WAL-E, yang mendukung pencadangan database dengan tablespace.

Izinkan saya mengingatkan Anda secara singkat apa itu dan mengapa itu semua diperlukan. Biasanya, semua data Postgres Anda menempati satu direktori di sistem file, yang disebut database. Dan direktori ini sudah berisi semua file dan subdirektori yang dibutuhkan oleh Postgres.

Tablespace adalah direktori yang berisi data Postgres, namun tidak terletak di luar direktori dasar. Slide menunjukkan bahwa tablepacs terletak di luar direktori dasar.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Seperti apa Postgres itu sendiri? Ada subdirektori terpisah pg_tblspc di direktori dasar. Dan itu berisi symlink ke direktori yang sebenarnya berisi data Postgres di luar direktori dasar.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Saat Anda menggunakan semua ini, bagi Anda perintah ini mungkin terlihat seperti ini. Artinya, Anda membuat tabel di beberapa tablespace tertentu dan melihat di mana letaknya sekarang. Ini adalah dua baris terakhir, dua perintah terakhir dipanggil. Dan di sana jelas ada jalan tertentu. Namun kenyataannya, ini bukanlah cara yang sebenarnya. Ini adalah jalur awalan dari direktori dasar ke tablespace. Dan dari sana dicocokkan dengan symlink yang mengarah ke data Anda yang sebenarnya.

Kami tidak menggunakan semua ini di tim kami, namun digunakan oleh banyak pengguna WAL-E lainnya yang menulis kepada kami bahwa mereka ingin pindah ke WAL-G, namun hal ini menghentikan mereka. Ini sekarang didukung.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Fitur lain yang dibawakan oleh kursus khusus kami adalah mengejar ketertinggalan. Orang-orang yang mungkin lebih banyak bekerja dengan Oracle dibandingkan dengan Postgres tahu tentang mengejar ketertinggalan.

Secara singkat tentang apa itu. Topologi cluster di layanan kami biasanya terlihat seperti ini. Kami memiliki seorang master. Ada replika yang mengalirkan log tulis-depan darinya. Dan replika tersebut memberi tahu master LSN mana yang sedang digunakan. Dan bersamaan dengan ini, log dapat diarsipkan. Dan selain mengarsipkan log, cadangan juga dikirim ke cloud. Dan cadangan delta dikirim.

Apa masalahnya? Ketika Anda memiliki database yang cukup besar, mungkin replika Anda mulai tertinggal jauh dari masternya. Dan dia sangat tertinggal sehingga dia tidak akan pernah bisa mengejarnya. Masalah ini biasanya perlu diselesaikan.

Dan cara termudah adalah dengan menghapus replikanya dan mengunggahnya kembali, karena replika tersebut tidak akan pernah menyusul, dan masalahnya perlu diatasi. Namun ini adalah waktu yang cukup lama, karena memulihkan seluruh cadangan database sebesar 10 TB adalah waktu yang sangat-sangat lama. Dan kami ingin melakukan semua ini secepat mungkin jika masalah tersebut muncul. Dan itulah gunanya mengejar ketertinggalan.

Catchup memungkinkan Anda menggunakan cadangan delta, yang disimpan di cloud dengan cara ini. Anda menyebutkan LSN mana yang saat ini digunakan replika lagging dan menentukannya dalam perintah catchup untuk membuat cadangan delta antara LSN tersebut dan LSN tempat klaster Anda saat ini berada. Dan setelah itu Anda mengembalikan cadangan ini ke replika yang tertinggal.

Pangkalan lainnya

Para siswa juga memberi kami banyak fitur sekaligus. Karena di Yandex kami tidak hanya menyiapkan Postgres, kami juga memiliki MySQL, MongoDB, Redis, ClickHouse, pada titik tertentu kami harus dapat membuat cadangan dengan pemulihan point-in-time untuk MySQL, dan agar ada peluang untuk mengunggah mereka ke awan.

Dan kami ingin melakukannya dengan cara serupa seperti yang dilakukan WAL-G. Dan kami memutuskan untuk bereksperimen dan melihat bagaimana tampilannya.

Dan pada awalnya, tanpa membagikan logika ini dengan cara apa pun, mereka menulis kode di fork. Mereka melihat bahwa kami memiliki semacam model yang berfungsi dan bisa terbang. Lalu kami mengira komunitas utama kami adalah postgresist, mereka menggunakan WAL-G. Oleh karena itu, kita perlu memisahkan bagian-bagian ini. Artinya, ketika kita mengedit kode untuk Postgres, kita tidak merusak MySQL; ketika kita mengedit MySQL, kita tidak merusak Postgres.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Ide pertama tentang cara memisahkan ini adalah ide menggunakan pendekatan yang sama yang digunakan dalam ekstensi PostgreSQL. Dan sebenarnya, untuk membuat cadangan MySQL Anda harus menginstal semacam perpustakaan dinamis.

Namun di sini asimetri pendekatan ini langsung terlihat. Saat Anda mencadangkan Postgres, Anda meletakkan cadangan normal untuk Postgres di dalamnya dan semuanya baik-baik saja. Dan untuk MySQL ternyata Anda menginstal backup untuk Postgres dan juga menginstal perpustakaan dinamis untuk MySQL untuk itu. Kedengarannya agak aneh. Kami juga berpikir demikian dan memutuskan bahwa ini bukanlah solusi yang kami butuhkan.

Berbagai build untuk Postgres, MySQL, MongoDB, Redis

Namun hal ini, menurut kami, memungkinkan kami untuk mengambil keputusan yang tepat - untuk mengalokasikan majelis yang berbeda untuk basis yang berbeda. Hal ini memungkinkan untuk mengisolasi logika yang terkait dengan cadangan berbagai database yang akan mengakses API umum yang diimplementasikan WAL-G.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Ini adalah bagian yang kami tulis sendiri - sebelum memberikan soal kepada siswa. Artinya, ini adalah bagian di mana mereka dapat melakukan kesalahan, jadi kami memutuskan bahwa sebaiknya kami melakukan hal seperti ini dan semuanya akan baik-baik saja.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Setelah itu kami memberikan masalah. Mereka segera dibongkar. Siswa diminta untuk mendukung tiga pangkalan.

Ini adalah MySQL, yang telah kami backup menggunakan WAL-G dengan cara ini selama lebih dari setahun.

Dan sekarang MongoDB mendekati produksi, di mana mereka menyelesaikannya dengan sebuah file. Faktanya, kami menulis kerangka untuk semua ini. Kemudian siswa menuliskan beberapa hal yang bisa dikerjakan. Dan kemudian kami membawanya ke kondisi yang dapat kami terima dalam produksi.

Masalah-masalah ini sepertinya siswa tidak perlu menulis alat cadangan lengkap untuk masing-masing database ini. Kami tidak mempunyai masalah seperti itu. Masalah kami adalah kami menginginkan pemulihan tepat waktu dan kami ingin membuat cadangan ke cloud. Dan mereka meminta siswa untuk menulis beberapa kode yang dapat menyelesaikan masalah ini. Para siswa menggunakan alat pencadangan yang sudah ada, yang entah bagaimana mengambil cadangan, dan kemudian menempelkan semuanya dengan WAL-G, yang meneruskan semuanya ke cloud. Dan mereka juga menambahkan pemulihan point-in-time ke dalamnya.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Apa lagi yang dibawa para siswa? Mereka membawa dukungan enkripsi Libsodium ke WAL-G.

Kami juga memiliki kebijakan penyimpanan cadangan. Sekarang cadangan dapat ditandai sebagai permanen. Dan entah bagaimana, akan lebih mudah bagi layanan Anda untuk mengotomatiskan proses penyimpanannya.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Apa hasil percobaan ini?

Lebih dari 100 orang awalnya mendaftar untuk kursus ini. Awalnya saya tidak mengatakan bahwa universitas di Yekaterinburg adalah Universitas Federal Ural. Kami mengumumkan semuanya di sana. 100 orang mendaftar. Kenyataannya, lebih sedikit orang yang mulai melakukan sesuatu, sekitar 30 orang.

Bahkan lebih sedikit orang yang menyelesaikan kursus tersebut, karena perlu menulis tes untuk kode-kode yang sudah ada. Dan juga memperbaiki beberapa bug atau membuat beberapa fitur. Dan masih ada beberapa mahasiswa yang menutup mata kuliahnya.

Saat ini, pada mata kuliah ini, mahasiswa telah memperbaiki sekitar 14 soal dan membuat 10 fitur dengan berbagai ukuran. Dan, menurut saya, ini adalah pengganti penuh dari satu atau dua pengembang.

Antara lain, kami mengeluarkan ijazah dan kursus. Dan 12 orang menerima ijazah. 6 dari mereka telah mempertahankan diri di β€œ5”. Mereka yang tersisa belum mendapatkan perlindungan, tapi menurutku semuanya akan baik-baik saja bagi mereka juga.

ΠŸΠ»Π°Π½Ρ‹ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅

Rencana apa yang kita miliki untuk masa depan?

Setidaknya permintaan fitur tersebut yang telah kami dengar dari pengguna dan ingin kami lakukan. Ini:

  • Memantau kebenaran pelacakan garis waktu di arsip cadangan cluster HA. Anda dapat melakukan ini dengan WAL-G. Dan saya pikir kita akan memiliki siswa yang akan menangani masalah ini.
  • Kami sudah memiliki orang yang bertanggung jawab untuk mentransfer cadangan dan WAL antar cloud.
  • Dan baru-baru ini kami menerbitkan gagasan bahwa kami dapat mempercepat WAL-G lebih jauh lagi dengan membongkar cadangan tambahan tanpa menulis ulang halaman dan mengoptimalkan arsip yang kami kirim ke sana.

Anda dapat membagikannya di sini

Untuk apa laporan ini? Apalagi sekarang selain 4 orang yang mendukung proyek ini, kami punya tambahan tangan yang jumlahnya cukup banyak. Apalagi jika Anda menulis kepada mereka melalui pesan pribadi. Dan jika Anda melakukan backup data dan melakukannya menggunakan WAL-G atau ingin pindah ke WAL-G, maka kami dapat dengan mudah mengakomodasi keinginan Anda.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

Ini adalah kode QR dan tautan. Anda dapat membacanya dan menulis semua keinginan Anda. Misalnya, kami tidak memperbaiki beberapa bug. Atau Anda benar-benar menginginkan suatu fitur, tetapi karena alasan tertentu fitur tersebut belum ada di cadangan mana pun, termasuk milik kami. Pastikan untuk menulis tentang ini.

WAL-G: fitur baru dan perluasan komunitas. Georgy Rylov

pertanyaan

Halo! Terima kasih atas laporannya! Pertanyaan tentang WAL-G, tapi bukan tentang Postgres. WAL-G mencadangkan MySQL dan memanggil cadangan tambahan. Jika kita mengambil instalasi modern di CentOS dan jika Anda melakukan yum install MySQL, MariDB akan diinstal. Dari versi 10.3 cadangan tambahan tidak didukung, cadangan MariDB didukung. Bagaimana kabarmu dengan ini?

Saat ini kami belum mencoba membuat cadangan MariDB. Kami telah menerima permintaan dukungan FoundationDB, namun secara umum, jika ada permintaan seperti itu, maka kami dapat menemukan orang yang bersedia melakukannya. Ini tidak selama atau sesulit yang saya kira.

Selamat siang Terima kasih atas laporannya! Pertanyaan tentang potensi fitur baru. Apakah Anda siap membuat WAL-G berfungsi dengan kaset sehingga Anda dapat membuat cadangan ke kaset?

Cadangan pada penyimpanan tape rupanya maksudnya?

Ya.

Ada Andrei Borodin yang bisa menjawab pertanyaan ini lebih baik dari saya.

(Andrey) Ya, terima kasih atas pertanyaannya! Kami mendapat permintaan untuk mentransfer cadangan ke tape dari penyimpanan cloud. Dan untuk ini penggergajian perpindahan antar awan. Karena transfer cloud-to-cloud adalah versi umum dari transfer tape. Selain itu, kami memiliki arsitektur yang dapat diperluas dalam hal Penyimpanan. Ngomong-ngomong, banyak Storoges yang ditulis oleh pelajar. Dan jika Anda menulis Storage untuk tape, tentu saja itu akan didukung. Kami siap mempertimbangkan permintaan tarik. Di sana Anda perlu menulis file, membaca file. Jika Anda melakukan hal ini di Go, biasanya Anda akan mendapatkan 50 baris kode. Dan kemudian rekaman itu akan didukung di WAL-G.

Terima kasih atas laporannya! Proses pengembangan yang menarik. Cadangan adalah bagian penting dari fungsionalitas yang harus dicakup dengan baik dalam pengujian. Ketika Anda menerapkan fungsionalitas untuk database baru, apakah siswa juga menulis tesnya, atau apakah Anda menulis tesnya sendiri dan kemudian memberikan implementasinya kepada siswa?

Siswa juga menulis tes. Namun siswa lebih banyak menulis untuk fitur seperti database baru. Mereka menulis tes integrasi. Dan mereka menulis unit test. Jika integrasi berhasil, maka saat ini, ini adalah skrip yang Anda jalankan secara manual atau Anda memiliki cron yang melakukannya, misalnya. Artinya, naskah di sana sangat jelas.

Para siswa tidak memiliki banyak pengalaman. Apakah peninjauan memerlukan banyak waktu?

Ya, peninjauan membutuhkan banyak waktu. Artinya, biasanya ketika beberapa pelaku datang sekaligus dan mengatakan bahwa saya melakukan ini, saya melakukan itu, maka Anda perlu berpikir dan menyisihkan waktu sekitar setengah hari untuk mencari tahu apa yang mereka tulis di sana. Karena kodenya harus dibaca dengan cermat. Mereka tidak melakukan wawancara. Kami tidak mengenal mereka dengan baik, sehingga membutuhkan banyak waktu.

Terima kasih atas laporannya! Sebelumnya Andrey Borodin menyatakan bahwa archive_command di WAL-G harus dipanggil langsung. Namun dalam kasus semacam kartrid cluster, kita memerlukan logika tambahan untuk menentukan node dari mana poros akan dikirim. Bagaimana Anda mengatasi masalah ini sendiri?

Apa masalahmu disini? Katakanlah Anda memiliki replika sinkron yang Anda buat cadangannya? Atau apa?

(Andrey) Faktanya memang WAL-G dimaksudkan untuk digunakan tanpa skrip shell. Jika ada yang kurang, mari tambahkan logika yang seharusnya ada di dalam WAL-G. Adapun dari mana pengarsipan harus berasal, kami percaya bahwa pengarsipan harus dari master saat ini di cluster. Mengarsipkan dari replika adalah ide yang buruk. Ada berbagai kemungkinan skenario masalah. Khususnya, masalah dengan jadwal pengarsipan dan informasi tambahan lainnya. Terima kasih atas pertanyaannya!

(Klarifikasi: Kami membuang skrip shell dalam edisi ini)

Selamat malam! Terima kasih atas laporannya! Saya tertarik dengan fitur catchup yang Anda bicarakan. Kami dihadapkan pada situasi dimana replika berada di belakang dan tidak dapat mengejar. Dan saya tidak menemukan deskripsi fitur ini di dokumen WAL-G.

Catchup muncul secara harfiah pada tanggal 20 Januari 2020. Dokumentasinya mungkin memerlukan lebih banyak perbaikan. Kami menulisnya sendiri dan kami tidak menulisnya dengan baik. Dan mungkin kita harus mulai mewajibkan siswa untuk menulisnya.

Apakah sudah dirilis?

Permintaan penarikan sudah mati, yaitu saya memeriksanya. Saya mencobanya di cluster uji. Sejauh ini kami belum memiliki situasi di mana kami dapat mengujinya dalam contoh pertempuran.

Kapan diharapkan?

Aku tidak tahu. Tunggu sebulan, kami akan periksa pastinya.

Sumber: www.habr.com

Tambah komentar