Sut i roi'r gorau i boeni a dechrau byw heb fonolith

Sut i roi'r gorau i boeni a dechrau byw heb fonolith

Rydyn ni i gyd yn caru straeon. Rydyn ni'n hoffi eistedd o amgylch y tân a siarad am ein buddugoliaethau, brwydrau, neu'n syml ein profiad gwaith.

Mae heddiw yn ddiwrnod o'r fath. A hyd yn oed os nad ydych chi wrth y tân ar hyn o bryd, mae gennym ni stori i chi. Hanes sut y dechreuon ni weithio gyda storfa ar Tarantool.

Un tro, roedd gan ein cwmni gwpl o “monoliths” ac un “nenfwd” i bawb, yr oedd y monolithau hyn yn araf ond yn sicr yn agosáu atynt, gan gyfyngu ar ehediad ein cwmni, ein datblygiad. Ac roedd dealltwriaeth glir: un diwrnod byddwn yn taro'r nenfwd hwn yn galed.

Bellach dyma'r ideoleg gyffredinol o wahanu popeth a phawb, o offer i resymeg busnes. O ganlyniad, mae gennym ni, er enghraifft, ddau DC sydd bron yn annibynnol ar lefel y rhwydwaith. Ac yna roedd popeth yn hollol wahanol.

Heddiw, mae yna lawer o offer ac offer ar gyfer gwneud newidiadau ar ffurf CI / CD, K8S, ac ati. Yn yr amser “monolithig”, nid oedd angen cymaint o eiriau tramor arnom. Roedd yn ddigon i gywiro'r “storfa” yn y gronfa ddata.

Ond symudodd amser ymlaen, a symudodd nifer y ceisiadau ymlaen ynghyd ag ef, weithiau'n saethu RPS y tu hwnt i'n galluoedd. Gyda mynediad y gwledydd CIS i'r farchnad, nid oedd y llwyth ar y prosesydd cronfa ddata o'r monolith cyntaf yn disgyn o dan 90%, ac arhosodd RPS ar lefel 2400. Ac nid dewiswyr bach yn unig oedd y rhain, ond ymholiadau mawr gyda a criw o wiriadau a JOINs a allai redeg bron am hanner y data yn erbyn cefndir IO mawr.

Pan ddechreuodd gwerthiannau Dydd Gwener Du llawn ymddangos ar y sîn - a Wildberries yn un o'r rhai cyntaf i'w dal yn Rwsia - aeth y sefyllfa'n gwbl drist. Wedi'r cyfan, mae'r llwyth ar ddiwrnodau o'r fath yn cynyddu dair gwaith.
O, yr “amseroedd monolithig” hyn! Yr wyf yn siŵr eich bod wedi profi rhywbeth tebyg, ac ni allwch ddeall o hyd sut y gallai hyn ddigwydd i chi.

Beth allwch chi ei wneud - mae ffasiwn yn gynhenid ​​​​mewn technoleg. Tua 5 mlynedd yn ôl, bu'n rhaid i ni ailfeddwl un o'r mods hyn ar ffurf safle presennol ar weinydd .NET a MS SQL, a oedd yn storio holl resymeg y wefan ei hun yn ofalus. Fe wnes i ei gadw mor ofalus nes bod llifio monolith o'r fath wedi troi allan yn bleser hir ac nid hawdd o gwbl.
Digression bach.

Mewn gwahanol ddigwyddiadau dywedaf: “Os na welsoch chi fonolith, yna ni wnaethoch chi dyfu!” Mae gennyf ddiddordeb yn eich barn ar y mater hwn, ysgrifennwch ef yn y sylwadau.

Sŵn o Thunder

Gadewch i ni ddychwelyd at ein "coelcerth". Er mwyn dosbarthu'r llwyth o ymarferoldeb “monolithig”, fe benderfynon ni rannu'r system yn ficrowasanaethau yn seiliedig ar dechnolegau ffynhonnell agored. Oherwydd, o leiaf, maent yn rhatach i'w graddio. Ac roedd gennym ni ddealltwriaeth 100% y byddai'n rhaid i ni raddfa (a llawer). Wedi'r cyfan, eisoes ar yr adeg honno roedd yn bosibl mynd i mewn i farchnadoedd gwledydd cyfagos, a dechreuodd nifer y cofrestriadau, yn ogystal â nifer y gorchmynion, dyfu hyd yn oed yn gryfach.

