Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Yandex's bydrage oan de folgjende databases sil wurde hifke.

  • klikhûs
  • odyssey
  • Herstel nei in punt yn 'e tiid (WAL-G)
  • PostgreSQL (ynklusyf logerrors, Amcheck, heapcheck)
  • Greenplum

Video:

Hallo wrâld! Myn namme is Andrey Borodin. En wat ik doch by Yandex.Cloud is it ûntwikkeljen fan iepen relaasjedatabases yn 'e belangen fan Yandex.Cloud en Yandex.Cloud-kliïnten.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Yn dit petear sille wy prate oer de útdagings foar iepen databases op skaal. Wêrom is it wichtich? Want lytse, lytse problemen dy't, lykas muggen, dan oaljefanten wurde. Se wurde grut as jo in protte klusters hawwe.

Mar dat is net it wichtichste ding. Ongelooflijke dingen barre. Dingen dy't barre yn ien op in miljoen gefallen. En yn in wolkomjouwing moatte jo der op ree wêze, want ûnbidige dingen wurde heul wierskynlik as der wat op skaal bestiet.

Mar! Wat is it foardiel fan iepen databases? It feit is dat jo in teoretyske kâns hawwe om mei elk probleem te gean. Jo hawwe de boarne koade, do hast programmearring kennis. Wy kombinearje it en it wurket.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Hokker oanpak binne d'r by it wurkjen oan iepen boarne software?

  • De meast ienfâldige oanpak is it brûken fan software. As jo ​​protokollen brûke, as jo noarmen brûke, as jo formaten brûke, as jo fragen skriuwe yn iepen boarne software, dan stypje jo it al.
  • Jo meitsje har ekosysteem grutter. Jo meitsje de kâns op betide deteksje fan in brek grutter. Jo fergrutsje de betrouberens fan dit systeem. Jo fergrutsje de beskikberens fan ûntwikkelders op 'e merk. Jo ferbetterje dizze software. Jo binne al in meiwurker as jo gewoan makke hawwe om styl te krijen en dêr wat oan te tinken.
  • In oare begryplike oanpak is sponsorjen fan iepen boarne software. Bygelyks, de bekende Google Summer of Code programma, doe't Google betellet in grut oantal studinten fan oer de hiele wrâld begryplik jild sadat se ûntwikkelje iepen software projekten dy't foldogge oan bepaalde lisinsje easken.
  • Dit is in heul ynteressante oanpak, om't it de software mooglik makket om te evoluearjen sûnder de fokus fuort te ferpleatsen fan 'e mienskip. Google, as technologygigant, seit net dat wy dizze funksje wolle, wy wolle dizze brek reparearje en dit is wêr't wy moatte grave. Google seit: "Doch wat jo dogge. Gean gewoan troch mei wurkjen lykas jo wurke hawwe en alles komt goed. ”
  • De folgjende oanpak foar dielnimmen oan iepen boarne is partisipaasje. As jo ​​​​in probleem hawwe yn iepen boarne software en d'r binne ûntwikkelders, begjinne jo ûntwikkelders de problemen op te lossen. Se begjinne jo ynfrastruktuer effisjinter te meitsjen, jo programma's rapper en betrouberder.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Ien fan 'e meast ferneamde Yandex-projekten op it mêd fan iepen boarne software is ClickHouse. Dit is in databank dy't berne is as in antwurd op 'e útdagings foar Yandex.Metrica.

En as database waard it makke yn iepen boarne om in ekosysteem te meitsjen en it tegearre mei oare ûntwikkelders te ûntwikkeljen (net allinich binnen Yandex). En no is dit in grut projekt wêrby in protte ferskillende bedriuwen belutsen binne.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Yn Yandex.Cloud makken wy ClickHouse boppe op Yandex Object Storage, dus boppe op wolk opslach.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wêrom is dit wichtich yn 'e wolk? Om't elke databank wurket yn dizze trijehoek, yn dizze piramide, yn dizze hiërargy fan ûnthâldtypen. Jo hawwe flugge, mar lytse registers en goedkeape grutte, mar trage SSD's, hurde skiven en guon oare blokapparaten. En as jo effisjint binne oan 'e boppekant fan' e piramide, dan hawwe jo in rappe databank. as jo effisjint binne oan 'e boaiem fan dizze piramide, dan hawwe jo in skalearre databank. En yn dit ferbân is it tafoegjen fan in oare laach fan ûnderen in logyske oanpak foar it fergrutsjen fan de skalberens fan 'e database.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Hoe koe it dien wurde? Dit is in wichtich punt yn dit rapport.

  • Wy kinne ClickHouse implementearje oer MDS. MDS is in ynterne Yandex-wolk-opslach-ynterface. It is komplekser as de mienskiplike S3 protokol, mar it is mear geskikt foar in blok apparaat. It is better foar it opnimmen fan gegevens. It freget mear programmearring. Programmeurs sille programmearje, it is sels goed, it is ynteressant.
  • S3 is in mear gewoane oanpak dy't makket de ynterface ienfâldiger op kosten fan minder oanpassing oan bepaalde soarten fan workloads.

