Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Kontribusi Yandex kana pangkalan data di handap ieu bakal diulas.

  • clickhouse
  • Odyssey
  • Pamulihan ka titik dina waktos (WAL-G)
  • PostgreSQL (kaasup logerrors, Amcheck, heapcheck)
  • Greenplum

video:

Halo Dunya! Nami abdi Andrey Borodin. Sareng naon anu kuring lakukeun di Yandex.Cloud nyaéta ngembangkeun database relational kabuka pikeun kapentingan klien Yandex.Cloud sareng Yandex.Cloud.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Dina obrolan ieu, urang bakal ngobrol ngeunaan tantangan nyanghareupan database kabuka dina skala. Naha éta penting? Kusabab saeutik, saeutik masalah anu, kawas reungit, lajeng jadi gajah. Aranjeunna janten ageung nalika anjeun gaduh seueur klaster.

Tapi éta sanés hal anu utami. Kajadian anu luar biasa. Hal anu lumangsung dina hiji dina sajuta kasus. Sareng dina lingkungan méga, anjeun kedah disiapkeun pikeun éta, sabab hal-hal anu luar biasa janten kamungkinan pisan nalika aya anu aya dina skala.

Tapi! Naon kauntungan tina database terbuka? Kanyataan yén anjeun gaduh kasempetan téoritis pikeun nungkulan sagala masalah. Anjeun gaduh kode sumber, anjeun gaduh pangaweruh programming. Urang ngagabungkeun eta sarta gawéna.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Pendekatan naon anu aya dina ngerjakeun parangkat lunak open source?

  • Pendekatan anu paling lugas nyaéta ngagunakeun parangkat lunak. Upami anjeun nganggo protokol, upami anjeun nganggo standar, upami anjeun nganggo format, upami anjeun nyerat patarosan dina parangkat lunak open source, maka anjeun parantos ngadukung éta.
  • Anjeun ngajantenkeun ékosistemna langkung ageung. Anjeun ngajantenkeun kamungkinan deteksi awal kutu langkung ageung. Anjeun ningkatkeun reliabilitas sistem ieu. Anjeun ningkatkeun kasadiaan pamekar di pasar. Anjeun ningkatkeun software ieu. Anjeun tos janten kontributor upami anjeun nembé kéngingkeun gaya sareng ngupingkeun hal anu aya.
  • Pendekatan anu sanés anu kaharti nyaéta ngasponsoran parangkat lunak open source. Contona, program Google Summer of Code well-dipikawanoh, nalika Google mayar sajumlah badag siswa ti sakuliah dunya duit kaharti ambéh maranéhanana ngamekarkeun proyék software kabuka nu minuhan sarat lisénsi tangtu.
  • Ieu mangrupikeun pendekatan anu pikaresepeun pisan sabab ngamungkinkeun parangkat lunak mekar tanpa ngalihkeun fokus tina komunitas. Google, salaku raksasa téknologi, henteu nyarios yén urang hoyong fitur ieu, urang hoyong ngalereskeun bug ieu sareng ieu dimana urang kedah ngagali. Google nyarios: "Lakukeun naon anu anjeun lakukeun. Ngan tetep damel cara anjeun damel sareng sadayana bakal saé. ”
  • Pendekatan salajengna pikeun ilubiung dina open source nyaéta partisipasi. Nalika anjeun gaduh masalah dina parangkat lunak open source sareng aya pamekar, pamekar anjeun ngamimitian ngarengsekeun masalah. Aranjeunna mimiti ngajantenkeun infrastruktur anjeun langkung efisien, program anjeun langkung gancang sareng langkung dipercaya.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Salah sahiji proyék Yandex anu paling kasohor dina widang software open source nyaéta ClickHouse. Ieu mangrupikeun pangkalan data anu dilahirkeun salaku réspon kana tantangan anu disanghareupan Yandex.Metrica.

Sareng salaku pangkalan data, éta dilakukeun dina open source pikeun nyiptakeun ékosistem sareng ngembangkeunana babarengan sareng pamekar anu sanés (henteu ngan ukur dina Yandex). Sareng ayeuna ieu mangrupikeun proyék ageung dimana seueur perusahaan anu aub.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Dina Yandex.Cloud, urang nyiptakeun ClickHouse di luhureun Panyimpenan Objék Yandex, nyaéta dina luhureun panyimpenan awan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Naha ieu penting dina awan? Kusabab sagala database jalan di segitiga ieu, dina piramida ieu, dina hirarki ieu tipe memori. Anjeun gaduh registers gancang tapi leutik tur murah SSD badag tapi slow, teuas drive na sababaraha alat block séjén. Sareng upami anjeun cekap dina luhureun piramida, maka anjeun gaduh database gancang. upami anjeun cekap di handapeun piramida ieu, maka anjeun gaduh database skala. Sareng dina hal ieu, nambihan lapisan sanés ti handap mangrupikeun pendekatan logis pikeun ningkatkeun skalabilitas pangkalan data.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Kumaha éta tiasa dilakukeun? Ieu titik penting dina laporan ieu.

  • Urang bisa nerapkeun ClickHouse leuwih MDS. MDS mangrupikeun antarbeungeut panyimpen awan Yandex internal. Éta leuwih kompleks tinimbang protokol S3 umum, tapi leuwih cocog pikeun alat block. Éta hadé pikeun ngarékam data. Merlukeun leuwih programming. Programer bakal program, éta malah alus, éta metot.
  • S3 mangrupikeun pendekatan anu langkung umum anu ngajantenkeun antarbeungeut langkung saderhana kalayan biaya adaptasi anu kirang pikeun sababaraha beban kerja.

