Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Yandex-ek datu-base hauei egindako ekarpena aztertuko da.

  • clickhouse
  • Odyssey
  • Denbora-puntu batera berreskuratzea (WAL-G)
  • PostgreSQL (logerrors, Amcheck, heapcheck barne)
  • Aran berdea

Video:

Kaixo Mundua! Nire izena Andrey Borodin da. Eta Yandex.Cloud-en egiten dudana da datu-base erlazional irekiak garatzea Yandex.Cloud eta Yandex.Cloud bezeroen interesen arabera.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Hitzaldi honetan, datu-base irekiek eskalan dituzten erronkei buruz hitz egingo dugu. Zergatik da garrantzitsua? Arazo txiki eta txikiak direlako, eltxoak bezala, gero elefante bihurtzen direnak. Handi egiten dira kluster asko dituzunean.

Baina hori ez da gauza nagusia. Gauza sinestezinak gertatzen dira. Milioi bat kasutan gertatzen diren gauzak. Eta hodei-ingurunean, horretarako prestatuta egon behar duzu, gauza sinestezina oso litekeena da zerbait eskalan dagoenean.

Baina! Zein da datu-base irekien abantaila? Kontua da edozein arazori aurre egiteko aukera teorikoa duzula. Iturburu kodea duzu, programazio ezagutzak dituzu. Konbinatzen dugu eta funtzionatzen du.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zer ikuspegi daude kode irekiko softwarea lantzeko?

  • Planteamendurik errazena softwarea erabiltzea da. Protokoloak erabiltzen badituzu, estandarrak erabiltzen badituzu, formatuak erabiltzen badituzu, kode irekiko softwarean kontsultak idazten badituzu, dagoeneko onartzen duzu.
  • Bere ekosistema handitzen ari zara. Akatsen bat goiz detektatzeko probabilitatea handiagoa egiten duzu. Sistema honen fidagarritasuna areagotzen duzu. Garatzaileen erabilgarritasuna areagotzen duzu merkatuan. Software hau hobetzen duzu. Dagoeneko kolaboratzailea zara estiloa lortu eta han zerbait moldatzen baduzu.
  • Beste ikuspegi ulergarri bat kode irekiko softwarea babestea da. Adibidez, Google Summer of Code programa ezaguna, Google-k mundu osoko ikasle kopuru handi bati diru ulergarria ordaintzen dionean, lizentzia-baldintza batzuk betetzen dituzten software irekiko proiektuak gara ditzaten.
  • Ikuspegi oso interesgarria da softwareari eboluzionatzea ahalbidetzen duelako, komunitatetik fokua aldendu gabe. Google-k, erraldoi teknologiko gisa, ez du esaten funtzio hau nahi dugunik, akats hau konpondu nahi dugu eta hor sakondu behar dugu. Google-k dio: "Egizu egiten duzuna. Jarraitu lanean aritu zaren moduan eta dena ondo egongo daΒ».
  • Kode irekian parte hartzeko hurrengo ikuspegia parte hartzea da. Kode irekiko softwarean arazo bat duzunean eta garatzaileak daudenean, zure garatzaileak arazoak konpontzen hasten dira. Zure azpiegitura eraginkorragoa egiten hasten dira, zure programak azkarragoak eta fidagarriagoak izaten.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Kode irekiko softwarearen arloan Yandex proiekturik ospetsuenetako bat ClickHouse da. Yandex.Metricak dituen erronkei erantzuteko sortu den datu-base bat da.

Eta datu-base gisa, kode irekian egin zen ekosistema bat sortzeko eta beste garatzaile batzuekin batera garatzeko (ez bakarrik Yandex-en). Eta orain proiektu handia da, eta enpresa ezberdin askok parte hartzen dute.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Yandex.Cloud-en, ClickHouse sortu dugu Yandex Object Storage-ren gainean, hau da, hodeiko biltegian.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zergatik da garrantzitsua hodeian? Edozein datu-basek triangelu honetan, piramide honetan, memoria moten hierarkia honetan funtzionatzen duelako. Erregistro azkarrak baina txikiak eta SSD handiak baina motelak, disko gogorrak eta beste bloke-gailu batzuk dituzu. Eta piramidearen goialdean eraginkorra bazara, datu-base azkarra duzu. Piramide honen behealdean eraginkorra bazara, orduan datu-base eskalatua duzu. Eta zentzu horretan, behetik beste geruza bat gehitzea datu-basearen eskalagarritasuna areagotzeko ikuspegi logikoa da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Nola egin liteke? Txosten honetako puntu garrantzitsu bat da.

  • ClickHouse inplementatu genezake MDSren bidez. MDS Yandex-en barneko hodeiko biltegiratze interfazea da. S3 protokolo arrunta baino konplexuagoa da, baina egokiagoa da bloke gailu baterako. Hobe da datuak grabatzeko. Programazio gehiago eskatzen du. Programatzaileek programatuko dute, ona da, interesgarria da.
  • S3 ohikoagoa den ikuspegi bat da, interfazea errazagoa egiten duena, lan-karga mota batzuetarako egokitzapen txikiagoaren kostuarekin.

