WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Aku saranake sampeyan maca transkrip laporan awal 2020 dening Georgy Rylov "WAL-G: kesempatan anyar lan ekspansi komunitas"

Penyelenggara sumber terbuka ngadhepi akeh tantangan nalika tuwuh. Kepiye carane nulis fitur sing dibutuhake, ndandani masalah liyane lan bisa ndeleng panjaluk tarik liyane? Nggunakake WAL-G (alat serep kanggo PostgreSQL) minangka conto, Aku bakal pitutur marang kowe carane kita ditanggulangi masalah iki dening miwiti kursus ing Open-source pembangunan ing universitas, apa kita ngrambah lan ngendi kita bakal pindhah sabanjurΓ©.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Hello maneh kabeh! Aku pangembang Yandex saka Yekaterinburg. Lan dina iki aku bakal ngomong babagan WAL-G.

Judhul laporan ora ujar manawa ana babagan serep. Ana sing ngerti apa iku WAL-G? Utawa kabeh wong ngerti? Angkat tangan yen ora ngerti. Telek, sampeyan teka ing laporan lan ora ngerti apa iku.

Ayo kula pitutur marang kowe apa sing bakal kelakon dina iki. Kedaden yen tim kita wis nggawe serep kanggo sawetara wektu. Lan iki laporan liyane ing seri ngendi kita pirembagan bab carane nyimpen data kanthi aman, aman, trep lan irit.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Ing seri sadurunge ana akeh laporan dening Andrei Borodin lan Vladimir Leskov. Ana akeh kita. Lan kita wis ngomong babagan WAL-G nganti pirang-pirang taun.

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

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

Laporan iki bakal rada beda karo liyane amarga luwih akeh babagan bagean teknis, nanging ing kene aku bakal ngomong babagan carane kita nemoni masalah sing ana gandhengane karo tuwuhing masyarakat. Lan carane kita teka munggah karo idea cilik sing mbantu kita ngrampungake karo iki.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Sawetara taun kepungkur, WAL-G minangka proyek cilik sing dipikolehi saka Citus Data. Lan kita mung njupuk. Lan dikembangake dening wong siji.

Lan mung WAL-G ora duwe:

  • Gawe serep saka replika.
  • Ora ana serep tambahan.
  • Ora ana serep WAL-Delta.
  • Lan isih akeh sing ilang.

Sajrone sawetara taun iki, WAL-G wis akeh banget.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Lan ing taun 2020, kabeh sing kasebut ing ndhuwur wis katon. Lan iki ditambahake apa sing saiki kita duwe:

  • Luwih saka 1 lintang ing GitHub.
  • 150 garpu.
  • Kira-kira 15 PR mbukak.
  • Lan akeh liyane kontributor.
  • Lan mbukak masalah kabeh wektu. Lan iki senadyan kasunyatan sing kita secara harfiah pindhah ana saben dina lan nindakake soko babagan.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Lan kita nyimpulake manawa proyek iki mbutuhake perhatian luwih akeh, sanajan awake dhewe ora kudu ngetrapake apa wae kanggo layanan Managed Databases ing Yandex.

Lan ing endi wae ing musim gugur 2018, ana ide sing ana ing pikiran kita. Biasane tim duwe sawetara cara kanggo ngembangake sawetara fitur utawa ndandani bug yen sampeyan ora duwe tangan sing cukup. Contone, sampeyan bisa nyewa pangembang liyane lan mbayar dhuwit. Utawa sampeyan bisa njupuk intern kanggo sawetara wektu lan uga mbayar sawetara gaji. Nanging isih ana klompok sing cukup akeh, sawetara sing wis ngerti carane nulis kode. Sampeyan mung ora ngerti apa kualitas kode kasebut.

Kita mikir babagan iki lan mutusake kanggo nyoba narik kawigaten para siswa. Nanging siswa ora bakal melu ing kabeh karo kita. Dheweke mung bakal nindakake sawetara bagean saka karya. Lan dheweke bakal, contone, nulis tes, ndandani kewan omo, ngetrapake fitur sing ora mengaruhi fungsi utama. Fungsi utama nggawe serep lan mulihake serep. Yen kita salah nggawe serep, kita bakal ngalami mundhut data. Lan ora ana sing pengin iki, mesthi. Saben uwong pengin kabeh dadi aman banget. Mulane, mesthine, kita ora pengin nglilani kode sing kurang dipercaya tinimbang kita dhewe. Tegese, kode apa wae sing ora kritis yaiku sing pengin ditampa saka karyawan tambahan.