Natuerlik wolle wy funksjonaliteit leverje oan it heule ClickHouse-ekosysteem en de taak dwaan dy't nedich is binnen Yandex.Cloud, hawwe wy besletten om derfoar te soargjen dat de heule ClickHouse-mienskip derfan profitearje soe. Wy ymplementearre ClickHouse oer S3, net ClickHouse oer MDS. En dit is in protte wurk.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Ferwizings:

https://github.com/ClickHouse/ClickHouse/pull/7946 "Bestânsysteemabstraksjelaach"
https://github.com/ClickHouse/ClickHouse/pull/8011 "AWS SDK S3-yntegraasje"
https://github.com/ClickHouse/ClickHouse/pull/8649 "Basis ymplemintaasje fan IDisk ynterface foar S3"
https://github.com/ClickHouse/ClickHouse/pull/8356 "Yntegraasje fan log opslachmotoren mei IDisk-ynterface"
https://github.com/ClickHouse/ClickHouse/pull/8862 "Logmotorstipe foar S3 en SeekableReadBuffer"
https://github.com/ClickHouse/ClickHouse/pull/9128 "Stipe foar Storage Stripe Log S3"
https://github.com/ClickHouse/ClickHouse/pull/9415 "Storage MergeTree initial stipe foar S3"
https://github.com/ClickHouse/ClickHouse/pull/9646 "MergeTree folsleine stipe foar S3"
https://github.com/ClickHouse/ClickHouse/pull/10126 "Stypje ReplicatedMergeTree oer S3"
https://github.com/ClickHouse/ClickHouse/pull/11134 "Standert referinsjes en oanpaste kopteksten tafoegje foar s3-opslach"
https://github.com/ClickHouse/ClickHouse/pull/10576 "S3 mei dynamyske proxy-konfiguraasje"
https://github.com/ClickHouse/ClickHouse/pull/10744 "S3 mei proxy resolver"

Dit is in pull-oanfraachlist foar it ymplementearjen fan in firtuele bestânsysteem yn ClickHouse. Dit is in grut oantal pull-oanfragen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Ferwizings:

https://github.com/ClickHouse/ClickHouse/pull/9760 "DiskS3 hardlinks optimale ymplemintaasje"
https://github.com/ClickHouse/ClickHouse/pull/11522 "S3 HTTP-kliïnt - Foarkom kopiearjen fan antwurdstream yn it ûnthâld"
https://github.com/ClickHouse/ClickHouse/pull/11561 "Ferkom it kopiearjen fan de hiele antwurdstream yn it ûnthâld yn S3 HTTP
kliïnt"
https://github.com/ClickHouse/ClickHouse/pull/13076 "Fermogen om markearje te cache en bestannen foar S3-skiif te yndeksearjen"
https://github.com/ClickHouse/ClickHouse/pull/13459 "Ferpleats dielen parallel fan DiskLocal nei DiskS3"

Mar it wurk einige dêr net. Nei't de funksje makke wie, wie wat mear wurk nedich om dizze funksjonaliteit te optimalisearjen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Ferwizings:

https://github.com/ClickHouse/ClickHouse/pull/12638 "SelectedRows en SelectedBytes-eveneminten tafoegje"
https://github.com/ClickHouse/ClickHouse/pull/12464 "Foegje profilearringseveneminten ta fan S3-fersyk ta system.events"
https://github.com/ClickHouse/ClickHouse/pull/13028 "QueryTimeMicroseconds tafoegje, SelectQueryTimeMicroseconds en InsertQueryTimeMicroseconds"

En dan wie it nedich om it diagnoazeber te meitsjen, tafersjoch op te setten en behearber te meitsjen.

En dit alles waard dien sadat de hiele mienskip, it hiele ClickHouse-ekosysteem, it resultaat fan dit wurk krige.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Litte wy trochgean nei transaksjedatabases, nei OLTP-databases, dy't tichter by my persoanlik binne.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Dit is de iepen boarne DBMS-ûntwikkelingsdivyzje. Dizze jonges dogge strjittemagy om transaksjele iepen databases te ferbetterjen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Ien fan de projekten, mei in foarbyld wêrfan wy prate kinne oer hoe en wat wy dogge, is de Connection Pooler yn Postgres.

Postgres is in prosesdatabank. Dit betsjut dat de databank sa min mooglik netwurkferbiningen moat hawwe dy't transaksjes behannelje.