Jakina, ClickHouse ekosistema osoari funtzionalitateak eskaini eta Yandex.Cloud-en barruan behar den zeregina egin nahian, ClickHouse komunitate osoak onura ateratzen duela ziurtatzea erabaki dugu. ClickHouse S3 baino gehiago inplementatu dugu, ez ClickHouse MDS bidez. Eta hau lan handia da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

erreferentziak:

https://github.com/ClickHouse/ClickHouse/pull/7946 "Fitxategi-sistemaren abstrakzio-geruza"
https://github.com/ClickHouse/ClickHouse/pull/8011 "AWS SDK S3 integrazioa"
https://github.com/ClickHouse/ClickHouse/pull/8649 "IDisk interafce-ren oinarrizko ezarpena S3rako"
https://github.com/ClickHouse/ClickHouse/pull/8356 "Erregistroak biltegiratzeko motorren integrazioa IDisk interfazearekin"
https://github.com/ClickHouse/ClickHouse/pull/8862 "S3 eta SeekableReadBuffer-en erregistro-motorraren laguntza"
https://github.com/ClickHouse/ClickHouse/pull/9128 "Storage Stripe Log S3 laguntza"
https://github.com/ClickHouse/ClickHouse/pull/9415 "Storage MergeTree-ren hasierako laguntza S3rako"
https://github.com/ClickHouse/ClickHouse/pull/9646 "MergeTree-k S3rako laguntza osoa"
https://github.com/ClickHouse/ClickHouse/pull/10126 "Onartu ReplicatedMergeTree S3 baino gehiago"
https://github.com/ClickHouse/ClickHouse/pull/11134 "Gehitu kredentzial lehenetsiak eta goiburu pertsonalizatuak s3 biltegiratzeko"
https://github.com/ClickHouse/ClickHouse/pull/10576 "S3 proxy konfigurazio dinamikoarekin"
https://github.com/ClickHouse/ClickHouse/pull/10744 "S3 proxy ebazlearekin"

ClickHouse-n fitxategi sistema birtual bat ezartzeko tira-eskaera zerrenda bat da. Hau tira eskaera kopuru handia da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

erreferentziak:

https://github.com/ClickHouse/ClickHouse/pull/9760 "DiskS3-k esteka gogorrak inplementazio optimoa du"
https://github.com/ClickHouse/ClickHouse/pull/11522 "S3 HTTP bezeroa - Saihestu erantzun-jarioa memorian kopiatzea"
https://github.com/ClickHouse/ClickHouse/pull/11561 "Saihestu erantzun-korronte osoa memorian kopiatzea S3 HTTP-n
bezeroa"
https://github.com/ClickHouse/ClickHouse/pull/13076 "S3 diskorako fitxategiak markatzeko eta indexatzeko gaitasuna"
https://github.com/ClickHouse/ClickHouse/pull/13459 "Mugitu piezak DiskLocaletik DiskS3ra paraleloki"

Baina lana ez zen hor amaitu. Eginbidea egin ondoren, lan gehiago behar izan zen funtzionalitate hori optimizatzeko.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

erreferentziak:

https://github.com/ClickHouse/ClickHouse/pull/12638 "Gehitu SelectedRows eta SelectedBytes gertaerak"
https://github.com/ClickHouse/ClickHouse/pull/12464 "Gehitu profil-gertaerak S3 eskaeratik system.events-era"
https://github.com/ClickHouse/ClickHouse/pull/13028 "Gehitu QueryTimeMicroseconds, SelectQueryTimeMicroseconds eta InsertQueryTimeMicroseconds"

Eta orduan beharrezkoa zen diagnostikatu egin, monitorizazioa ezarri eta kudeatu.

Eta hori guztia egin zen komunitate osoak, ClickHouse ekosistema osoak, lan honen emaitza jaso zezan.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Goazen transakzio datu-baseetara, OLTP datu-baseetara, pertsonalki hurbilago daudenak.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Hau kode irekiko DBMS garapen dibisioa da. Mutil hauek kaleko magia egiten ari dira datu-base ireki transakzionalak hobetzeko.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Proiektuetako bat, nola eta zer egiten dugun hitz egin dezakegun adibide bat erabiliz, Connection Pooler da Postgres-en.

Postgres prozesu datu-base bat da. Horrek esan nahi du datu-baseak transakzioak kudeatzen dituzten sare-konexio gutxien izan behar dituela.

Bestalde, hodei-ingurunean, ohiko egoera bat da mila konexio aldi berean kluster batera iristen direnean. Eta konexio-biltzailearen zeregina mila konexio zerbitzari-konexio kopuru txiki batean biltzea da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Esan dezakegu konexio-biltzailea dela byteak berrantolatzen dituen telefono-operatzailea dela datu-basera eraginkortasunez irits daitezen.