Ing kahanan apa mahasiswa PR ditampa?

  • Dheweke kudu nutupi kode kanthi tes. Kabeh kudu ditindakake ing CI.
  • Lan kita uga liwat 2 review. Siji dening Andrey Borodin lan siji dening aku.
  • Lan tambahan, kanggo mriksa manawa iki ora bakal ngilangi apa-apa ing layanan kita, aku ngunggahake rapat kasebut kanthi kapisah karo komitmen iki. Lan kita mriksa tes end-to-end sing ora ana sing gagal.

Kursus khusus ing Open Source

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

A little bab apa iki dibutuhake lan apa iki, misale jek kula, punika idea kelangan.

Kanggo kita, bathi jelas:

  • We njaluk tangan ekstra.
  • Lan kita nggoleki calon tim ing antarane siswa pinter sing nulis kode pinter.

Apa gunane kanggo siswa?

Bisa uga kurang jelas, amarga siswa, paling ora, ora nampa dhuwit kanggo kode sing ditulis, nanging mung nampa nilai kanggo cathetan siswa.

Aku takon babagan iki. Lan ing tembung:

  • Pengalaman kontributor ing Open Source.
  • Njaluk baris ing CV.
  • Buktikake dhewe lan lulus wawancara ing Yandex.
  • Dadi anggota GSoC.
  • +1 kursus khusus kanggo sing pengin nulis kode.

Aku ora bakal ngomong babagan carane kursus kasebut disusun. Aku mung bakal ngomong yen WAL-G minangka proyek utama. Kita uga kalebu proyek kayata Odyssey, PostgreSQL lan ClickHouse ing kursus iki.

Lan dheweke menehi masalah ora mung ing kursus iki, nanging uga menehi diploma lan kursus.

Apa babagan keuntungan kanggo pangguna?

Saiki ayo pindhah menyang bagean sing paling sampeyan minati. Apa gunane sampeyan iki? Intine yaiku para siswa ndandani akeh bug. Lan kita nggawe fitur panyuwunan sing dijaluk.

Lan keparenga kula nyariyosaken bab-bab ingkang sampun panjenengan karepaken saha sampun kawujud.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Dhukungan tablespaces. Tablespaces ing WAL-G wis samesthine mbokmenawa wiwit release saka WAL-G, amarga WAL-G minangka penerus kanggo alat serep liyane WAL-E, ngendi serep database karo tablespaces padha didhukung.

Ayo kula sedhela ngelingake sampeyan apa iku lan apa iku perlu. Biasane, kabeh data Postgres sampeyan manggoni siji direktori ing sistem file, sing diarani basis. Lan direktori iki wis ngemot kabeh file lan subdirektori sing dibutuhake dening Postgres.

Tablespaces minangka direktori sing ngemot data Postgres, nanging ora ana ing njaba direktori dhasar. Slide nuduhake yen tablespacs dumunung ing njaba direktori dhasar.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Apa iki katon kanggo Postgres dhewe? Ana subdirektori kapisah pg_tblspc ing direktori dhasar. Lan ngemot symlinks menyang direktori sing bener ngemot data Postgres ing njaba direktori dhasar.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Nalika sampeyan nggunakake kabeh iki, banjur kanggo sampeyan printah iki bisa katon kaya iki. Sing, sampeyan nggawe tabel ing sawetara tablespace tartamtu lan ndeleng ngendi iku saiki. Iki minangka rong baris pungkasan, rong perintah pungkasan sing diarani. Lan ing kana iku cetha yen ana sawetara cara. Nanging ing kasunyatan, iki ora cara nyata. Iki minangka path prefixed saka direktori dhasar menyang tablespace. Lan saka ing kono dicocogake karo symlink sing ndadΓ©kakΓ© menyang data nyata sampeyan.

Kita ora nggunakake kabeh iki ing tim kita, nanging iki digunakake dening akeh kedhaftar WAL-E liyane sing wrote kanggo kita sing padha arep pindhah menyang WAL-G, nanging iki mandegake. Iki saiki didhukung.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Fitur liyane sing ditawakake kursus khusus yaiku catchup. Wong sing mbokmenawa wis kerja luwih akeh karo Oracle tinimbang karo Postgres ngerti babagan catchup.

Sedhela babagan apa iku. Topologi kluster ing layanan kita biasane katon kaya iki. Kita duwe master. Ana replika sing stream nulis-ahead log saka iku. Lan replika ngandhani master sing LSN saiki. Lan nang endi wae ing podo karo iki, log bisa diarsipakΓ©. Lan saliyane kanggo arsip log, serep uga dikirim menyang awan. Lan serep delta dikirim.