Oan 'e oare kant, yn in wolkomjouwing, is in typyske situaasje as tûzen ferbiningen tagelyk yn ien kluster komme. En de taak fan de ferbiningpooler is om tûzen ferbiningen yn in lyts oantal serverferbiningen te pakken.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wy kinne sizze dat de ferbiningspooler de telefoanoperator is dy't de bytes opnij regelet sadat se effisjint de databank berikke.

Spitigernôch is der gjin goed Russysk wurd foar ferbining pooler. Soms wurdt it multiplexerferbiningen neamd. As jo ​​​​witte hoe't jo de ferbining pooler neame, fertel my dan wis, ik sil tige bliid wêze om de juste Russyske technyske taal te sprekken.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/2017/92899

Wy ûndersocht ferbining poolers dy't geskikt wiene foar in managed postgres kluster. En PgBouncer wie de bêste kar foar ús. Mar wy tsjinkaam in oantal problemen mei PgBouncer. In protte jierren lyn joech Volodya Borodin rapporten dat wy PgBouncer brûke, wy hâlde fan alles, mar d'r binne nuânses, d'r is wat om oan te wurkjen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

En wy wurken. Wy reparearje de problemen dy't wy tsjinkamen, wy patched Bouncer, en besochten pull-oanfragen streamop te drukken. Mar fûnemintele single-threading wie lestich om mei te wurkjen.

Wy moasten kaskaden sammelje fan patched Bouncers. As wy in protte single-threaded Bouncers hawwe, wurde de ferbiningen op 'e boppeste laach oerbrocht nei de binnenste laach fan Bouncers. Dit is in min beheard systeem dat is lestich te bouwen en skaal hinne en wer.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wy kamen ta de konklúzje dat wy ús eigen ferbiningspooler makke hawwe, dy't Odyssey hjit. Wy hawwe it fanôf it begjin skreaun.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Yn 2019, op 'e PgCon-konferinsje, presinteare ik dizze pooler oan 'e ûntwikkeldersmienskip. No hawwe wy in bytsje minder dan 2 stjerren op GitHub, d.w.s. it projekt libbet, it projekt is populêr.

En as jo in Postgres-kluster yn Yandex.Cloud meitsje, dan sil it in kluster wêze mei ynboude Odyssey, dy't opnij konfigureare wurdt by it skaaljen fan it kluster werom of foarút.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wat hawwe wy leard fan dit projekt? It starten fan in konkurrearjend projekt is altyd in agressive stap, it is in ekstreme maatregel as wy sizze dat d'r problemen binne dy't net fluch genôch wurde oplost, wurde net oplost yn 'e tiidintervallen dy't ús passe. Mar dit is in effektive maatregel.

PgBouncer begon rapper te ûntwikkeljen.

En no binne oare projekten ferskynd. Bygelyks pgagroal, dy't ûntwikkele is troch Red Hat-ûntwikkelders. Se stribjen ferlykbere doelen en útfiere ferlykbere ideeën, mar, fansels, mei har eigen spesifikaasjes, dy't tichter by pgagroal ûntwikkelders.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

In oar gefal fan wurkjen mei de postgres-mienskip is weromsette nei in punt yn 'e tiid. Dit is herstel nei in mislearring, dit is herstel fan in reservekopy.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

D'r binne in protte backups en se binne allegear oars. Hast elke Postgres-ferkeaper hat in eigen backup-oplossing.

As jo ​​nimme alle reservekopy systemen, meitsje in funksje matrix en grapke berekkenje de determinant yn dizze matrix, it sil wêze nul. Wat betsjut dit? Wat as jo in spesifike reservekopybestân nimme, dan kin it net wurde gearstald út stikken fan alle oaren. It is unyk yn syn ymplemintaasje, it is unyk yn syn doel, it is unyk yn 'e ideeën dy't deryn binne ynbêde. En se binne allegear spesifyk.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Wylst wy oan dit probleem wurken, lansearre CitusData it WAL-G-projekt. Dit is in reservekopysysteem dat makke is mei it each op 'e wolkomjouwing. No is CitusData al diel fan Microsoft. En op dat stuit fûnen wy echt de ideeën dy't waarden fêstlein yn 'e earste releases fan WAL-G. En wy begûnen mei te dragen oan dit projekt.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

No binne d'r in protte tsientallen ûntwikkelders yn dit projekt, mar de top 10 bydragen oan WAL-G omfetsje 6 Yandexoids. Wy hawwe in protte fan ús ideeën dêr brocht. En, fansels, wy hawwe se sels ymplementearre, testen se sels, rôle se út yn produksje sels, wy brûke se sels, wy sels útfine wêr't te ferhúzjen neist, wylst ynteraksje mei de grutte WAL-G mienskip.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

En út ús eachpunt, no dit reservekopy systeem, ynklusyf rekken hâldend mei ús ynspannings, is optimaal wurden foar in wolk omjouwing. Dit is de bêste kosten foar in reservekopy fan Postgres yn 'e wolk.