Alami, wanting nyadiakeun fungsionalitas ka sakabéh ékosistem ClickHouse sarta ngalakukeun tugas anu diperlukeun di jero Yandex.Cloud, urang mutuskeun pikeun mastikeun yén sakabéh komunitas ClickHouse bakal nguntungkeun tina eta. Urang dilaksanakeun ClickHouse leuwih S3, moal ClickHouse leuwih MDS. Sareng ieu seueur padamelan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Rujukan:

https://github.com/ClickHouse/ClickHouse/pull/7946 "Lapisan abstraksi sistem file"
https://github.com/ClickHouse/ClickHouse/pull/8011 "Integrasi AWS SDK S3"
https://github.com/ClickHouse/ClickHouse/pull/8649 "Palaksanaan dasar antarmuka IDisk pikeun S3"
https://github.com/ClickHouse/ClickHouse/pull/8356 "Integrasi mesin panyimpen log sareng antarmuka IDisk"
https://github.com/ClickHouse/ClickHouse/pull/8862 "Log engine rojongan pikeun S3 na SeekableReadBuffer"
https://github.com/ClickHouse/ClickHouse/pull/9128 "Rojongan Storage Stripe Log S3"
https://github.com/ClickHouse/ClickHouse/pull/9415 "Rojongan awal Storage MergeTree pikeun S3"
https://github.com/ClickHouse/ClickHouse/pull/9646 "MergeTree rojongan pinuh pikeun S3"
https://github.com/ClickHouse/ClickHouse/pull/10126 "Rojongan ReplicatedMergeTree leuwih S3"
https://github.com/ClickHouse/ClickHouse/pull/11134 "Tambahkeun kredensial standar sareng header khusus pikeun neundeun s3"
https://github.com/ClickHouse/ClickHouse/pull/10576 "S3 kalayan konfigurasi proxy dinamis"
https://github.com/ClickHouse/ClickHouse/pull/10744 "S3 kalawan proxy resolver"

Ieu mangrupikeun daptar pamundut tarik pikeun ngalaksanakeun sistem file virtual di ClickHouse. Ieu angka nu gede ngarupakeun requests tarikan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Rujukan:

https://github.com/ClickHouse/ClickHouse/pull/9760 "DiskS3 hardlinks palaksanaan optimal"
https://github.com/ClickHouse/ClickHouse/pull/11522 "Klien HTTP S3 - Hindarkeun nyalin aliran réspon kana mémori"
https://github.com/ClickHouse/ClickHouse/pull/11561 "Hindarkeun nyalin sadayana aliran réspon kana mémori dina S3 HTTP
klien"
https://github.com/ClickHouse/ClickHouse/pull/13076 "Kamampuhan pikeun tanda cache sareng indéks file pikeun disk S3"
https://github.com/ClickHouse/ClickHouse/pull/13459 "Pindahkeun bagian tina DiskLocal ka DiskS3 paralel"

Tapi pagawéan henteu réngsé di dinya. Saatos fitur ieu dijieun, sababaraha karya deui diperlukeun guna ngaoptimalkeun pungsi ieu.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Rujukan:

https://github.com/ClickHouse/ClickHouse/pull/12638 "Tambahkeun acara SelectedRows sareng SelectedBytes"
https://github.com/ClickHouse/ClickHouse/pull/12464 "Tambahkeun acara profil tina pamundut S3 ka system.events"
https://github.com/ClickHouse/ClickHouse/pull/13028 "Tambahkeun QueryTimeMicroseconds, SelectQueryTimeMicroseconds sareng InsertQueryTimeMicroseconds"

Lajeng ieu diperlukeun sangkan eta diagnosable, nyetél monitoring sarta nyieun manageable.

Sareng sadaya ieu dilakukeun supados sakumna komunitas, sakumna ékosistem ClickHouse, nampi hasil tina padamelan ieu.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Hayu urang ngaléngkah ka database transactional, ka database OLTP, nu leuwih deukeut ka kuring pribadi.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Ieu mangrupikeun bagian pangembangan DBMS open source. Jalma-jalma ieu ngalakukeun sihir jalanan pikeun ningkatkeun database kabuka transaksional.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Salah sahiji proyék, ngagunakeun conto nu urang bisa ngobrol ngeunaan kumaha jeung naon urang ngalakukeun, nyaéta Connection Pooler di Postgres.

Postgres nyaéta database prosés. Ieu ngandung harti yén pangkalan data kedah gaduh sakedik sambungan jaringan sabisa-bisa anu nanganan transaksi.

Di sisi anu sanés, dina lingkungan méga, kaayaan anu biasa nyaéta nalika sarébu sambungan dugi ka hiji klaster sakaligus. Jeung tugas pooler sambungan nyaéta pak sarébu sambungan kana sajumlah leutik sambungan server.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Urang bisa disebutkeun yen pooler sambungan teh operator telepon anu rearranges bait ambéh maranéhanana éfisién ngahontal database.