Zoritxarrez, ez dago errusierazko hitz onik konexio pooler izendatzeko. Batzuetan multiplexer konexio deitzen zaio. Konexio-biltzaileari nola deitu behar diozun badakizu, esango didazula oso pozik egongo naiz errusiar hizkuntza tekniko egokia hitz egitea.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/2017/92899

Kudeatutako postgres kluster baterako egokiak ziren konexio-biltzaileak ikertu ditugu. Eta PgBouncer izan zen guretzat aukerarik onena. Baina PgBouncer-ekin hainbat arazo topatu ditugu. Duela urte asko, Volodya Borodinek PgBouncer erabiltzen dugula txostenak eman zituen, dena gustatzen zaigu, baina Γ±abardurak daude, bada lan egiteko.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Eta lan egin genuen. Aurkitu genituen arazoak konpondu genituen, Bouncer-en adabakia jarri genuen eta tira-eskaerak korronte gora bultzatzen saiatu ginen. Baina oinarrizko hari bakarrarekin lan egitea zaila zen.

Adabakitako Bouncers-en kaskadak bildu behar izan genituen. Hari bakarreko Bouncers asko ditugunean, goiko geruzako konexioak Bouncers barruko geruzara transferitzen dira. Gaizki kudeatutako sistema bat da, zaila da eraikitzea eta aurrera eta aurrera eskalatzea.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Odisea deitzen den gure konexio pooler sortu genuela ondorioztatu genuen. Hutsetik idatzi genuen.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

2019an, PgCon konferentzian, biltzaile hau garatzaileen komunitateari aurkeztu nion. Orain 2 izar baino gutxiago ditugu GitHub-en, hau da, proiektua bizirik dago, proiektua ezaguna da.

Eta Yandex.Cloud-en Postgres kluster bat sortzen baduzu, Odyssey integratua duen kluster bat izango da, klusterra atzera edo aurrera eskalatzean birkonfiguratzen dena.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zer ikasi dugu proiektu honetatik? Lehian dagoen proiektu bat martxan jartzea beti da pauso oldarkorra, muturreko neurria da nahikoa azkar konpontzen ez diren arazoak daudela esaten dugunean, komeni zaigun denbora tarteetan konpontzen ez direla. Baina hau neurri eraginkorra da.

PgBouncer azkarrago garatzen hasi zen.

Eta orain beste proiektu batzuk agertu dira. Adibidez, pgagroal, Red Hat-eko garatzaileek garatutakoa. Antzeko helburuak bilatzen dituzte eta antzeko ideiak ezartzen dituzte, baina, noski, beren berezitasunekin, pgagroal garatzaileengandik hurbilago daudenak.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Postgres komunitatearekin lan egiteko beste kasu bat denbora-puntu bat berreskuratzen ari da. Hau hutsegite baten ondoren berreskuratzea da, hau babeskopia batetik berrezartzea da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Babeskopia asko daude eta guztiak desberdinak dira. Ia Postgres saltzaile guztiek dute bere babeskopia irtenbidea.

Backup-sistema guztiak hartzen badituzu, ezaugarri-matrize bat sortu eta txantxetan matrize honetako determinantea kalkulatzen baduzu, zero izango da. Zer esan nahi du honek? Zer gertatzen da segurtasun-kopia fitxategi zehatz bat hartzen baduzu, ezin da beste guztien zatietatik muntatu. Bere inplementazioan, berezia da bere helburuan, berezia da bertan txertatuta dauden ideietan. Eta denak zehatzak dira.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Gai hau lantzen ari ginela, CitusData-k WAL-G proiektua jarri zuen martxan. Hau hodei inguruneari begira egindako babeskopia sistema da. Orain CitusData Microsoft-en parte da dagoeneko. Eta momentu horretan, asko gustatu zitzaizkigun WAL-G-ren hasierako bertsioetan ezarritako ideiak. Eta proiektu honetan laguntzen hasi ginen.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Orain dozenaka garatzaile daude proiektu honetan, baina WAL-G-ren 10 laguntzaile nagusien artean 6 Yandexoid daude. Gure ideia asko ekarri ditugu bertara. Eta, noski, guk geuk inplementatu ditugu, geuk probatu, produkziora zabaldu, guk geuk erabiltzen ditugu, guk geuk asmatzen dugu nora mugitu, WAL-G komunitate handiarekin elkarreraginean.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Eta gure ikuspuntutik, orain segurtasun-kopia sistema hau, gure ahaleginak kontuan hartuta barne, hobetu da hodeiko ingurune baterako. Hau da Postgres hodeian babeskopia egiteko kosturik onena.

Zer esan nahi du? Ideia handi samarra sustatzen ari ginen: babeskopiak segurua izan behar du, funtzionatzeko merkea eta leheneratzeko ahalik eta azkarren.