Apa bisa dadi masalah? Yen sampeyan duwe database sing cukup gedhe, bisa uga replika sampeyan wiwit ketinggalan adoh saka master. Lan dheweke lags dadi adoh konco dheweke ora bisa nyekel munggah karo wong. Masalah iki biasane kudu ditanggulangi piye wae.

Lan cara sing paling gampang yaiku mbusak replika lan upload maneh, amarga ora bakal keno, lan masalah kasebut kudu ditangani. Nanging iki cukup suwe, amarga mulihake kabeh serep database 10 TB iku wektu sing suwe banget. Lan kita pengin nindakake kabeh iki kanthi cepet yen ana masalah kasebut. Lan sing persis apa catchup kanggo.

Catchup ngidini sampeyan nggunakake serep delta, sing disimpen ing mΓ©ga kanthi cara iki. Sampeyan ngomong sing LSN replika lagging saiki lan nemtokake ing printah catchup kanggo nggawe serep delta antarane LSN lan LSN kang kluster sampeyan saiki dumunung. Lan sawise sampeyan mulihake serep iki kanggo replika sing ketinggalan.

Dasar liyane

Siswa uga nggawa kita akeh fitur bebarengan. Wiwit ing Yandex kita masak ora mung Postgres, kita uga duwe MySQL, MongoDB, Redis, ClickHouse, ing sawetara titik kita kudu bisa nggawe serep karo pemulihan point-in-time kanggo MySQL, lan supaya ana kesempatan kanggo ngunggah. padha menyang mΓ©ga.

Lan kita pengin nindakake kanthi cara sing padha karo sing ditindakake WAL-G. Lan kita mutusake kanggo eksprimen lan ndeleng kepiye kabeh katon.

Lan ing wiwitan, tanpa nuduhake logika iki kanthi cara apa wae, dheweke nulis kode kasebut ing garpu. Dheweke weruh manawa ana model sing bisa digunakake lan bisa mabur. Banjur kita mikir yen komunitas utama kita yaiku postgresists, dheweke nggunakake WAL-G. Lan mulane kita kudu piye wae misahake bagean kasebut. Yaiku, nalika nyunting kode kanggo Postgres, kita ora ngrusak MySQL; nalika nyunting MySQL, kita ora ngrusak Postgres.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Ide pisanan babagan cara misahake iki yaiku ide nggunakake pendekatan sing padha sing digunakake ing ekstensi PostgreSQL. Lan, nyatane, kanggo nggawe serep MySQL sampeyan kudu nginstal sawetara perpustakaan dinamis.

Nanging ing kene asimetri pendekatan iki langsung katon. Nalika nggawe serep Postgres, sampeyan nggawe serep normal kanggo Postgres lan kabeh apik. Lan kanggo MySQL ternyata sampeyan nginstal serep kanggo Postgres lan uga nginstal perpustakaan dinamis kanggo MySQL. Iku muni jenis aneh. Kita uga mikir lan mutusake manawa iki dudu solusi sing dibutuhake.

Macem-macem mbangun kanggo Postgres, MySQL, MongoDB, Redis

Nanging iki ngidini kita, misale jek, kanggo njupuk keputusan sing bener - kanggo nyedhiyakake macem-macem majelis kanggo basis sing beda. Iki ndadekake iku bisa kanggo isolasi logika disambungake menyang serep saka macem-macem database sing bakal ngakses API umum sing WAL-G dileksanakake.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Iki minangka bagean sing kita tulis dhewe - sadurunge menehi masalah marang siswa. Tegese, iki minangka bagean sing bisa nindakake salah, mula kita mutusake manawa luwih becik nindakake kaya iki lan kabeh bakal apik.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Sawise iku, kita menehi masalah. Padha langsung dibongkar. Siswa diwajibake ndhukung telung dhasar.

Iki MySQL, sing wis digawe serep nggunakake WAL-G kanthi cara iki luwih saka setahun.

Lan saiki MongoDB wis nyedhak produksi, sing lagi rampung karo file. Nyatane, kita nulis kerangka kanggo kabeh iki. Banjur siswa nulis bab-bab sing bisa ditindakake. Banjur kita nggawa menyang negara sing bisa ditampa ing produksi.