Hanjakal, teu aya kecap Rusia alus pikeun pooler sambungan. Kadang-kadang disebut sambungan multiplexer. Upami anjeun terang naon anu kedah disebat pooler sambungan, maka pastikeun pikeun ngawartosan, kuring bakal resep pisan nyarios basa téknis Rusia anu leres.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/2017/92899

Urang nalungtik poolers sambungan anu cocog pikeun klaster postgres junun. Sareng PgBouncer mangrupikeun pilihan anu pangsaéna pikeun kami. Tapi kami mendakan sababaraha masalah sareng PgBouncer. Sababaraha taun ka pengker, Volodya Borodin masihan laporan yén kami nganggo PgBouncer, kami resep sadayana, tapi aya nuansa, aya anu tiasa dianggo.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/media/2017/04/03/20170316H1_V.Borodin.pdf

Sarta kami digawé. Kami ngalereskeun masalah anu kami hadapi, kami nambal Bouncer, sareng nyobian nyorong paménta tarik di hulu. Tapi dasar single-threading éta hésé pikeun digawe sareng.

Urang kedah ngumpulkeun cascades ti Bouncers patched. Nalika urang gaduh seueur Bouncers single-threaded, sambungan dina lapisan luhur ditransferkeun ka lapisan jero Bouncers. Ieu sistem junun kirang anu hese ngawangun jeung skala deui mudik.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Urang sumping ka kacindekan yen urang dijieun pooler sambungan sorangan, nu disebut Odyssey. Urang nulis ti scratch.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.pgcon.org/2019/schedule/events/1312.en.html

Taun 2019, dina konperénsi PgCon, kuring nampilkeun pooler ieu ka komunitas pamekar. Ayeuna urang gaduh sakedik kirang ti 2 béntang dina GitHub, nyaéta proyék éta hirup, proyék éta populér.

Sareng upami anjeun nyiptakeun klaster Postgres di Yandex.Cloud, éta bakal janten kluster sareng Odyssey anu diwangun, anu dikonfigurasi deui nalika skala klaster deui atanapi mudik.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Naon anu urang diajar tina proyék ieu? Ngaluncurkeun proyék saingan sok léngkah anu agrésif, éta mangrupikeun ukuran anu ekstrim nalika urang nyarios yén aya masalah anu henteu direngsekeun gancang, henteu direngsekeun dina interval waktos anu cocog sareng urang. Tapi ieu mangrupa ukuran éféktif.

PgBouncer mimiti ngembangkeun gancang.

Sareng ayeuna proyék-proyék sanés parantos muncul. Salaku conto, pgagroal, anu dikembangkeun ku pamekar Red Hat. Aranjeunna ngudag tujuan anu sami sareng ngalaksanakeun ideu anu sami, tapi, tangtosna, kalayan spésifikna sorangan, anu langkung caket kana pamekar pgagroal.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Kasus anu sanés damel sareng komunitas postgres nyaéta malikkeun kana waktosna. Ieu recovery sanggeus gagal, ieu recovery ti cadangan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Aya seueur cadangan sareng aranjeunna sadayana béda. Ampir unggal padagang Postgres gaduh solusi cadangan sorangan.

Upami anjeun nyandak sadaya sistem cadangan, nyiptakeun matriks fitur sareng ngitung determinant dina matriks ieu, éta bakal nol. Naon ieu hartosna? Kumaha upami anjeun nyandak file cadangan khusus, maka éta henteu tiasa dirakit tina potongan-potongan anu sanés. Ieu unik dina palaksanaan na, éta unik dina tujuanana, éta unik dina gagasan anu napel na. Sarta aranjeunna sadayana husus.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.citusdata.com/blog/2017/08/18/introducing-wal-g-faster-restores-for-postgres/

Nalika kami nuju ngerjakeun masalah ieu, CitusData ngaluncurkeun proyék WAL-G. Ieu sistem cadangan nu dijieun kalawan panon ka lingkungan awan. Ayeuna CitusData parantos janten bagian tina Microsoft. Sareng dina waktos éta, kami resep pisan kana ideu anu ditetepkeun dina rilis awal WAL-G. Sarta kami mimiti nyumbang kana proyék ieu.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://github.com/wal-g/wal-g/graphs/contributors

Ayeuna aya seueur puluhan pamekar dina proyék ieu, tapi 10 kontributor paling luhur pikeun WAL-G kalebet 6 Yandexoids. Urang mawa loba gagasan urang dinya. Sareng, tangtosna, urang ngalaksanakeunana sorangan, nguji éta sorangan, ngagulungkeunana kana produksi sorangan, urang ngagunakeunana sorangan, urang sorangan terang dimana ngalih salajengna, bari berinteraksi sareng komunitas WAL-G anu ageung.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Sareng tina sudut pandang urang, ayeuna sistem cadangan ieu, kalebet ngiringan usaha urang, parantos janten optimal pikeun lingkungan awan. Ieu mangrupikeun biaya pangsaéna pikeun nyadangkeun Postgres dina méga.

Naon éta hartosna? Kami ngamajukeun ide anu lumayan ageung: cadangan kedah aman, murah pikeun dioperasikeun sareng gancang-gancang pikeun malikkeun.