Zergatik izan behar da merkea funtzionatzea? Ezer apurtzen ez denean, ez zenuke jakin behar babeskopiak dituzunik. Dena ondo funtzionatzen du, CPU ahalik eta gutxien alferrik galtzen duzu, zure disko-baliabideetatik ahalik eta gutxien erabiltzen dituzu eta sarera ahalik eta byte gutxien bidaltzen dituzu zure zerbitzu baliotsuen karga ez oztopatzeko.

Eta dena apurtzen denean, adibidez, administratzaileak datuak bota ditu, zerbait gaizki joan da, eta premiazko iraganera itzuli behar duzu, diru guztiarekin berreskuratzen duzu, zure datuak azkar eta oso-osorik itzuli nahi dituzulako.

Eta ideia sinple hau sustatu genuen. Eta, iruditzen zaigu, gauzatzea lortu dugula.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Baina hori ez da guztia. Gauza txiki bat gehiago nahi genuen. Hainbat datu-base nahi genituen. Gure bezero guztiek ez dute Postgres erabiltzen. Batzuek MySQL, MongoDB erabiltzen dute. Komunitatean, beste garatzaile batzuek FoundationDB onartzen dute. Eta zerrenda hau etengabe zabaltzen ari da.

Komunitateari gustatzen zaio datu-basea hodeian kudeatutako ingurune batean exekutatzen ari den ideia. Eta garatzaileek beren datu-baseak mantentzen dituzte, eta Postgresekin batera babeskopiak modu uniformean egin daitezke gure babeskopia sistemarekin.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zer ikasi dugu istorio honetatik? Gure produktua, garapen dibisio gisa, ez dira kode lerroak, ez dira adierazpenak, ez dira fitxategiak. Gure produktua ez dira tira eskaerak. Hauek dira komunitateari helarazten dizkiogun ideiak. Espezializazio teknologikoa eta teknologiaren mugimendua hodeiko ingurune batera da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Postgres bezalako datu-base bat dago. Postgres nukleoa gustatzen zait gehien. Denbora asko ematen dut Postgres nukleoa komunitatearekin garatzen.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Baina hemen esan behar da Yandex.Cloud-ek kudeatutako datu-baseen barne-instalazioa duela. Eta aspaldi hasi zen Yandex.Mail-en. Orain Postgres kudeatua ekarri duen espezializazioa posta Postgresera eraman nahi zuenean metatu zen.

Mailak hodeiaren oso antzeko baldintzak ditu. Zure datuen edozein puntutan ustekabeko hazkunde esponentziala eskalatu ahal izateko behar zaitu. Eta posta-ek zama handia zuen, etengabe eskaera asko egiten dituzten erabiltzaile kopuru handi baten ehunka milioi postontziekin.

Eta hau nahiko erronka serioa zen Postgres garatzen ari zen taldearentzat. Orduan, aurkitu genituen arazoak komunitateari jakinarazi zizkion. Eta arazo horiek zuzendu egin ziren, eta komunitateak zuzendu zituen leku batzuetan nahiz eta beste datu-base batzuetarako ordaindutako laguntza mailan eta are hobeto. Hau da, gutun bat bidal diezaiokezu PgSQL hackerri eta erantzun bat jaso dezakezu 40 minutuko epean. Datu-base batzuetan ordaindutako laguntzak zure akatsak baino lehentasunezko gauza gehiago daudela pentsa dezake.

Orain Postgres-en barne-instalazioa datu petabyte batzuk dira. Hauek segundoko milioika eskaera dira. Hauek milaka kluster dira. Oso eskala handikoa da.

Baina badago Γ±abardura bat. Ez da sareko unitate dotoreetan bizi, hardware nahiko sinplean baizik. Eta gauza berri interesgarrietarako bereziki proba-ingurune bat dago.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Eta proba-ingurunean une jakin batean datu-baseen indizeen barne aldaezinak urratu zirela adierazten zuen mezu bat jaso genuen.

Aldaezina beti edukitzea espero dugun harreman mota bat da.

Oso egoera kritikoa guretzat. Datu batzuk galdu egin direla adierazten du. Eta datuak galtzea guztiz hondamendia da.

Kudeatutako datu-baseetan jarraitzen dugun ideia orokorra da ahalegina eginda ere zaila izango dela datuak galtzea. Nahita kentzen badituzu ere, denbora luzez haien ausentzia baztertu beharko duzu. Datuen segurtasuna ardura handiz jarraitzen dugun erlijioa da.

Eta hemen egoera bat sortzen da, agian prest gauden egoera bat egon daitekeela iradokitzen duena. Eta egoera honetarako prestatzen hasi ginen.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Egin genuen lehenengo gauza milaka multzo hauetako enborrak lurperatzea izan zen. Datu-orrien eguneraketak galtzen ari ziren firmware arazotsuak dituzten diskoetan kokatuta zeuden klusterrak aurkitu ditugu. Postgres datu-kode guztiak markatu ditu. Eta barne aldaezinen urraketak adierazten dituzten mezu horiek datuen ustelkeria detektatzeko diseinatutako kodearekin markatu ditugu.