Wat betsjut dat? Wy promovearren in frij grut idee: reservekopy moat feilich wêze, goedkeap om te operearjen en sa rap mooglik te herstellen.

Wêrom soe it goedkeap wêze moatte om te operearjen? As neat is brutsen, moatte jo net witte dat jo backups hawwe. Alles wurket goed, jo fergrieme sa min mooglik CPU, jo brûke sa min mooglik fan jo skiifboarnen, en jo stjoere sa min mooglik bytes nei it netwurk om net te bemuoien mei de lading fan jo weardefolle tsjinsten.

En as alles brekt, bygelyks, de admin liet de gegevens falle, der gie wat mis, en jo moatte driuwend werom nei it ferline, jo herstelle mei al it jild, om't jo jo gegevens fluch en yntakt wolle.

En wy promovearre dit ienfâldige idee. En, it liket ús, hawwe wy it slagge om it út te fieren.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Mar dat is net alles. Wy woenen noch ien lyts ding. Wy woenen in protte ferskillende databases. Net al ús kliïnten brûke Postgres. Guon minsken brûke MySQL, MongoDB. Yn 'e mienskip hawwe oare ûntwikkelders FoundationDB stipe. En dizze list wurdt hieltyd útwreidzjen.

De mienskip hâldt fan it idee dat de database wurdt útfierd yn in beheare omjouwing yn 'e wolk. En ûntwikkelders ûnderhâlde har databases, dy't unifoarm kinne wurde reservekopy makke tegearre mei Postgres mei ús reservekopysysteem.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wat hawwe wy leard fan dit ferhaal? Us produkt, as ûntwikkelingsdivyzje, is gjin rigels fan koade, it binne gjin útspraken, it binne gjin bestannen. Us produkt is gjin pull-oanfragen. Dit binne de ideeën dy't wy oerbringe oan 'e mienskip. Dit is technologyske ekspertize en de beweging fan technology nei in wolkomjouwing.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Der is sa'n databank as Postgres. Ik fyn de Postgres-kearn it meast. Ik besteegje in protte tiid oan it ûntwikkeljen fan de Postgres-kearn mei de mienskip.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Mar hjir moat sein wurde dat Yandex.Cloud in ynterne ynstallaasje hat fan behearde databases. En it begon lang lyn yn Yandex.Mail. De ekspertize dy't no laat hat ta beheard Postgres is opboud doe't de post nei Postgres ferhuze woe.

Mail hat heul ferlykbere easken foar de wolk. It hat jo nedich om op elk punt yn jo gegevens te skaaljen nei unferwachte eksponinsjele groei. En de post hie al in lading mei inkele hûnderten miljoenen postfakken fan in grut oantal brûkers dy't konstant in protte oanfragen meitsje.

En dit wie nochal in serieuze útdaging foar it team dat Postgres ûntwikkele. Doe waarden alle problemen dy't wy tsjinkamen rapportearre oan de mienskip. En dizze problemen waarden korrizjearre, en korrizjearre troch de mienskip op guon plakken sels op it nivo fan betelle stipe foar guon oare databases en noch better. Dat is, jo kinne in brief stjoere nei PgSQL hacker en ûntfange in antwurd binnen 40 minuten. Betelle stipe yn guon databases kin tinke dat d'r dingen mear prioriteit binne dan jo bug.

No is de ynterne ynstallaasje fan Postgres wat petabytes oan gegevens. Dit binne inkele miljoenen oanfragen per sekonde. Dit binne tûzenen klusters. It is tige grutskalich.

Mar der is in nuânse. It libbet net op fancy netwurkdriven, mar op frij ienfâldige hardware. En d'r is in testomjouwing spesifyk foar nijsgjirrige nije dingen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

En op in bepaald momint yn 'e testomjouwing krigen wy in berjocht dat oanjout dat de ynterne invarianten fan' e databankyndeksen waarden skeind.

In invariant is in soarte fan relaasje dy't wy ferwachtsje om altyd te hâlden.

In heul krityske situaasje foar ús. It jout oan dat guon gegevens miskien ferlern gien binne. En gegevensferlies is wat direkt katastrofaal.

It algemiene idee dat wy folgje yn behearde databases is dat sels mei ynspanning it lestich sil wêze om gegevens te ferliezen. Sels as jo se mei opsetsin fuortsmite, moatte jo har ôfwêzigens noch foar in lange perioade negearje. Gegevensfeiligens is in religy dy't wy heul iverich folgje.

En hjir ûntstiet in situaasje dy't suggerearret dat der in situaasje kin wêze dêr't wy miskien net op taret binne. En wy begon te meitsjen foar dizze situaasje.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