Naha kudu murah pikeun beroperasi? Nalika teu aya anu rusak, anjeun henteu kedah terang yén anjeun gaduh cadangan. Sagalana jalan rupa, Anjeun runtah CPU sakumaha mungkin, Anjeun nganggo salaku saeutik sumberdaya disk Anjeun sabisa, jeung anjeun ngirim saloba bait ka jaringan sabisa ku kituna teu ngaganggu payload sahiji layanan berharga Anjeun.

Sarta lamun sagalana ngarecah, contona, admin turun data, aya nu salah, jeung anjeun urgently kudu balik deui ka jaman baheula, anjeun cageur kalayan sagala duit, sabab hayang data anjeun balik gancang sarta gembleng.

Sarta kami diwanohkeun gagasan basajan ieu. Sareng, sigana urang, urang junun ngalaksanakeunana.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Tapi éta henteu sadayana. Urang hayang hiji deui hal leutik. Simkuring miharep loba database béda. Henteu sakabéh klien kami ngagunakeun Postgres. Sababaraha urang ngagunakeun MySQL, MongoDB. Di komunitas, pamekar sanés ngadukung FoundationDB. Jeung daptar ieu terus ngembangna.

Komunitas resep kana ideu database anu dijalankeun dina lingkungan anu diurus dina méga. Sareng pamekar ngajaga pangkalan datana, anu tiasa dicadangkeun sacara seragam sareng Postgres sareng sistem cadangan kami.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Naon anu urang diajar tina carita ieu? Produk kami, salaku divisi pamekaran, sanés garis kode, sanés pernyataan, sanés file. produk urang teu narik requests. Ieu mangrupikeun ide anu kami sampaikeun ka masarakat. Ieu mangrupikeun kaahlian téknologi sareng gerakan téknologi nuju lingkungan awan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Aya database sapertos Postgres. Abdi paling resep inti Postgres. Kuring nyéépkeun seueur waktos pikeun ngembangkeun inti Postgres sareng komunitas.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Tapi di dieu kudu disebutkeun yen Yandex.Cloud boga pamasangan internal database junun. Sarta eta dimimitian lila pisan di Yandex.Mail. Kaahlian nu ayeuna geus ngarah ka junun Postgres ieu akumulasi nalika mail hayang mindahkeun kana Postgres.

Surat ngagaduhan syarat anu sami sareng méga. Éta peryogi anjeun tiasa skala kana kamekaran éksponénsial anu teu kaduga dina titik mana waé dina data anjeun. Sareng suratna parantos ngagaduhan beban sababaraha ratusan juta kotak surat tina sajumlah ageung pangguna anu terus-terusan ngadamel seueur pamundut.

Sareng ieu mangrupikeun tantangan anu serius pikeun tim anu ngembangkeun Postgres. Jaman harita, naon waé masalah anu kami hadapi dilaporkeun ka masarakat. Sareng masalah-masalah ieu dilereskeun, sareng dilereskeun ku masarakat di sababaraha tempat bahkan dina tingkat pangrojong anu mayar pikeun sababaraha pangkalan data sanés sareng langkung saé. Nyaéta, anjeun tiasa ngirim surat ka hacker PgSQL sareng nampi réspon dina 40 menit. Pangrojong anu dibayar dina sababaraha pangkalan data panginten aya anu langkung prioritas tibatan bug anjeun.

Ayeuna pamasangan internal Postgres mangrupikeun sababaraha petabytes data. Ieu sababaraha jutaan requests per detik. Ieu rébuan klaster. Skala ageung pisan.

Tapi aya nuansa. Ieu hirup teu on drive jaringan fancy, tapi dina hardware cukup basajan. Sareng aya lingkungan uji khusus pikeun hal-hal anyar anu pikaresepeun.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Sareng dina waktos anu tangtu dina lingkungan uji kami nampi pesen anu nunjukkeun yén invarian internal tina indéks database dilanggar.

Invarian mangrupikeun sababaraha jinis hubungan anu kami ngarep-arep bakal tahan.

Kaayaan anu kritis pisan pikeun urang. Ieu nunjukkeun yén sababaraha data mungkin geus leungit. Jeung leungitna data mangrupa hal downright catastrophic.

Gagasan umum anu urang tuturkeun dina pangkalan data anu diurus nyaéta sanajan ku usaha, bakal sesah kaleungitan data. Sanaos anjeun ngahaja ngahapus aranjeunna, anjeun tetep kedah teu malire henteuna pikeun waktos anu lami. Kaamanan data mangrupikeun agama anu urang turutan kalayan rajin.

Sareng di dieu aya kaayaan anu nunjukkeun yén meureun aya kaayaan anu urang henteu siap. Sareng urang mimiti nyiapkeun kaayaan ieu.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://commitfest.postgresql.org/23/2171/

Hal kahiji anu urang lakukeun nyaéta ngubur log tina rébuan klaster ieu. Kami mendakan mana tina klaster anu aya dina disk sareng firmware bermasalah anu kaleungitan apdet halaman data. Ditandaan sadaya kode data Postgres. Sareng kami nandaan pesen anu nunjukkeun palanggaran invarian internal kalayan kode anu dirancang pikeun ngadeteksi korupsi data.