Adabaki hau komunitateak eztabaida handirik gabe onartu zuen ia, kasu zehatz bakoitzean nabaria baitzen zerbait txarra gertatu zela eta erregistroan jakinarazi behar zela.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Honen ostean, erregistroak aztertzen dituen monitorizazioa daukagula iritsi ginen. Eta mezu susmagarrien kasuan, betebeharra esnatzen du, eta betebeharra konpontzen du.

Baina! Erregistroak eskaneatzea eragiketa merkea da kluster batean eta hondamendia garestia mila klusterrentzat.

izeneko luzapena idatzi genuen Erregistro akatsak. Datu-basearen ikuspegi bat sortzen du, eta bertan iraganeko erroreei buruzko estatistikak merke eta azkar hauta ditzakezu. Eta betebeharko ofiziala esnatu behar badugu, gigabyte fitxategiak eskaneatu gabe jakingo dugu honi buruz, baina hash taulatik byte batzuk ateraz.

Luzapen hau hartu da, adibidez, for biltegian CentOS. Erabili nahi baduzu, zuk zeuk instala dezakezu. Noski kode irekia da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[posta elektroniko bidez babestua]

Baina hori ez da guztia. Amcheck erabiltzen hasi ginen, komunitateak eraikitako luzapena, indizeetan urraketa aldaezinak aurkitzeko.

Eta jakin dugu eskalan funtzionatzen baduzu, akatsak daudela. Haiek konpontzen hasi ginen. Gure zuzenketak onartu dira.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[posta elektroniko bidez babestua]

Luzapen honek ezin dituela GiST eta GIT indizeak aztertu aurkitu dugu. Guk laguntza eman genien. Baina laguntza hau komunitatean eztabaidatzen ari da oraindik, funtzionalitate nahiko berria delako eta xehetasun asko daudelako.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Eta, gainera, aurkitu dugu erreplikaren lidergoan, maisuan, dena ondo funtzionatzen duela, baina errepliketan, jarraitzailean, ustelkeriaren bilaketa ez dela hain eraginkorra. Aldagabe guztiak ez dira egiaztatzen. Eta aldaezin batek asko gogaitzen gintuen. Eta urte eta erdi eman genuen komunitatearekin komunikatzen, errepliken egiaztapen hau gaitzeko.

Protokolo guztiak jarraitu behar dituen kodea idatzi dugu. Crunchy Data-ko Peter Gaghanekin denbora dezente eztabaidatu genuen adabaki hau. Postgres-en zegoen B zuhaitza apur bat aldatu behar izan zuen adabaki hau onartzeko. Onartua izan zen. Eta orain errepliketako indizeak egiaztatzea ere nahikoa eraginkorra bihurtu da aurkitu ditugun urraketak detektatzeko. Hau da, hauek dira diskoaren firmwareko akatsek, Postgres-eko akatsek, Linux nukleoko akatsek eta hardware-arazoek eragin ditzaketen urraketak. Prestatzen ari ginen arazoen iturrien zerrenda nahiko zabala.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Baina indizeez gain, pila bat bezalako zati bat dago, hau da, datuak gordetzen diren lekua. Eta ez dago aldaezin asko egiaztatu ahal izateko.

Heapcheck izeneko luzapena dugu. Garatzen hasi ginen. Eta paraleloan, gurekin batera, EnterpriseDB konpainia ere modulu bat idazten hasi zen, Heapcheck deitzen zioten modu berean. Guk bakarrik PgHeapcheck deitzen genion, eta Heapcheck deitzen zioten. Antzeko funtzioekin dute, sinadura apur bat ezberdina, baina ideia berdinekin. Leku batzuetan apur bat hobeto inplementatu zituzten. Eta aurretik kode irekian argitaratu zuten.

Eta orain haien hedapena garatzen ari gara, jada ez baita haien hedapena, komunitatearen hedapena baizik. Eta etorkizunean, denei emango zaien nukleoaren zati bat da, etorkizuneko arazoen berri aldez aurretik jakin dezaten.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Zenbait tokitan, gure monitorizazio sistemetan positibo faltsuak ditugula ondorioztatu genuen. Adibidez, 1C sistema. Datu-base bat erabiltzean, Postgres-ek batzuetan irakur ditzakeen datuak idazten ditu, baina pg_dump-ek ezin du irakurri.

Egoera honek ustelkeria zirudien gure arazoak detektatzeko sistemari. Begiraleko ofiziala esnatu zen. Begiraleko ofizialak zer gertatzen ari zen begiratu zuen. Denbora pixka bat igaro ondoren, bezero bat etorri zen eta arazoak nituela esan zuen. Arazoa zein den azaldu zuen arduradunak. Baina arazoa Postgres nukleoan dago.