It earste wat wy diene wie de logs út dizze tûzenen klusters te begraven. Wy fûnen hokker fan 'e klusters sieten op skiven mei problematyske firmware dy't updates fan gegevenspagina's ferlieze. Markearre alle Postgres-gegevenskoade. En wy markearren dy berjochten dy't oertredings fan ynterne invarianten oanjaan mei koade dy't ûntwurpen is om datakorrupsje te detektearjen.

Dizze patch waard praktysk akseptearre troch de mienskip sûnder folle diskusje, om't yn elk spesifyk gefal dúdlik wie dat der wat slims bard wie en rapportearre wurde moast oan it log.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Hjirnei kamen wy op it punt dat wy tafersjoch hawwe dy't logs scant. En yn gefal fan fertochte berjochten makket er de tsjinstoffisier wekker, en de tsjinstoffisier reparearret it.

Mar! It scannen fan logs is in goedkeape operaasje op ien kluster en katastrofysk djoer foar tûzen klusters.

Wy skreau in útwreiding neamd Logerrors. It makket in werjefte fan 'e databank wêryn jo goedkeap en fluch statistiken kinne selektearje oer ferline flaters. En as wy de tsjinstoffisier wekker moatte, dan sille wy dit witte sûnder gigabyte-bestannen te scannen, mar troch in pear bytes út 'e hash-tabel te ekstrahearjen.

Dizze útwreiding is oannommen, bygelyks, yn de repository foar CentOS. As jo ​​​​it brûke wolle, kinne jo it sels ynstallearje. Fansels is it iepen boarne.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[e-post beskerme]

Mar dat is net alles. Wy begûnen Amcheck te brûken, in troch de mienskip boude útwreiding, om ûnferoarlike oertredings yn yndeksen te finen.

En wy fûnen út dat as jo it op skaal betsjinje, d'r bugs binne. Wy begûnen se te reparearjen. Us korreksjes binne akseptearre.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[e-post beskerme]

Wy ûntdutsen dat dizze tafoeging GiST & GIT-yndeksen net analysearje kin. Wy makken har stipe. Mar dizze stipe wurdt noch besprutsen troch de mienskip, om't dit in relatyf nije funksjonaliteit is en dêr in protte details binne.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

En wy ûntdutsen ek dat by it kontrolearjen fan yndeksen foar oertredings op 'e replikaasjelieder, op' e master, alles goed wurket, mar op 'e replika's, op' e follower, is it sykjen nei korrupsje net sa effektyf. Net alle invarianten wurde kontrolearre. En ien invariant hindere ús tige. En wy hawwe in jier en in heal kommunisearre mei de mienskip om dizze kontrôle op replika's yn te skeakeljen.

Wy skreau koade dy't moatte folgje alle kin ... protokollen. Wy hawwe dizze patch in skoft besprutsen mei Peter Gaghan fan Crunchy Data. Hy moast de besteande B-beam yn Postgres wat oanpasse om dizze patch te akseptearjen. Hy waard akseptearre. En no is it kontrolearjen fan yndeksen op replika's ek effektyf genôch wurden om de oertredings dy't wy tsjinkamen te ûntdekken. Dat is, dit binne de oertredings dy't kinne wurde feroarsake troch flaters yn skiiffirmware, bugs yn Postgres, bugs yn 'e Linux kernel, en hardwareproblemen. In hiel wiidweidige list mei boarnen fan problemen dêr't wy ús foar tariede.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Mar neist yndeksen is d'r sa'n diel as heap, dus it plak dêr't de gegevens opslein wurde. En d'r binne net folle invarianten dy't koe wurde kontrolearre.

Wy hawwe in útwreiding neamd Heapcheck. Wy begûnen it te ûntwikkeljen. En parallel mei ús begon it EnterpriseDB-bedriuw ek in module te skriuwen, dy't se Heapcheck op deselde manier neamden. Allinnich neamden wy it PgHeapcheck, en se neamden it gewoan Heapcheck. Se hawwe it mei ferlykbere funksjes, in wat oare hântekening, mar mei deselde ideeën. Se hawwe se op guon plakken wat better útfierd. En se pleatsten it earder yn iepen boarne.

En no ûntwikkelje wy harren útwreiding, want it is net mear harren útwreiding, mar de útwreiding fan de mienskip. En yn 'e takomst is dit diel fan' e kernel dy't elkenien sil wurde levere, sadat se fan tefoaren witte kinne oer takomstige problemen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Op guon plakken kamen wy sels ta de konklúzje dat wy falske positiven hawwe yn ús tafersjochsystemen. Bygelyks, it 1C systeem. By it brûken fan in databank skriuwt Postgres soms gegevens yn dy't it kin lêze, mar pg_dump kin net lêze.

Dizze situaasje like korrupsje foar ús probleemdeteksjesysteem. De tsjinstoffisier waard wekker. De tsjinstoffisier seach nei wat der barde. Nei ferrin fan tiid kaam in klant en sei dat ik problemen hie. De begelieder ferklearre wat it probleem wie. Mar it probleem sit yn 'e Postgres-kearn.