Patch ieu sacara praktis ditampi ku masarakat tanpa seueur diskusi, sabab dina unggal kasus khusus écés yén aya kajadian anu goréng sareng kedah dilaporkeun ka log.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Saatos ieu, kami dugi ka titik yén kami parantos ngawaskeun yén nyeken log. Sareng upami aya pesen anu curiga, anjeunna ngahudangkeun patugas tugas, sareng patugas tugas ngalereskeunana.

Tapi! Nyeken log nyaéta operasi murah dina hiji klaster sarta catastrophically mahal pikeun sarébu klaster.

Urang nulis extension disebut Logerrors. Éta nyiptakeun tempoan database dimana anjeun tiasa murah sareng gancang milih statistik ngeunaan kasalahan anu kapungkur. Sareng upami urang kedah hudang perwira tugas, maka urang bakal terang ngeunaan ieu tanpa nyeken file gigabyte, tapi ku ékstrak sababaraha bait tina tabel hash.

extension ieu geus diadopsi, contona, dina gudang pikeun CentOS. Upami anjeun hoyong nganggo éta, anjeun tiasa pasang nyalira. Tangtu éta open source.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[email dijaga]

Tapi éta henteu sadayana. Urang mimitian nganggo Amcheck, ekstensi anu diwangun ku komunitas, pikeun mendakan palanggaran invarian dina indéks.

Sarta kami manggihan yén lamun beroperasi dina skala, aya bug. Urang mimitian ngalereskeun aranjeunna. Koréksi kami parantos ditampi.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[email dijaga]

Kami mendakan yén ekstensi ieu henteu tiasa nganalisis indéks GiST & GIT. Kami ngajantenkeun aranjeunna ngadukung. Tapi dukungan ieu masih dibahas ku masarakat, sabab ieu mangrupikeun fungsionalitas anu kawilang énggal sareng seueur detil di dinya.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://commitfest.postgresql.org/29/2667/

Sareng urang ogé mendakan yén nalika mariksa indéks pikeun pelanggaran dina pamimpin réplikasi, dina master, sadayana tiasa dianggo, tapi dina réplika, dina pengikut, milarian korupsi henteu efektif. Henteu sakabéh invarian dipariksa. Sareng hiji invarian ngaganggu urang pisan. Sareng urang nyéépkeun sataun satengah pikeun komunikasi sareng masarakat pikeun ngaktifkeun cek ieu dina réplika.

Urang nulis kode nu kudu nuturkeun sagala bisa ... protokol. Urang bahas patch ieu rada sababaraha waktos sareng Peter Gaghan ti Crunchy Data. Anjeunna kedah rada ngarobih B-tangkal anu aya di Postgres supados nampi patch ieu. Anjeunna ditarima. Sareng ayeuna mariksa indéks dina réplika ogé parantos cekap pikeun ngadeteksi palanggaran anu kami hadapi. Nyaéta, ieu mangrupikeun palanggaran anu tiasa disababkeun ku kasalahan dina firmware disk, bug dina Postgres, bug dina kernel Linux, sareng masalah hardware. Daptar cukup éksténsif ngeunaan sumber masalah anu kami nyiapkeun.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/38AF687F-8F6B-48B4-AB9E-A60CFD6CC261%40enterprisedb.com#0e86a12c01d967bac04a9bf83cd337cb

Tapi salian indéks, aya bagian sapertos numpuk, nyaéta tempat dimana data disimpen. Sareng henteu seueur invarian anu tiasa dipariksa.

Simkuring gaduh extension disebut Heapcheck. Urang mimitian ngembangkeun éta. Sareng paralel, babarengan sareng kami, perusahaan EnterpriseDB ogé mimiti nyerat modul, anu aranjeunna disebut Heapcheck dina cara anu sami. Ngan urang disebut PgHeapcheck, sarta aranjeunna ngan disebut Heapcheck. Aranjeunna mibanda eta kalawan fungsi sarupa, signature rada béda, tapi kalawan gagasan anu sarua. Aranjeunna ngalaksanakeun éta sakedik langkung saé di sababaraha tempat. Sareng aranjeunna dipasang dina open source sateuacanna.

Sareng ayeuna urang ngembangkeun ékspansina, sabab éta sanés ékspansi aranjeunna, tapi ékspansi masarakat. Sareng ka hareup, ieu mangrupikeun bagian tina kernel anu bakal disayogikeun ka sadayana supados aranjeunna terang sateuacanna ngeunaan masalah anu bakal datang.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/fe9b3722df94f7bdb08768f50ee8fe59%40postgrespro.ru

Di sababaraha tempat, urang malah dugi ka kacindekan yén urang gaduh positip palsu dina sistem ngawaskeun urang. Contona, sistem 1C. Lamun maké database a, Postgres kadang nulis data kana eta nu bisa maca, tapi pg_dump teu bisa maca.

Kaayaan ieu katingali sapertos korupsi pikeun sistem deteksi masalah urang. Patugas dihudangkeun. Patugas patugas ningali naon anu lumangsung. Saatos sababaraha waktos, klien sumping sareng nyarios yén kuring ngagaduhan masalah. Patugas ngajelaskeun naon masalahna. Tapi masalahna aya dina inti Postgres.