Ezaugarri honi buruzko eztabaida bat aurkitu dut. Eta ezaugarri honekin topo egin genuela idatzi zuen eta desatsegina zela, pertsona bat gauez esnatu zen zer zen jakiteko.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Komunitateak erantzun zuen: "Oh, benetan konpondu behar dugu".

Analogia sinple bat dut. Hondar ale bat duen oinetako batean ibiltzen bazara, printzipioz, aurrera egin dezakezu - ez dago arazorik. Milaka pertsonari botak saltzen badiezu, egin ditzagun harearik gabeko botak. Eta zure oinetakoen erabiltzaileren batek maratoi bat egingo badu, orduan oso oinetako onak egin nahi dituzu eta, ondoren, zure erabiltzaile guztiei eskalatu. Eta ustekabeko erabiltzaile horiek hodeiko ingurunean daude beti. Beti daude klusterra modu original batean ustiatzen duten erabiltzaileak. Beti prestatu behar duzu horretarako.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zer ikasi dugu hemen? Gauza sinple bat ikasi dugu: garrantzitsuena komunitateari arazo bat dagoela azaltzea da. Komunitateak arazoa aitortu badu, orduan lehia naturala sortzen da arazoa konpontzeko. Denek arazo garrantzitsu bat konpondu nahi dutelako. Saltzaile guztiek, hacker guztiek ulertzen dute beraiek zapal dezaketela rake hau, beraz, ezabatu nahi dituzte.

Arazo batean lanean ari bazara, baina inor ez baduzu molestatzen, baina sistematikoki lan egiten baduzu eta azkenean arazotzat hartzen baduzu, zure tira eskaera onartuko da behin betiko. Zure adabakia onartuko da, zure hobekuntzak edo hobekuntza eskaerak komunitateak berrikusiko ditu. Azkenean, datu-basea hobetzen dugu elkarren artean.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Datu-base interesgarri bat Greenplum da. Oso ondo ezagutzen dudan Postgres kode-basean oinarritutako datu-base oso paraleloa da.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Eta Greenplum-ek funtzionalitate interesgarriak ditu: gehitu taula optimizatuak. Hauek azkar gehi ditzakezun taulak dira. Zutabeak edo errenkadakoak izan daitezke.

Baina ez zegoen clustering, hau da, ez zegoen funtzionalitaterik, non taulan kokatutako datuak indizeetako batean dagoen ordenaren arabera antolatzeko.

Taxiko mutilak etorri zitzaizkidan eta esan zidan: β€œAndrey, ezagutzen duzu Postgres. Eta hemen ia berdina da. Aldatu 20 minutura. Hartu eta eginΒ». Pentsatu nuen baietz, ezagutzen dudala Postgres, 20 minutuz aldatzen - hau egin behar dut.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Baina ez, ez zen 20 minutu izan, hilabeteetan idatzi nuen. PgConf.Russia konferentzian, Pivotaleko Heikki Linakangasengana jo nuen eta galdetu nion: β€œArazorik al dago honekin? Zergatik ez dago eranskin optimizatutako taula multzorik?" Honela dio: β€œZuk hartzen dituzu datuak. Ordenatzen duzu, berrantolatzen duzu. Lan bat besterik ez daΒ». Ni: "A, bai, hartu eta egin besterik ez duzu behar". Berak dio: "Bai, esku libreak behar ditugu hau egiteko". Pentsatu nuen behin betiko hau egin behar nuela.

Eta hilabete batzuk geroago funtzionalitate hau inplementatzen zuen pull request bat aurkeztu nuen. Pivotal-ek komunitatearekin batera aztertu zuen tira-eskaera hau. Jakina, akatsak zeuden.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Baina interesgarriena da tira eskaera hau batu zenean Greenplum-en bertan akatsak aurkitu zirela. Aurkitu dugu pilatutako taulak batzuetan transakzionaltasuna apurtzen dutela multzokatuta daudenean. Eta hori konpondu beharreko gauza da. Eta ukitu berri dudan tokian dago. Eta nire erreakzio naturala izan zen: ados, utz iezadazu hau ere egiten.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Akats hau konpondu dut. Tiraketa eskaera bat bidali die konpontzaileei. Hil zuten.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Horren ostean, funtzionalitate hau PostgreSQL 12rako Greenplum bertsioan lortu behar dela ikusi zen. Hau da, 20 minutuko abenturak abentura interesgarri berriekin jarraitzen du. Interesgarria izan zen egungo garapena ukitzea, non komunitatea ezaugarri berriak eta garrantzitsuenak mozten ari den. Izoztuta dago.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

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

Baina ez zen hor amaitu. Azken finean, hori guztiaren dokumentazioa idatzi behar genuela atera zen.