Ik fûn in diskusje oer dizze funksje. En hy skreau dat wy dizze funksje tsjinkamen en it wie onaangenaam, in persoan waard nachts wekker om út te finen wat it wie.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

De mienskip antwurde: "Oh, wy moatte it echt reparearje."

Ik haw in ienfâldige analogy. As jo ​​​​rinne yn in skuon dy't in sânkorrel yn hat, dan kinne jo yn prinsipe trochgean - gjin probleem. As jo ​​​​laarzen ferkeapje oan tûzenen minsken, litte wy dan laarzen meitsje sûnder sân. En as ien fan 'e brûkers fan jo skuon in maraton sil rinne, dan wolle jo heul goede skuon meitsje, en dan skaalje se nei al jo brûkers. En sokke ûnferwachte brûkers binne altyd yn 'e wolkomjouwing. D'r binne altyd brûkers dy't it kluster op ien of oare orizjinele manier brûke. Jo moatte jo hjir altyd op tariede.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wat hawwe wy hjir leard? Wy learden in ienfâldich ding: it wichtichste is om de mienskip út te lizzen dat der in probleem is. As de mienskip it probleem erkend hat, dan ûntstiet natuerlike konkurrinsje om it probleem op te lossen. Want elkenien wol in wichtich probleem oplosse. Alle ferkeapers, alle hackers begripe dat se sels op dizze rake kinne stappe, dus se wolle se eliminearje.

As jo ​​wurkje oan in probleem, mar it hindert gjinien oars as jo, mar jo wurkje der systematysk oan en it wurdt úteinlik beskôge as in probleem, dan sil jo pull fersyk definityf wurde akseptearre. Jo patch sil wurde akseptearre, jo ferbetterings of sels oanfragen foar ferbetteringen sille wurde hifke troch de mienskip. Oan de ein fan de dei meitsje wy de databank better foar inoar.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

In nijsgjirrige databank is Greenplum. It is in heul parallelle databank basearre op de Postgres-koadebase, dêr't ik tige bekend mei bin.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

En Greenplum hat nijsgjirrige funksjonaliteit - taheakje optimalisearre tabellen. Dit binne tabellen dy't jo fluch kinne tafoegje oan. Se kinne wêze of kolom of rige.

Mar d'r wie gjin klustering, d.w.s. d'r wie gjin funksjonaliteit wêr't jo de gegevens yn 'e tabel kinne regelje yn oerienstimming mei de folchoarder dy't yn ien fan' e yndeksen is.

De jonges fan de taksy kamen nei my ta en seine: “Andrey, do witst Postgres. En hjir is it hast gelyk. Skeakelje nei 20 minuten. Jo nimme it en doch it." Ik tocht dat ja, ik wit Postgres, wikselje foar 20 minuten - ik moat dit dwaan.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Mar nee, it wie gjin 20 minuten, ik skreau it oer moannen. Op de PgConf.Russia-konferinsje benadere ik Heikki Linakangas fan Pivotal en frege: "Binne d'r problemen mei dit? Wêrom is d'r gjin taheakke optimalisearre tabelklustering? Hy seit: "Jo nimme de gegevens. Jo sortearje, jo reorganisearje. It is gewoan in baan." Ik: "Oh, ja, jo moatte it gewoan nimme en it dwaan." Hy seit: "Ja, wy hawwe frije hannen nedich om dit te dwaan." Ik tocht dat ik dit perfoarst dwaan moast.

En in pear moannen letter haw ik in pull-fersyk yntsjinne dy't dizze funksjonaliteit ymplementearre. Dit pull-fersyk waard hifke troch Pivotal tegearre mei de mienskip. Fansels wiene der bugs.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Mar it meast nijsgjirrige is dat doe't dit pull-fersyk fusearre waard, bugs fûn yn Greenplum sels. Wy hawwe fûn dat heaptabellen soms transaksje brekke as se klustere. En dit is in ding dat reparearre wurde moat. En se is op it plak dat ik krekt oanrekke. En myn natuerlike reaksje wie - goed, lit my dit ek dwaan.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Ik reparearre dizze bug. Stjoerde in pull fersyk oan de fixers. Hy is deamakke.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Dêrnei die bliken dat dizze funksjonaliteit krigen wurde moat yn de Greenplum-ferzje foar PostgreSQL 12. Dat is, it 20-minuten aventoer giet troch mei nije nijsgjirrige aventoeren. It wie nijsgjirrich om de hjoeddeistige ûntwikkeling oan te reitsjen, wêr't de mienskip nije en wichtichste funksjes snijt. It is beferzen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

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