Kuring manggihan sawala ngeunaan fitur ieu. Sareng anjeunna nyerat yén urang mendakan fitur ieu sareng éta henteu pikaresepeun, hiji jalma hudang wengi supados terang naon éta.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/fe9b3722df94f7bdb08768f50ee8fe59%40postgrespro.ru

Komunitas ngawaler, "Oh, urang leres-leres kedah ngalereskeunana."

Kuring boga analogi basajan. Upami anjeun leumpang dina sapatu anu ngagaduhan sisikian keusik, teras, prinsipna, anjeun tiasa ngaléngkah - henteu aya masalah. Upami anjeun ngajual sapatu ka rébuan jalma, teras hayu urang ngadamel sapatu tanpa pasir pisan. Sareng upami salah sahiji pangguna sapatu anjeun badé ngajalankeun marathon, maka anjeun badé ngadamel sapatu anu saé, teras skalakeun ka sadaya pangguna anjeun. Sareng pangguna anu teu kaduga sapertos kitu sok aya dina lingkungan awan. Aya salawasna pamaké anu mangpaatkeun klaster dina sababaraha cara aslina. Anjeun kudu salawasna nyiapkeun ieu.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Naon anu urang diajar di dieu? Urang diajar hiji hal basajan: hal pangpentingna nyaéta pikeun ngajelaskeun ka masarakat yen aya masalah. Lamun masarakat geus ngakuan masalah, mangka kompetisi alam timbul pikeun ngajawab masalah. Kusabab sarerea hayang ngajawab masalah penting. Sadaya padagang, sadaya peretas ngartos yén aranjeunna nyalira tiasa ngaléngkah rake ieu, janten aranjeunna hoyong ngaleungitkeunana.

Upami Anjeun keur dipake dina masalah, tapi bothers euweuh tapi anjeun, tapi anjeun dipake dina eta sacara sistematis sarta pamustunganana dianggap masalah, lajeng pamundut tarikan anjeun pasti bakal ditarima. Patch anjeun bakal ditampi, perbaikan anjeun atanapi bahkan pamundut pikeun perbaikan bakal diulas ku masarakat. Dina ahir poé, urang nyieun database hadé pikeun silih.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Pangkalan data anu pikaresepeun nyaéta Greenplum. Éta mangrupikeun pangkalan data paralel pisan dumasar kana basis kode Postgres, anu kuring wawuh pisan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://greenplum.org/greenplum-database-tables-compression/

Sareng Greenplum ngagaduhan fungsionalitas anu pikaresepeun - nambihan tabel anu dioptimalkeun. Ieu mangrupikeun tabel anu anjeun tiasa nambihan gancang. Éta tiasa boh kolom atanapi baris.

Tapi teu aya clustering, i.e. teu aya pungsionalitas dimana anjeun tiasa ngatur data anu aya dina tabél saluyu sareng urutan anu aya dina salah sahiji indéks.

Lalaki tina taksi sumping ka kuring sareng nyarios: "Andrey, anjeun terang Postgres. Sarta di dieu éta ampir sarua. Pindah ka 20 menit. Anjeun nyandak éta sareng laksanakeun. ” Teu sangka enya, abdi terang Postgres, ngaganti pikeun 20 menit - Abdi peryogi ngalakukeun ieu.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/commit/179feb77a034c2547021d675082aae0911be40f7

Tapi henteu, éta sanés 20 menit, kuring nyerat éta salami sababaraha bulan. Dina konferensi PgConf.Russia, kuring ngadeukeutan Heikki Linakangas ti Pivotal sareng naros: "Naha aya masalah sareng ieu? Naha henteu aya klaster tabel anu dioptimalkeun? Anjeunna nyarios: "Anjeun nyandak data. Anjeun nyortir, anjeun nyusun ulang. Éta ngan ukur padamelan." Kuring: "Oh, enya, anjeun ngan kedah nyandak sareng ngalakukeunana." Anjeunna nyarios: "Leres, urang peryogi tangan gratis pikeun ngalakukeun ieu." Kuring ngira yén kuring pasti kedah ngalakukeun ieu.

Jeung sababaraha bulan ka hareup kuring dikintunkeun pamundut tarikan nu dilaksanakeun fungsionalitas ieu. Paménta tarik ieu diulas ku Pivotal sareng komunitas. Tangtu, aya bug.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/issues/10150

Tapi anu paling pikaresepeun nyaéta nalika pamundut tarikan ieu dihijikeun, bug kapanggih dina Greenplum sorangan. Kami geus manggihan yén tabel tumpukan kadang megatkeun transactionality nalika clustered. Sareng ieu mangrupikeun hal anu kedah dilereskeun. Sareng anjeunna aya di tempat anu ku kuring dirampa. Sareng réaksi alam kuring nyaéta - oke, hayu atuh ngalakukeun ieu ogé.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/pull/10290

Kuring ngalereskeun bug ieu. Ngirim pamundut tarik ka fixers. Anjeunna tiwas.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb-postgres-merge/pull/53

Saatos éta tétéla yén fungsionalitas ieu kedah didapet dina versi Greenplum pikeun PostgreSQL 12. Nyaéta, petualangan 20-menit diteruskeun kalayan petualangan anyar anu pikaresepeun. Éta pikaresepeun pikeun nyabak pamekaran ayeuna, dimana komunitas motong fitur énggal sareng anu paling penting. Geus beku.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/pull/10565