Dokumentazioa idazten hasi nintzen. Zorionez, Pivotaleko dokumentalistak etorri ziren. Ingelesa da euren jatorrizko hizkuntza. Dokumentazioan lagundu didate. Izan ere, beraiek berridatzi zuten nik proposatutakoa benetako ingelesera.

Eta hemen, dirudienez, abentura amaitu zen. Eta ba al dakizu zer gertatu zen orduan? Taxiko mutilak etorri zitzaizkidan eta esan zuten: "Oraindik bi abentura daude, bakoitza 10 minutukoa". Eta zer esan behar diet? Esan nuen orain erreportaje bat emango dudala eskalan, gero zure abenturak ikusiko ditugula, lan interesgarria delako.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Zer ikasi dugu kasu honetatik? Kode irekiarekin lan egitea beti pertsona zehatz batekin lan egitea delako, beti komunitatearekin lan egitea da. Etapa guztietan garatzaile batzuekin, probatzaile batzuekin, hacker batzuekin, dokumentalista batzuekin, arkitekto batzuekin lan egin nuelako. Ez nuen Greenplum-ekin lan egin, Greenplum inguruko jendearekin lan egin nuen.

Baina! Bada beste puntu garrantzitsu bat - lana besterik ez da. Hau da, etortzen zara, kafea edan, kodea idatzi. Era guztietako aldaezin sinpleek funtzionatzen dute. Egin normalean - ondo egongo da! Eta nahiko lan interesgarria da. Yandex.Cloud bezeroek, Yandex barruko zein kanpoko gure klusterren erabiltzaileek lan hau egiteko eskaera egin dute. Eta uste dut parte hartzen dugun proiektuen kopurua handituko dela eta gure inplikazioaren sakontasuna ere handituko dela.

Hori da dena. Goazen galderetara.

Zer eta zergatik egiten dugu Open Source datu-baseetan. Andrey Borodin (Yandex.Cloud)

Galderak saioa

Kaixo! Beste galdera-erantzun saio bat dugu. Eta Andrei Borodin estudioan. Hau da Yandex.Cloud eta Yandex-ek kode irekiari egindako ekarpena kontatu berri dizun pertsona. Orain gure txostena ez da guztiz Hodeiari buruzkoa, baina, aldi berean, horrelako teknologietan oinarritzen gara. Yandex-en egin zenuena gabe, ez litzateke zerbitzurik egongo Yandex.Cloud-en, beraz, eskerrik asko pertsonalki. Eta emankizuneko lehen galdera: β€œZertan dago idatzita aipatu dituzun proiektuetako bakoitza?”.

WAL-G-n babeskopia-sistema Go-n idatzita dago. Hau da landu dugun proiektu berrienetako bat. Literalki 3 urte besterik ez ditu. Eta datu-base bat fidagarritasunari buruzkoa da askotan. Eta horrek esan nahi du datu-baseak nahiko zaharrak direla eta normalean C-n idatzita daudela. Postgres proiektua duela 30 bat urte hasi zen. Orduan C89 aukera egokia izan zen. Eta Postgres idatzita dago. ClickHouse bezalako datu-base modernoagoak C++-n idatzi ohi dira. Sistemaren garapen guztia C eta C++-en inguruan oinarritzen da.

Gure finantza-kudeatzaileak, Cloud-en gastuen arduraduna denaren galdera bat: "Zergatik gastatzen du Cloud-ek dirua kode irekian laguntzeko?"

Finantza-kudeatzailearentzat erantzun sinple bat dago hemen. Hau egiten dugu gure zerbitzuak hobetzeko. Zein modutan egin dezakegu hobeto? Gauzak eraginkorrago, azkarrago eta eskalagarriagoak egin ditzakegu. Baina guretzat, istorio hau fidagarritasunari buruzkoa da batez ere. Adibidez, babeskopia-sistema batean aplikatzen zaizkion adabakien % 100 berrikusten dugu. Badakigu zein den kodea. Eta erosoago gaude bertsio berriak produkziora zabaltzen. Hau da, lehenik eta behin, konfiantzaz, garapenerako prestutasunaz eta fidagarritasunaz

Beste galdera bat: "Yandex.Cloud-en bizi diren kanpoko erabiltzaileen eskakizunak desberdinak al dira barne Hodeian bizi diren barne erabiltzaileen aldean?"

Karga-profila, noski, ezberdina da. Baina nire sailaren ikuspuntutik, kasu berezi eta interesgarri guztiak estandar ez den karga batean sortzen dira. Irudimena duten garatzaileak, ustekabekoak egiten dituzten garatzaileak, barrutik zein kanpotik aurki daitezke. Alde horretatik, denok gara gutxi gorabehera berdinak. Eta, ziurrenik, Yandex datu-baseen funtzionamenduaren barruan dagoen ezaugarri garrantzitsu bakarra Yandex-en barruan irakaskuntza bat dugula izango da. Noizbait, erabilgarritasun-eremu batzuk erabat itzalean geratzen dira, eta Yandex zerbitzu guztiek nolabait funtzionatzen jarraitu behar dute hala ere. Hau diferentzia txiki bat da. Baina datu-basearen eta sareko pilaren interfazean ikerketa-garapen handia sortzen du. Bestela, kanpoko eta barneko instalazioek ezaugarrien eskaera berdinak eta fidagarritasuna eta errendimendua hobetzeko antzeko eskaerak sortzen dituzte.