Mar dêr bleau it net op. Nei alles die bliken dat wy foar dit alles dokumintaasje skriuwe moasten.

Ik begon dokumintaasje te skriuwen. Lokkich kamen de dokumintariërs fan Pivotal mei. Ingelsk is harren memmetaal. Se holpen my mei de dokumintaasje. Eins hawwe se sels wat ik foarstelde omskreaun yn echt Ingelsk.

En hjir, soe it lykje, it aventoer einige. En witsto wat der doe bard is? De jonges fan 'e taksy kamen nei my ta en seine: "Der binne noch twa aventoeren, elk foar 10 minuten." En wat moat ik har fertelle? Ik sei dat ik no in rapport op skaal jaan sil, dan sille wy jo aventoeren sjen, want dit is in nijsgjirrige baan.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Wat hawwe wy leard fan dizze saak? Om't wurkjen mei iepen boarne altyd wurkje mei in spesifike persoan, is it altyd wurkjen mei de mienskip. Om't ik yn elke poadium wurke mei ien of oare ûntwikkelder, guon tester, guon hacker, guon dokumintêre, guon arsjitekt. Ik wurke net mei Greenplum, ik wurke mei minsken om Greenplum hinne.

Mar! D'r is in oar wichtich punt - it is gewoan wurk. Dat is, jo komme, kofje drinke, koade skriuwe. Alle soarten ienfâldige invarianten wurkje. Doch it normaal - it sil goed wêze! En it is nochal in nijsgjirrige baan. D'r is in fersyk foar dit wurk fan Yandex.Cloud-kliïnten, brûkers fan ús klusters sawol binnen Yandex as bûten. En ik tink dat it tal projekten dêr't wy oan meidogge tanimme en ek de djipte fan ús belutsenens sil tanimme.

Da's alles. Litte wy oergean nei de fragen.

Wat en wêrom wy dogge yn Open Source databases. Andrey Borodin (Yandex.Cloud)

Fragen sesje

Hallo! Wy hawwe in oare fraach en antwurd sesje. En yn 'e studio Andrei Borodin. Dit is de persoan dy't jo krekt ferteld hat oer de bydrage fan Yandex.Cloud en Yandex oan iepen boarne. Us rapport giet no net hielendal oer de Wolk, mar tagelyk binne wy ​​basearre op sokke technologyen. Sûnder wat jo dien hawwe yn Yandex, soe d'r gjin tsjinst wêze yn Yandex.Cloud, dus tank fan my persoanlik. En de earste fraach fan 'e útstjoering: "Wat is elk fan 'e projekten wêrop jo neamden skreaun?"

It backupsysteem yn WAL-G is skreaun yn Go. Dit is ien fan 'e nijere projekten dêr't wy oan wurke hawwe. Hy is letterlik mar 3 jier âld. En in databank giet faak oer betrouberens. En dit betsjut dat de databanken frij âld binne en se wurde meastentiids skreaun yn C. It Postgres-projekt begûn sa'n 30 jier lyn. Doe wie de C89 de goede kar. En Postgres stiet der op skreaun. Mear moderne databases lykas ClickHouse wurde normaal skreaun yn C++. Alle systeemûntwikkeling is basearre op C en C ++.

In fraach fan ús finansjele manager, dy't ferantwurdlik is foar útjeften by Cloud: "Wêrom besteget Cloud jild oan it stypjen fan iepen boarne?"

D'r is hjir in ienfâldich antwurd foar de finansjele manager. Wy dogge dit om ús tsjinsten better te meitsjen. Op hokker manieren kinne wy ​​better dwaan? Wy kinne dingen effisjinter, rapper dwaan en dingen skalberber meitsje. Mar foar ús giet dit ferhaal foaral oer betrouberens. Bygelyks, yn in reservekopysysteem beoardielje wy 100% fan 'e patches dy't derop jilde. Wy witte wat de koade is. En wy binne nofliker om nije ferzjes út te rollen nei produksje. Dat is, foarearst, it giet om fertrouwen, oer reewilligens foar ûntwikkeling en oer betrouberens

In oare fraach: "Binne de easken fan eksterne brûkers dy't yn Yandex.Cloud wenje oars as ynterne brûkers dy't yn 'e ynterne Cloud wenje?"

It loadprofyl is fansels oars. Mar út it eachpunt fan myn ôfdieling binne alle spesjale en nijsgjirrige gefallen makke op in net-standert lading. Untwikkelders mei ferbylding, ûntwikkelders dy't it ûnferwachte dogge, binne like wierskynlik sawol yntern as ekstern te finen. Yn dit ferbân binne wy ​​allegear sawat itselde. En, wierskynlik, de ienige wichtige funksje binnen de Yandex-operaasje fan databases sil wêze dat binnen Yandex wy in lear hawwe. Op in stuit giet guon beskikberensône folslein yn it skaad, en alle Yandex-tsjinsten moatte op ien of oare manier nettsjinsteande dit funksjonearje. Dit is in lyts ferskil. Mar it makket in protte ûndersyksûntwikkeling op 'e ynterface fan' e database en netwurkstapel. Oars generearje eksterne en ynterne ynstallaasjes deselde oanfragen foar funksjes en ferlykbere oanfragen foar it ferbetterjen fan betrouberens en prestaasjes.