Tapi teu mungkas didinya. Saatos sadayana, tétéla urang kedah nyerat dokuméntasi pikeun sadayana ieu.

Kuring mimiti nulis dokuméntasi. Kabeneran, dokuméntar ti Pivotal sumping. Inggris nyaéta basa asli maranéhanana. Aranjeunna mantuan kuring jeung dokuméntasi. Kanyataanna, maranéhna sorangan rewrote naon kuring diajukeun kana Inggris nyata.

Sareng di dieu, sigana, petualangan parantos réngsé. Sareng anjeun terang naon anu kajantenan harita? Lalaki tina taksi sumping ka kuring sareng nyarios: "Masih aya dua petualangan, masing-masing salami 10 menit." Sarta naon anu kudu kuring ngabejaan aranjeunna? Cenah mah ayeuna kuring gé méré laporan dina skala, mangka urang bakal nempo adventures Anjeun, sabab ieu mangrupa pakasaban metot.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Naon anu urang diajar tina kasus ieu? Kusabab gawé bareng open source sok gawé bareng jalma husus, éta salawasna gawé bareng masarakat. Kusabab dina unggal tahapan kuring damel sareng sababaraha pamekar, sababaraha panguji, sababaraha peretas, sababaraha dokumenter, sababaraha arsiték. Abdi henteu damel sareng Greenplum, kuring damel sareng jalma-jalma di sekitar Greenplum.

Tapi! Aya titik penting séjén - éta ngan gawé. Maksudna, anjeun datang, nginum kopi, nulis kode. Sagala jinis invarian basajan tiasa dianggo. Ngalakukeunana sacara normal - éta bakal saé! Sareng éta mangrupikeun padamelan anu pikaresepeun. Aya pamundut pikeun karya ieu ti klien Yandex.Cloud, pamaké klaster urang duanana di jero Yandex jeung di luar. Sareng kuring nyangka yén jumlah proyék anu urang ilubiung bakal ningkat sareng jero keterlibatan urang ogé bakal ningkat.

Éta hungkul. Hayu urang ngaléngkah ka patarosan.

Naon jeung naha urang ngalakukeun dina database Open Source. Andrey Borodin (Yandex.Cloud)

Sesi patarosan

Halo! Simkuring gaduh sesi tanya jawab sejen. Sarta di studio Andrei Borodin. Ieu mangrupikeun jalma anu nembé nyarioskeun ka anjeun ngeunaan kontribusi Yandex.Cloud sareng Yandex ka open source. Laporan kami ayeuna henteu sadayana ngeunaan Awan, tapi dina waktos anu sami kami dumasar kana téknologi sapertos kitu. Tanpa naon anu anjeun lakukeun di jero Yandex, moal aya jasa dina Yandex.Cloud, janten hatur nuhun ti kuring pribadi. Sareng patarosan anu munggaran tina siaran: "Naon masing-masing proyék anu anjeun sebutkeun ditulis?"

Sistem cadangan dina WAL-G ditulis dina Go. Ieu mangrupikeun salah sahiji proyék anu langkung énggal anu kami damel. Anjeunna sacara harfiah ngan 3 taun. Sareng database sering ngeunaan reliabilitas. Ieu ngandung harti yén database anu cukup heubeul jeung biasana ditulis dina C. proyék Postgres dimimitian ngeunaan 30 sababaraha taun ka pengker. Lajeng C89 éta pilihan katuhu. Sareng Postgres ditulis dina éta. Database langkung modern sapertos ClickHouse biasana ditulis dina C ++. Sadaya pamekaran sistem dumasar kana C sareng C ++.

Patarosan ti manajer kauangan urang, anu tanggung jawab biaya di Cloud: "Naha Cloud ngaluarkeun artos pikeun ngadukung open source?"

Aya jawaban saderhana pikeun manajer kauangan di dieu. Kami ngalakukeun ieu pikeun ngajantenkeun jasa kami langkung saé. Dina cara naon urang bisa ngalakukeun hadé? Urang tiasa ngalakukeun hal-hal anu langkung éfisién, langkung gancang, sareng ngajantenkeun hal-hal anu langkung skalabel. Tapi pikeun urang, carita ieu utamana ngeunaan reliabilitas. Contona, dina sistem cadangan urang marios 100% tina patch nu dilarapkeun ka eta. Urang terang naon kodeu. Sarta kami leuwih nyaman rolling kaluar versi anyar pikeun produksi. Hartina, mimitina, éta ngeunaan kapercayaan, ngeunaan kesiapan pikeun pangwangunan sareng ngeunaan reliabilitas

Patarosan sejen: "Naha sarat pamaké éksternal anu cicing di Yandex.Cloud béda ti pamaké internal anu cicing di internal Cloud?"