Masalah kasebut ora katon kaya siswa kudu nulis alat serep lengkap kanggo saben database kasebut. Kita ora duwe masalah kaya ngono. Masalah kita yaiku kita pengin pemulihan titik-wektu lan kita pengin nggawe serep menyang awan. Lan dheweke njaluk siswa nulis sawetara kode sing bakal ngrampungake iki. Siswa nggunakake alat serep sing wis ana, sing njupuk serep, banjur disambungake kabeh karo WAL-G, sing diterusake menyang awan. Lan padha uga nambah titik-ing-wektu Recovery kanggo iki.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Apa maneh sing digawa siswa? Dheweke nggawa dhukungan enkripsi Libsodium menyang WAL-G.

Kita uga duwe kabijakan panyimpenan serep. Saiki serep bisa ditandhani minangka permanen. Lan piye wae luwih trep kanggo layanan sampeyan ngotomatisasi proses nyimpen.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Apa asil eksperimen iki?

Luwih saka 100 wong sing pisanan ndhaptar kursus kasebut. Kaping pisanan, aku ora ngomong yen universitas ing Yekaterinburg minangka Universitas Federal Ural. We announced kabeh ana. 100 wong kedhaftar. Ing kasunyatan, luwih sithik wong sing miwiti nindakake, udakara 30 wong.

Malah luwih sithik wong sing ngrampungake kursus kasebut, amarga kudu nulis tes kanggo kode sing wis ana. Lan uga ndandani sawetara bug utawa nggawe sawetara fitur. Lan sawetara siswa isih nutup kursus.

Saiki, sajrone kursus iki, para siswa wis ngrampungake babagan 14 masalah lan nggawe 10 fitur saka macem-macem ukuran. Lan, misale jek, iki minangka panggantos lengkap saka siji utawa loro pangembang.

Antarane liyane, kita ngetokake diploma lan kursus. Lan 12 nampa diploma. 6 wong wis mbela awake dhewe ing "5". Wong-wong sing isih ana durung duwe perlindungan, nanging aku mikir manawa kabeh bakal apik kanggo dheweke.

Rencana kanggo masa depan

Apa rencana kita kanggo masa depan?

Paling ora panjaluk fitur sing wis dirungokake saka pangguna lan pengin ditindakake. Iki:

  • Ngawasi bener nelusuri timeline ing arsip serep kluster HA. Sampeyan bisa nindakake iki nganggo WAL-G. Lan aku mikir bakal duwe siswa sing bakal ngrampungake perkara iki.
  • Kita wis duwe wong sing tanggung jawab kanggo nransfer serep lan WAL ing antarane awan.
  • Lan kita bubar nerbitake ide manawa kita bisa nyepetake WAL-G kanthi mbukak serep tambahan tanpa nulis ulang kaca lan ngoptimalake arsip sing dikirim ing kana.

Sampeyan bisa enggo bareng kene

Kanggo apa laporan iki? Kajaba iku, saiki, saliyane 4 wong sing ndhukung proyek iki, kita duwe tangan tambahan, sing ana cukup akeh. Utamane yen sampeyan nulis ing pesen pribadi. Lan yen sampeyan nggawe serep data lan nindakake kanthi nggunakake WAL-G utawa pengin pindhah menyang WAL-G, mula kita bisa kanthi gampang nyukupi kekarepan sampeyan.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Iki kode QR lan link. Sampeyan bisa mbukak liwat lan nulis kabeh wishes. Contone, kita ora ndandani sawetara bug. Utawa sampeyan pengin sawetara fitur, nanging sakperangan alesan iku durung ing sembarang serep, kalebu kita. Aja manawa kanggo nulis babagan iki.

WAL-G: fitur anyar lan perluasan komunitas. Georgy Rylov

Pitakonan

Hello! Matur nuwun kanggo laporan! Pitakonan babagan WAL-G, nanging ora babagan Postgres. WAL-G gawe serep MySQL lan nelpon serep ekstra. Yen kita njupuk instalasi modern ing CentOS lan yen sampeyan nginstal MySQL, MariDB bakal diinstal. Saka versi 10.3 serep ekstra ora didhukung, serep MariDB didhukung. Piye kabarmu iki?

Saiki, kita durung nyoba nggawe serep MariDB. Kita wis njaluk panjaluk dhukungan FoundationDB, nanging umume, yen ana panjaluk kasebut, mula kita bisa nemokake wong sing bakal nindakake. Ora suwe utawa angel kaya sing dakkira.