Folgjende fraach: "Hoe fiele jo persoanlik oer it feit dat in protte fan wat jo dogge wurdt brûkt troch oare wolken?" Wy sille gjin spesifike neame, mar in protte projekten dy't dien binne yn Yandex.Cloud wurde brûkt yn 'e wolken fan oare minsken.

Dit is cool. Earst is it in teken dat wy wat goed dien hawwe. En it krassen it ego. En wy binne der mear fertrouwen yn dat wy it goede beslút makke hawwe. Oan 'e oare kant is dit de hoop dat dit ús yn 'e takomst nije ideeën sil bringe, nije oanfragen fan brûkers fan tredden. De measte problemen op GitHub wurde makke troch yndividuele systeembehearders, yndividuele DBA's, yndividuele arsjitekten, yndividuele yngenieurs, mar soms komme minsken mei systematyske ûnderfining en sizze dat wy yn 30% fan bepaalde gefallen dit probleem hawwe en litte wy tinke oer hoe't jo it oplosse kinne. Dit is wêr't wy it meast nei útsjen. Wy sjogge út nei it dielen fan ûnderfiningen mei oare wolkplatfoarms.

Jo hawwe in protte oer de maraton praat. Ik wit dat jo in maraton rûn yn Moskou. Dêrtroch? De jongens fan PostgreSQL oerhelle?

Nee, Oleg Bartunov rint hiel hurd. Hy einige in oere foar my. Oer it algemien bin ik bliid mei hoe fier ik kaam. Foar my wie krekt ôfmeitsjen in prestaasje. Oer it algemien is it ferrassend dat d'r safolle runners binne yn 'e postgres-mienskip. It liket my dat d'r in soarte fan relaasje is tusken aerobyske sporten en de winsk foar systeemprogrammearring.

Binne jo sizze dat d'r gjin runners binne by ClickHouse?

Ik wit foar wis dat se der binne. ClickHouse is ek in databank. Trouwens, Oleg skriuwt my no: "Sille wy nei it rapport rinne?" Dit is in geweldich idee.

In oare fraach út 'e útstjoering fan Nikita: "Wêrom hawwe jo de brek yn Greenplum sels reparearre en net oan junioaren jûn?" Wier, it is net heul dúdlik wat de brek is en yn hokker tsjinst, mar it betsjuttet wierskynlik dejinge wêr't jo oer prate.

Ja, yn prinsipe koe it oan ien jûn wurde. It wie gewoan de koade dy't ik krekt feroare. En it wie natuerlik om it fuort fuort te dwaan. Yn prinsipe is it idee om ekspertize te dielen mei it team in goed idee. Wy sille grif Greenplum taken diele ûnder alle leden fan ús divyzje.

Om't wy it oer junioaren hawwe, is hjir in fraach. De persoan besleat de earste commit te meitsjen yn Postgres. Wat moat er dwaan om de earste commit te meitsjen?

Dit is in nijsgjirrige fraach: "Wêr te begjinnen?" It is normaal frij lestich om te begjinnen mei wat yn 'e kernel. Yn Postgres is bygelyks in to do list. Mar yn feite, dit is in blêd fan wat se besocht te dwaan, mar net slagge. Dit binne komplekse dingen. En meastentiids kinne jo wat nutsbedriuwen fine yn it ekosysteem, guon útwreidingen dy't kinne wurde ferbettere, dy't minder oandacht lûke fan kernel-ûntwikkelders. En dêrtroch binne d'r mear punten foar groei. By it Google Summer of code-programma stelt de postgres-mienskip elk jier in protte ferskillende ûnderwerpen foar dy't oanpakt wurde kinne. Dit jier hiene wy, tink ik, trije learlingen. Ien skreau sels yn WAL-G oer ûnderwerpen dy't wichtich binne foar Yandex. Yn Greenplum is alles ienfâldiger as yn 'e Postgres-mienskip, om't Greenplum-hackers pull-oanfragen tige goed behannelje en fuortendaliks begjinne te besjen. It ferstjoeren fan in patch nei Postgres is in kwestje fan moannen, mar Greenplum sil oer in dei komme en sjen wat jo dien hawwe. In oar ding is dat Greenplum aktuele problemen oplosse moat. Greenplum wurdt net in soad brûkt, dus it finen fan jo probleem is frij lestich. En earst moatte wy problemen oplosse, fansels.

Boarne: www.habr.com