Propil beban, tangtosna, béda. Tapi tina sudut pandang departemen kuring, sadaya kasus khusus sareng pikaresepeun didamel dina beban anu henteu standar. Pamekar sareng imajinasi, pamekar anu ngalakukeun anu teu kaduga, sigana tiasa dipendakan sacara internal sareng eksternal. Dina hal ieu, urang sadayana kirang langkung sami. Sareng, sigana, hiji-hijina fitur anu penting dina operasi pangkalan data Yandex nyaéta yén di jero Yandex kami gaduh pangajaran. Dina sababaraha waktos, sababaraha zona kasadiaan lengkep janten kalangkang, sareng sadaya jasa Yandex kedah kumaha waé terus fungsina sanaos ieu. Ieu béda leutik. Tapi nyiptakeun seueur pamekaran panalungtikan dina antarmuka pangkalan data sareng tumpukan jaringan. Upami teu kitu, pamasangan éksternal sareng internal ngahasilkeun pamundut anu sami pikeun fitur sareng pamundut anu sami pikeun ningkatkeun reliabilitas sareng kinerja.

Patarosan salajengna: "Kumaha perasaan anjeun pribadi ngeunaan kanyataan yén seueur anu anjeun lakukeun dianggo ku Awan sanés?" Kami moal ngaranan anu khusus, tapi seueur proyék anu dilakukeun dina Yandex.Cloud dianggo dina awan jalma sanés.

Ieu keren. Kahiji, éta tanda yén urang geus dipigawé hal katuhu. Sarta eta scratches ego. Sareng kami langkung yakin yén kami nyandak kaputusan anu leres. Di sisi anu sanés, ieu mangrupikeun harepan yén ka hareupna ieu bakal mawa kami ideu anyar, paménta anyar ti pangguna pihak katilu. Kaseueuran masalah dina GitHub didamel ku pangurus sistem individu, DBA individu, arsiték individu, insinyur individu, tapi sakapeung jalma anu gaduh pangalaman sistematis datang sareng nyarios yén dina 30% kasus-kasus anu tangtu urang gaduh masalah ieu sareng hayu urang pikirkeun kumaha carana ngabéréskeunana. Ieu anu paling kami ngarepkeun. Kami ngarepkeun ngabagi pangalaman sareng platform awan anu sanés.

Anjeun nyarios pisan ngeunaan marathon. Kuring terang yén anjeun ngajalankeun Marathon di Moskow. Salaku hasilna? Overtook lalaki ti PostgreSQL?

Henteu, Oleg Bartunov lumpat gancang pisan. Anjeunna réngsé sajam payuneun kuring. Gemblengna, kuring bagja ku sabaraha jauh kuring. Pikeun kuring, ngan finish éta hiji prestasi. Gemblengna, éta héran yén aya seueur pelari di komunitas postgres. Sigana mah aya sababaraha jenis hubungan antara olahraga aérobik jeung kahayang pikeun sistem programming.

Naha anjeun nyarios teu aya pelari di ClickHouse?

Kuring nyaho pasti yen aranjeunna aya. ClickHouse ogé database a. Ku jalan kitu, Oleg ayeuna nyerat ka kuring: "Naha urang badé ngajalankeun laporan?" Ieu mangrupakeun ide nu sae.

Patarosan sanés tina siaran ti Nikita: "Naha anjeun ngalereskeun bug di Greenplum nyalira sareng henteu masihan ka juniors?" Leres, éta henteu écés pisan naon bug na sareng jasa mana, tapi sigana hartosna anu anjeun nyarioskeun.

Sumuhun, prinsipna mah, éta bisa geus dibikeun ka batur. Ieu ngan kode nu kuring ngan robah. Sareng éta lumrah pikeun terus ngalakukeun éta langsung. Sacara prinsip, ideu ngabagi kaahlian sareng tim mangrupikeun ide anu saé. Kami pasti bakal ngabagi tugas Greenplum diantara sadaya anggota divisi kami.

Kusabab urang ngobrol ngeunaan juniors, ieu patarosan. Jalma mutuskeun pikeun nyieun komitmen munggaran di Postgres. Naon anu anjeunna kedah laksanakeun pikeun ngadamel komitmen munggaran?

Ieu patarosan metot: "Dimana ngamimitian?" Biasana rada hese pikeun ngamimitian ku hiji hal dina kernel. Dina Postgres, contona, aya daptar tugas. Tapi dina kanyataanana, ieu lambar naon maranéhna nyoba ngalakukeun, tapi teu hasil. Ieu hal kompléks. Sareng biasana anjeun tiasa mendakan sababaraha utilitas dina ékosistem, sababaraha ekstensi anu tiasa ningkat, anu kirang narik perhatian ti pamekar kernel. Sareng, sasuai, aya langkung seueur titik pikeun kamekaran di dinya. Dina program Google Summer of code, unggal taun komunitas postgres ngirimkeun seueur topik anu béda anu tiasa dijawab. Taun ieu kami ngagaduhan, sigana, tilu murid. Hiji malah nulis dina WAL-G dina jejer anu penting pikeun Yandex. Di Greenplum, sadayana langkung saderhana tibatan di komunitas Postgres, sabab peretas Greenplum ngarawat pamenta tarikan kalayan saé sareng mimitian marios langsung. Ngirim patch ka Postgres nyaéta sababaraha bulan, tapi Greenplum bakal sumping dina sadinten sareng ningali naon anu anjeun lakukeun. Hal anu sanés nyaéta Greenplum kedah ngabéréskeun masalah ayeuna. Greenplum henteu seueur dianggo, janten mendakan masalah anjeun rada sesah. Sareng mimitina, urang kedah ngabéréskeun masalah, tangtosna.

sumber: www.habr.com