Ar ôl dadansoddi'r ymgeiswyr cyntaf ar gyfer gwyro o'r monolith i wasanaethau micro, sylweddolom fod 80% o'r ysgrifennu ynddynt yn dod o systemau swyddfa gefn, a darllen o'r swyddfa flaen. Yn gyntaf oll, roedd hyn yn ymwneud â chwpl o is-systemau pwysig i ni - data defnyddwyr a system ar gyfer cyfrifo cost derfynol nwyddau yn seiliedig ar wybodaeth am ostyngiadau a chwponau cwsmeriaid ychwanegol.

Wedi'i hindentio. Nawr mae'n frawychus dychmygu, ond yn ogystal â'r is-systemau uchod, tynnwyd catalogau cynnyrch, trol siopa defnyddiwr, system chwilio cynnyrch, system hidlo ar gyfer catalogau cynnyrch, a gwahanol fathau o systemau argymell o'n monolith. Ar gyfer gweithrediad pob un ohonynt, mae yna ddosbarthiadau ar wahân o systemau wedi'u teilwra'n gul, ond unwaith ar y tro roedden nhw i gyd yn byw mewn un “tŷ”.

Fe wnaethom gynllunio ar unwaith i drosglwyddo data am ein cleientiaid i'r system wedi'i dorri. Roedd dileu ymarferoldeb ar gyfer cyfrifo cost derfynol nwyddau yn gofyn am scalability da ar gyfer darllen, oherwydd dyma greu'r llwyth RPS mwyaf a hwn oedd yr anoddaf i'w weithredu ar gyfer y gronfa ddata (mae llawer o ddata yn rhan o'r broses gyfrifo).

O ganlyniad, fe wnaethom lunio cynllun sy'n cyd-fynd yn dda â Tarantool.

Bryd hynny, ar gyfer gweithredu microwasanaethau, dewiswyd cynlluniau ar gyfer gweithio gyda sawl canolfan ddata ar beiriannau rhithwir a chaledwedd. Fel y dangosir yn y ffigurau, cymhwyswyd opsiynau atgynhyrchu Tarantool yn y moddau meistr-feistr a meistr-gaethwas.

Sut i roi'r gorau i boeni a dechrau byw heb fonolith
Pensaernïaeth. Opsiwn 1. Gwasanaeth defnyddiwr

Ar hyn o bryd, mae yna 24 darn, ac mae gan bob un ohonynt 2 achos (un ar gyfer pob DC), i gyd yn y modd meistr-feistr.

Ar ben y gronfa ddata mae rhaglenni sy'n cyrchu atgynyrchiadau cronfa ddata. Mae cymwysiadau'n gweithio gyda Tarantool trwy ein llyfrgell arferol, sy'n gweithredu rhyngwyneb gyrrwr Tarantool Go. Mae hi'n gweld yr holl atgynyrchiadau a gall weithio gyda'r meistr i ddarllen ac ysgrifennu. Yn y bôn, mae'n gweithredu'r model set replica, sy'n ychwanegu rhesymeg ar gyfer dewis atgynyrchiadau, perfformio ailgynigion, torrwr cylched a therfyn cyfradd.

Yn yr achos hwn, mae'n bosibl ffurfweddu'r polisi dethol replica yng nghyd-destun shards. Er enghraifft, roundrobin.

Sut i roi'r gorau i boeni a dechrau byw heb fonolith
Pensaernïaeth. Opsiwn 2. Gwasanaeth ar gyfer cyfrifo cost derfynol nwyddau

Ychydig fisoedd yn ôl, aeth y rhan fwyaf o'r ceisiadau am gyfrifo cost derfynol nwyddau i wasanaeth newydd, sydd, mewn egwyddor, yn gweithio heb gronfeydd data, ond beth amser yn ôl cafodd popeth ei brosesu 100% gan wasanaeth gyda Tarantool o dan y cwfl.

Mae cronfa ddata'r gwasanaeth yn cynnwys 4 meistr y mae'r synchronizer yn casglu data iddynt, ac mae pob un o'r meistri atgynhyrchu hyn yn dosbarthu data i gopïau darllen yn unig. Mae gan bob meistr tua 15 o atgynhyrchiadau o'r fath.

Naill ai yn y cynllun cyntaf neu'r ail gynllun, os nad yw un DC ar gael, gall y cais dderbyn data yn yr ail.

Mae'n werth nodi bod atgynhyrchu yn Tarantool yn eithaf hyblyg a gellir ei ffurfweddu ar amser rhedeg. Mewn systemau eraill, cododd anawsterau. Er enghraifft, mae newid y paramedrau max_wal_senders a max_replication_slots yn PostgreSQL yn gofyn am ailgychwyn y dewin, a all mewn rhai achosion arwain at dorri cysylltiadau rhwng y cais a'r DBMS.

Ceisio a byddwch yn dod o hyd!

Pam na wnaethom ni “fel pobl normal”, ond dewis ffordd annodweddiadol? Mae'n dibynnu ar yr hyn a ystyrir yn normal. Yn gyffredinol, mae llawer o bobl yn gwneud clwstwr o Mongo ac yn ei wasgaru ar draws tri DC a geo-ddosbarthwyd.

Bryd hynny, roedd gennym ni ddau brosiect Redis eisoes. Roedd y cyntaf yn storfa, a'r ail yn storfa barhaus ar gyfer data nad oedd yn rhy feirniadol. Roedd yn eithaf anodd gydag ef, yn rhannol trwy ein bai ni. Weithiau roedd cyfrolau eithaf mawr yn y cywair, ac o bryd i'w gilydd aeth y safle'n sâl. Fe wnaethon ni ddefnyddio'r system hon yn y fersiwn meistr-gaethwas. Ac roedd yna lawer o achosion lle digwyddodd rhywbeth i'r meistr a thorrodd atgynhyrchu.

Hynny yw, mae Redis yn dda ar gyfer tasgau di-wladwriaeth, nid rhai urddasol. Mewn egwyddor, roedd yn caniatáu datrys y rhan fwyaf o broblemau, ond dim ond os oeddent yn atebion gwerth allweddol gyda phâr o fynegeion. Ond roedd Redis y pryd hynny yn eithaf trist gyda dyfalbarhad ac atgynhyrchu. Yn ogystal, roedd cwynion am berfformiad.

Fe wnaethon ni feddwl am MySQL a PostgreSQL. Ond rhywsut ni wnaeth yr un cyntaf ddal ymlaen â ni, ac mae'r ail un yn gynnyrch eithaf soffistigedig ynddo'i hun, a byddai'n amhriodol adeiladu gwasanaethau syml arno.
Fe wnaethon ni roi cynnig ar RIAK, Cassandra, hyd yn oed cronfa ddata graff. Mae'r rhain i gyd yn atebion gweddol arbenigol nad oeddent yn addas ar gyfer rôl offeryn cyffredinol cyffredinol ar gyfer creu gwasanaethau.

Yn y pen draw fe wnaethom setlo ar Tarantool.

Fe wnaethon ni droi ato pan oedd yn fersiwn 1.6. Roedd gennym ddiddordeb ynddo gan symbiosis gwerth allweddol a swyddogaeth cronfa ddata berthynol. Mae yna fynegeion eilaidd, trafodion a bylchau, mae'r rhain fel tablau, ond nid yn syml, gallwch chi storio gwahanol nifer o golofnau ynddynt. Ond nodwedd angheuol Tarantool oedd mynegeion eilaidd wedi'u cyfuno â gwerth allweddol a thrafodoldeb.

Chwaraeodd y gymuned ymatebol sy'n siarad Rwsieg, sy'n barod i helpu gyda sgwrsio, rôl hefyd. Fe wnaethon ni ddefnyddio hwn yn weithredol ac yn byw yn uniongyrchol yn y sgwrs. A pheidiwch ag anghofio am gysondeb gweddus heb gamgymeriadau a chamgymeriadau amlwg. Os edrychwch ar ein hanes gyda Tarantool, cawsom lawer o boen a methiannau wrth ddyblygu, ond ni wnaethom erioed golli data oherwydd ei fai!

Dechreuodd gweithredu'n arw

Bryd hynny, ein prif stac datblygu oedd .NET, nad oedd unrhyw gysylltydd iddo ar gyfer Tarantool. Fe ddechreuon ni wneud rhywbeth yn Go. Gweithiodd yn dda gyda Lua hefyd. Y brif broblem bryd hynny oedd gyda dadfygio: yn .NET mae popeth yn wych gyda hyn, ond ar ôl hynny roedd yn anodd mentro i fyd Lua wedi'i fewnosod, pan nad oes gennych unrhyw ddadfygio ac eithrio logiau. Yn ogystal, am ryw reswm roedd atgynhyrchu yn disgyn ar wahân o bryd i'w gilydd, felly roedd yn rhaid i mi ymchwilio i strwythur yr injan Tarantool. Helpodd y sgwrs gyda hyn, ac i raddau llai, y ddogfennaeth; weithiau fe edrychon ni ar y cod. Bryd hynny, roedd y ddogfennaeth felly.

Felly, dros sawl mis, llwyddais i gael fy mhen o gwmpas a chael canlyniadau teilwng o weithio gyda Tarantool. Fe wnaethom lunio datblygiadau cyfeirio mewn git a helpodd gyda ffurfio microwasanaethau newydd. Er enghraifft, pan gododd tasg: i greu microwasanaeth arall, edrychodd y datblygwr ar god ffynhonnell yr ateb cyfeirio yn yr ystorfa, ac ni chymerodd fwy nag wythnos i greu un newydd.

Roedd y rhain yn amseroedd arbennig. Yn gonfensiynol, yna fe allech chi fynd i fyny at y gweinyddwr wrth y bwrdd nesaf a gofyn: “Rhowch beiriant rhithwir i mi.” Tua thri deg munud yn ddiweddarach roedd y car gyda chi yn barod. Fe wnaethoch chi gysylltu'ch hun, gosod popeth, ac anfonwyd traffig atoch chi.

Heddiw ni fydd hyn yn gweithio mwyach: mae angen i chi ychwanegu monitro a logio i'r gwasanaeth, gorchuddio'r swyddogaeth gyda phrofion, archebu peiriant rhithwir neu ddanfon i Kuber, ac ati. Yn gyffredinol, bydd yn well fel hyn, er y bydd yn cymryd mwy o amser ac yn fwy trafferthus.

Rhannwch a rheolwch. Beth yw'r cytundeb gyda Lua?

Roedd yna gyfyng-gyngor difrifol: nid oedd rhai timau yn gallu cyflwyno newidiadau i wasanaeth gyda llawer o resymeg yn Lua yn ddibynadwy. Roedd hyn yn cyd-fynd yn aml â'r ffaith nad oedd y gwasanaeth yn gweithio.

Hynny yw, mae'r datblygwyr yn paratoi rhyw fath o newid. Mae Tarantool yn dechrau gwneud y mudo, ond mae'r replica yn dal gyda'r hen god; Mae rhywfaint o DDL neu rywbeth arall yn cyrraedd yno trwy atgynhyrchu, ac mae'r cod yn disgyn ar wahân oherwydd nad yw'n cael ei ystyried. O ganlyniad, gosodwyd y weithdrefn ddiweddaru ar gyfer y gweinyddwyr ar ddalen A4: stopiwch ddyblygu, diweddarwch hyn, trowch atgynhyrchu ymlaen, trowch i ffwrdd yma, diweddariad yno. Hunllef!

O ganlyniad, yn awr rydym yn amlaf yn ceisio gwneud dim yn Lua. Defnyddiwch iproto (protocol deuaidd ar gyfer rhyngweithio â'r gweinydd), a dyna ni. Efallai mai diffyg gwybodaeth ymhlith y datblygwyr yw hwn, ond o'r safbwynt hwn mae'r system yn gymhleth.

Nid ydym bob amser yn dilyn y sgript hon yn ddall. Heddiw nid oes gennym ni ddu a gwyn: naill ai mae popeth yn Lua, neu mae popeth yn Go. Rydym eisoes yn deall sut y gallwn eu cyfuno fel nad ydym yn wynebu problemau mudo yn ddiweddarach.

Ble mae Tarantool nawr?
Defnyddir Tarantool yn y gwasanaeth ar gyfer cyfrifo cost derfynol nwyddau gan gymryd i ystyriaeth cwponau disgownt, a elwir hefyd yn “Hyrwyddwr”. Fel y dywedais yn gynharach, mae bellach yn ymddeol: mae gwasanaeth catalog newydd yn cael ei ddisodli gyda phrisiau wedi'u rhag-gyfrifo, ond chwe mis yn ôl gwnaed yr holl gyfrifiadau yn Promotizer. Yn flaenorol, ysgrifenwyd hanner ei resymeg yn Lua. Ddwy flynedd yn ôl, trowyd y gwasanaeth yn gyfleuster storio, ac ailysgrifennwyd y rhesymeg yn Go, oherwydd bod mecaneg gostyngiadau wedi newid ychydig ac nid oedd gan y gwasanaeth berfformiad.

Un o'r gwasanaethau mwyaf hanfodol yw'r proffil defnyddiwr. Hynny yw, mae holl ddefnyddwyr Wildberries yn cael eu storio yn Tarantool, ac mae tua 50 miliwn ohonynt.System wedi'i dorri gan ID defnyddiwr, wedi'i ddosbarthu ar draws sawl DC sy'n gysylltiedig â gwasanaethau Go.
Yn ôl RPS, Hyrwyddwr oedd yr arweinydd ar un adeg, gan gyrraedd 6 mil o geisiadau. Ar un adeg roedd gennym 50-60 copi. Nawr yr arweinydd yn RPS yw proffiliau defnyddwyr, tua mil 12. Mae'r gwasanaeth hwn yn defnyddio darnio arferol, wedi'i rannu gan ystodau o IDau defnyddwyr. Mae'r gwasanaeth yn gwasanaethu mwy nag 20 o beiriannau, ond mae hyn yn ormod; rydym yn bwriadu lleihau'r adnoddau a ddyrennir, oherwydd mae capasiti 4-5 peiriant yn ddigon ar ei gyfer.

Gwasanaeth sesiwn yw ein gwasanaeth cyntaf ar vshard a Cartridge. Roedd angen rhywfaint o ymdrech gennym ni i sefydlu vshard a diweddaru Cartridge, ond yn y diwedd fe weithiodd popeth allan.

Roedd y gwasanaeth ar gyfer arddangos gwahanol faneri ar y wefan ac yn y rhaglen symudol yn un o'r rhai cyntaf i gael ei ryddhau'n uniongyrchol ar Tarantool. Mae'r gwasanaeth hwn yn nodedig am y ffaith ei fod yn 6-7 oed, mae'n dal i fod ar waith ac nid yw erioed wedi'i ailgychwyn. Defnyddiwyd atgynhyrchu meistr-feistr. Ni thorrodd dim erioed.

Mae yna enghraifft o ddefnyddio Tarantool ar gyfer ymarferoldeb cyfeirio cyflym mewn system warws i wirio gwybodaeth ddwywaith yn gyflym mewn rhai achosion. Fe wnaethon ni geisio defnyddio Redis ar gyfer hyn, ond roedd y data yn y cof yn cymryd mwy o le na Tarantool.

Mae gwasanaethau rhestr aros, tanysgrifiadau cleientiaid, straeon ffasiynol ar hyn o bryd a nwyddau gohiriedig hefyd yn gweithio gyda Tarantool. Mae'r gwasanaeth olaf yn y cof yn cymryd tua 120 GB. Dyma'r gwasanaeth mwyaf cynhwysfawr o'r uchod.

Casgliad

Diolch i fynegeion eilaidd ynghyd â gwerth allweddol a thrafodaeth, mae Tarantool yn addas iawn ar gyfer pensaernïaeth sy'n seiliedig ar ficrowasanaethau. Fodd bynnag, cawsom anawsterau wrth gyflwyno newidiadau i wasanaethau gyda llawer o resymeg yn Lua - roedd y gwasanaethau'n aml yn rhoi'r gorau i weithio. Nid oeddem yn gallu goresgyn hyn, a thros amser daethom i gyfuniadau gwahanol o Lua a Go: rydym yn gwybod ble i ddefnyddio un iaith a ble i ddefnyddio un arall.

Beth arall i'w ddarllen ar y pwnc

Ffynhonnell: hab.com

Ychwanegu sylw