Hurrengo galdera: "Zer sentitzen zara pertsonalki egiten duzunaren zati handi bat beste Hodei batzuek erabiltzen dutela?" Ez dugu zehatzik izendatuko, baina Yandex.Cloud-en egin ziren proiektu asko besteen hodeietan erabiltzen dira.

Hau polita da. Lehenik eta behin, zerbait ondo egin dugun seinale da. Eta egoa urratzen du. Eta seguruago gaude erabaki zuzena hartu dugula. Bestalde, hau da etorkizunean ideia berriak ekarriko dizkiguten itxaropena, hirugarren erabiltzaileen eskaera berriak. GitHub-eko arazo gehienak sistema-administratzaile indibidualek, DBA indibidualek, arkitekto indibidualek, ingeniari indibidualek sortzen dituzte, baina batzuetan esperientzia sistematikoa duten pertsonak etortzen dira eta kasu batzuen %30ean arazo hau dugula eta pentsa dezagun nola konpondu. Hau da gehien itxaroten duguna. Espero dugu hodeiko beste plataforma batzuekin esperientziak partekatzea.

Asko hitz egin duzu maratoiaz. Badakit Moskun maratoi bat egin zenuela. Hori dela eta? PostgreSQL-ko mutilak gainditu dituzu?

Ez, Oleg Bartunov oso azkar dabil. Ni baino ordubete lehenago amaitu zuen. Orokorrean, pozik nago noraino iritsi naizenarekin. Niretzat, amaitzea besterik ez zen lorpen bat. Orokorrean, harrigarria da postgres komunitatean hainbeste korrikalari egotea. Kirol aerobikoen eta sistemen programazio nahiaren artean nolabaiteko harremana dagoela iruditzen zait.

ClickHousen lasterkaririk ez dagoela esaten al duzu?

Ziur badakit hor daudela. ClickHouse datu-base bat ere bada. Bide batez, orain Oleg idazten ari zait: "Txostenaren ondoren korrika egitera joango al gara?" Ideia bikaina da hau.

Nikitaren emankizuneko beste galdera bat: "Zergatik konpondu zenuten Greenplum-en akatsa zuk zeuk eta ez zien juniorrei eman?" Egia da, ez dago oso argi zein den akatsa eta zein zerbitzutan, baina ziurrenik hitz egin duzuna esan nahi du.

Bai, printzipioz, norbaiti eman zitekeen. Aldatu berri dudan kodea besterik ez da. Eta naturala zen berehala egiten jarraitzea. Printzipioz, taldearekin esperientzia partekatzeko ideia ona da. Zalantzarik gabe, Greenplum zereginak gure dibisioko kide guztien artean partekatuko ditugu.

Jubenilez ari garenez, hona galdera bat. Pertsonak Postgres-en lehen konpromisoa sortzea erabaki zuen. Zer egin behar du lehen konpromisoa hartzeko?

Galdera interesgarria da: "Non hasi?" Normalean nahiko zaila da nukleoko zerbaitekin hastea. Postgres-en, adibidez, egiteko zerrenda bat dago. Baina, hain zuzen ere, hau egiten saiatu zirenaren fitxa da, baina ez zuten lortu. Gauza konplexuak dira. Eta normalean erabilgarritasun batzuk aurki ditzakezu ekosisteman, hobetu daitezkeen luzapen batzuk, nukleoko garatzaileen arreta gutxiago erakartzen dutenak. Eta, horren arabera, hazkuntzarako puntu gehiago daude hor. Google Summer of code programan, urtero, postgres komunitateak jorratu daitezkeen hainbat gai planteatzen ditu. Aurten, nire ustez, hiru ikasle izan ditugu. Batek WAL-G-n idatzi zuen Yandexentzat garrantzitsuak diren gaiei buruz. Greenplum-en, dena Postgres komunitatean baino sinpleagoa da, Greenplum-eko hacker-ek tira-eskaerak oso ondo tratatzen dituztelako eta berehala hasten direlako berrikusten. Postgres-era adabaki bat bidaltzea hilabeteko kontua da, baina Greenplum egun batean etorriko da eta ikusiko duzu zer egin duzun. Beste gauza bat da Greenplum-ek egungo arazoak konpondu behar dituela. Greenplum ez da oso erabilia, beraz, zure arazoa aurkitzea nahiko zaila da. Eta lehenik eta behin, arazoak konpondu behar ditugu, noski.

Iturria: www.habr.com