sugeng sonten Matur nuwun kanggo laporan! Pitakonan babagan fitur anyar sing potensial. Apa sampeyan siap nggawe karya WAL-G nganggo kaset supaya sampeyan bisa nggawe serep menyang kaset?

Gawe serep ing panyimpenan tape ketoke tegese?

Ya.

Ana Andrei Borodin, sing bisa njawab pitakonan iki luwih apik tinimbang aku.

(Andrey) Ya, matur nuwun kanggo pitakonan! Kita duwe panjalukan kanggo mindhah serep menyang tape saka panyimpenan maya. Lan kanggo iki sawing transfer antarane awan. Amarga transfer cloud-to-cloud minangka versi transfer tape sing umum. Kajaba iku, kita duwe arsitektur extensible ing syarat-syarat Storages. Miturut cara, akeh Storoges ditulis dening siswa. Lan yen sampeyan nulis Panyimpenan kanggo tape, mesthine bakal didhukung. Kita siyap kanggo nimbang panjalukan narik. Ing kana sampeyan kudu nulis file, maca file. Yen sampeyan nindakake iki ing Go, sampeyan biasane duwe 50 baris kode. Banjur tape bakal didhukung ing WAL-G.

Matur nuwun kanggo laporan! Proses pangembangan sing menarik. Gawe serep minangka fungsi serius sing kudu dilindhungi kanthi tes. Nalika sampeyan ngetrapake fungsionalitas kanggo database anyar, apa siswa uga nulis tes kasebut, utawa sampeyan nulis tes kasebut dhewe lan banjur menehi implementasine marang siswa?

Siswa uga nulis tes. Nanging siswa nulis luwih akeh kanggo fitur kayata database anyar. Dheweke nulis tes integrasi. Lan padha nulis tes unit. Yen integrasi liwati, yaiku, saiki, iki minangka skrip sing sampeyan lakoni kanthi manual utawa sampeyan duwe cron, umpamane. Tegese, naskah ing kono cetha banget.

Siswa ora duwe pengalaman akeh. Apa review njupuk akeh wektu?

Ya, review njupuk wektu akeh. Yaiku, biasane, nalika sawetara committers teka bebarengan lan ujar manawa aku nindakake iki, aku nindakake, mula sampeyan kudu mikir lan nyisihake setengah dina kanggo ngerteni apa sing ditulis ing kono. Amarga kode kasebut kudu diwaca kanthi ati-ati. Dheweke ora duwe wawancara. Kita ora ngerti banget, mula butuh wektu sing akeh.

Matur nuwun kanggo laporan! Sadurunge, Andrey Borodin nyatakake yen archive_command ing WAL-G kudu diarani langsung. Nanging ing cilik saka sawetara jinis kartrij kluster, kita kudu logika tambahan kanggo nemtokake simpul saka kang ngirim shafts. Kepiye carane ngatasi masalah iki dhewe?

Apa masalah sampeyan ing kene? Contone, sampeyan duwe replika sinkron sing nggawe serep? Utawa apa?

(Andrey) Kasunyatane, WAL-G pancen digunakake tanpa skrip cangkang. Yen ana sing ilang, banjur ditambahake logika sing kudu ana ing WAL-G. Minangka kanggo ngendi arsip kudu teka saka, kita pracaya sing arsip kudu saka master saiki ing kluster. Arsip saka replika iku gagasan ala. Ana macem-macem kemungkinan skenario karo masalah. Utamane, masalah karo garis wektu arsip lan informasi tambahan. Matur nuwun kanggo pitakonan!

(Klarifikasi: Kita nyingkirake skrip cangkang ing masalah iki)

sugeng sonten! Matur nuwun kanggo laporan! Aku kasengsem ing fitur catchup sampeyan ngedika bab. Kita ngadhepi kahanan sing ana replika lan ora bisa nyekel. Lan aku ora nemokake katrangan babagan fitur iki ing dokumen WAL-G.

Catchup muncul ing tanggal 20 Januari 2020. Dokumentasi bisa uga mbutuhake karya liyane. Kita nulis dhewe lan kita ora nulis kanthi apik. Lan mbok menawa kita kudu miwiti mbutuhake siswa nulis.

Apa wis dirilis?

Panjaluk tarik wis mati, yaiku aku mriksa. Aku nyoba iki ing kluster test. Nganti saiki, kita durung duwe kahanan sing bisa nyoba iki ing conto pertempuran.

Nalika nyana?

Aku ora ngerti. Ngenteni sasi, kita bakal mriksa manawa.

Source: www.habr.com

Add a comment