Чӣ тавр бояд ташвишро бас кунад ва бидуни монолит зиндагӣ карданро оғоз кард

Чӣ тавр бояд ташвишро бас кунад ва бидуни монолит зиндагӣ карданро оғоз кард

Мо ҳама ҳикояҳоро дӯст медорем. Мо дӯст медорем, ки дар атрофи оташ нишаста, дар бораи ғалабаҳои гузаштаи худ, набардҳо ё танҳо таҷрибаи кориамон сӯҳбат кунем.

Имрӯз маҳз ҳамин рӯз аст. Ва ҳатто агар шумо ҳоло дар оташ набошед, мо барои шумо як ҳикоя дорем. Ҳикояи он, ки чӣ тавр мо бо анбор дар Tarantool кор карданро оғоз кардем.

Як вактхо корхонаи мо як-ду «монолит» ва як «шифт» барои хама дошт, ки ин монолитхо охиста-охиста, вале бемайлон ба онхо наздик мешуданд, парвози корхонаи моро, тараккиёти моро махдуд мекард. Ва фахми-ши равшан буд: рузе мо ба ин шифт сахт мезанем.

Ҳоло ин идеологияи бартарии ҷудо кардани ҳама чиз ва ҳама аст, аз таҷҳизот то мантиқи тиҷорат. Дар натиҷа, мо, масалан, ду DC дорем, ки дар сатҳи шабака амалан мустақиланд. Ва он гоҳ ҳама чиз тамоман дигар шуд.

Имрӯзҳо асбобҳо ва асбобҳои зиёде барои ворид кардани тағирот дар шакли CI/CD, K8S ва ғайра мавҷуданд. Дар замони «монолитӣ» ба мо ин қадар калимаҳои хориҷӣ ниёз надоштанд. Фақат ислоҳ кардани “захира” дар базаи маълумот кофӣ буд.

Аммо вақт ба пеш ҳаракат мекард ва шумораи дархостҳо дар баробари он пеш мерафт ва баъзан RPS-ро аз имконоти мо берун мебурд. Бо ба бозор ворид шудани кишварҳои ИДМ, сарбории протсессори пойгоҳи додаҳои монолитии аввал аз 90% паст нарафт ва RPS дар сатҳи 2400 боқӣ монд. Ва инҳо на танҳо селекторҳои хурд, балки дархостҳои вазнин бо як қатор чекҳо ва JOIN-ҳо, ки метавонанд тақрибан нисфи маълумотро дар заминаи IO калон иҷро кунанд.

Вақте ки фурӯши пурраи Ҷумъаи сиёҳ дар саҳна пайдо шуд - ва Wildberries яке аз аввалинҳо буд, ки онҳоро дар Русия баргузор кард - вазъ комилан ғамгин шуд. Охир, бори ин гуна рузхо се баробар меафзояд.
Оҳ, ин "замонҳои монолитӣ"! Ман боварӣ дорам, ки шумо ба ин монанд дучор шудаед ва шумо то ҳол намефаҳмед, ки чӣ тавр ин бо шумо рӯй дода метавонад.

Шумо чӣ кор карда метавонед - мӯд ба технология хос аст. Тақрибан 5 сол пеш, мо маҷбур шудем, ки яке аз ин модулҳоро дар шакли як сайти мавҷуда дар сервери .NET ва MS SQL, ки тамоми мантиқи худи сайтро бодиққат нигоҳ медошт, аз нав баррасӣ кунем. Ман онро чунон бодиққат нигоҳ доштам, ки арра кардани чунин монолит як лаззати тӯлонӣ ва на он қадар осон буд.
Нишондиҳандаи хурд.

Дар чорабиниҳои гуногун ман мегӯям: "Агар шумо монолитро надидаед, пас шумо намерасед!" Ман ба фикри шумо дар ин бора шавқ дорам, лутфан онро дар шарҳҳо нависед.

Садои раъд

Баргардем ба «гулхан»-и худ. Барои тақсим кардани сарбории функсияҳои "монолитӣ", мо тасмим гирифтем, ки системаро ба хидматрасониҳои хурд дар асоси технологияҳои кушодаасос тақсим кунем. Зеро, ҳадди ақал, онҳо барои миқёс арзонтаранд. Ва мо 100% фаҳмидем, ки мо бояд миқёс кунем (ва бисёр). Охир, аллакай дар он вакт ба бозорхои мамлакатхои хамсоя даромадан мумкин буд ва шумораи бакайдгирй ва инчунин шумораи заказхо боз хам пурзуртар меаф-зояд.

Ҳангоми таҳлили аввалин номзадҳо барои рафтан аз монолит ба микросервисҳо, мо фаҳмидем, ки 80% навиштаҷот дар онҳо аз системаҳои бэк-офис ва хондан аз фронт-офис сарчашма мегиранд. Пеш аз ҳама, ин ба якчанд зерсистемаҳои муҳим барои мо дахл дошт - маълумоти корбар ва системаи ҳисоб кардани арзиши ниҳоии мол дар асоси маълумот дар бораи тахфифҳои иловагӣ ва купонҳои муштариён.

Дохилшуда. Ҳоло тасаввур кардан даҳшатнок аст, аммо ба ҷуз аз зерсистемаҳои дар боло зикршуда, каталогҳои маҳсулот, аробаи хариди корбар, системаи ҷустуҷӯи маҳсулот, системаи филтркунии каталогҳои маҳсулот ва системаҳои гуногуни тавсияҳо низ аз монолитии мо хориҷ карда шуданд. Барои кори ҳар кадоми онҳо синфҳои алоҳидаи системаҳои ба таври танг мутобиқшуда мавҷуданд, аммо як вақтҳо ҳама дар як "хона" зиндагӣ мекарданд.

Мо фавран ба нақша гирифтем, ки маълумотро дар бораи мизоҷони худ ба системаи шарикӣ интиқол диҳем. Бартараф кардани функсияҳо барои ҳисоб кардани арзиши ниҳоии маҳсулот миқёспазирии хубро барои хондан талаб мекард, зеро он сарбории бузургтарини RPS-ро ба вуҷуд овард ва иҷрои он барои базаи маълумот мушкилтарин буд (дар раванди ҳисобкунӣ маълумотҳои зиёд ҷалб карда мешаванд).

Дар натиҷа, мо нақшаеро таҳия кардем, ки бо Tarantool мувофиқат мекунад.

Дар он вақт барои кори микросервисҳо схемаҳои кор бо якчанд марказҳои додаҳо дар мошинҳои виртуалӣ ва сахтафзор интихоб карда шуданд. Тавре ки дар расмҳо нишон дода шудааст, вариантҳои такрории Tarantool ҳам дар режимҳои устод-усто ва ҳам усто-ғулом татбиқ карда шуданд.

Чӣ тавр бояд ташвишро бас кунад ва бидуни монолит зиндагӣ карданро оғоз кард
Архитектура. Варианти 1. Хидмати корбар

Дар айни замон, 24 порча мавҷуд аст, ки ҳар яки онҳо 2 мисол дорад (якто барои ҳар як DC), ҳама дар ҳолати мастер-мастер.

Дар болои пойгоҳи додаҳо барномаҳое ҳастанд, ки ба репликаҳои пойгоҳи додаҳо дастрасӣ доранд. Барномаҳо бо Tarantool тавассути китобхонаи фармоишии мо кор мекунанд, ки интерфейси драйвери Tarantool Go-ро амалӣ мекунад. Вай ҳама нусхаҳоро мебинад ва метавонад бо устод барои хондан ва навиштан кор кунад. Аслан, он модели маҷмӯи репликаро амалӣ мекунад, ки мантиқи интихоби репликаҳо, такрори такрорӣ, сӯзандору ва маҳдудияти суръатро илова мекунад.

Дар ин ҳолат, мумкин аст, ки сиёсати интихоби репликаро дар заминаи пораҳо танзим кунед. Масалан, roundrobin.

Чӣ тавр бояд ташвишро бас кунад ва бидуни монолит зиндагӣ карданро оғоз кард
Архитектура. Варианти 2. Хизматрасонӣ барои ҳисоб кардани арзиши ниҳоии мол

Чанд моҳ пеш, аксари дархостҳо барои ҳисоб кардани арзиши ниҳоии маҳсулот ба хидмати нав, ки аслан бидуни пойгоҳи додаҳо кор мекунанд, мерафтанд, аммо чанде пеш ҳама чиз 100% тавассути хидмат бо Tarantool дар зери сарпӯш коркард карда шуд.

Пойгоҳи хидматрасонӣ аз 4 усто иборат аст, ки дар он синхронизатор маълумот ҷамъ мекунад ва ҳар яке аз ин устодони такрорӣ маълумотро ба репликаҳои танҳо барои хондан тақсим мекунад. Ҳар як устод тақрибан 15 чунин нусха дорад.

Дар нақшаи якум ё дуюм, агар як DC дастрас набошад, барнома метавонад дар дуюм маълумот гирад.

Бояд қайд кард, ки такрорӣ дар Tarantool хеле чандир аст ва онро дар вақти корӣ танзим кардан мумкин аст. Дар дигар системахо душворихо ба амал омаданд. Масалан, тағир додани параметрҳои max_wal_senders ва max_replication_slots дар PostgreSQL бозоғозии устодро талаб мекунад, ки дар баъзе мавридҳо метавонад ба қатъ шудани робитаҳо байни барнома ва DBMS оварда расонад.

Ҷустуҷӯ кунед ва хоҳед ёфт!

Чаро мо ин корро "мисли одамони оддӣ" накардаем, балки роҳи ғайриоддӣ интихоб кардем? Ин аз он вобаста аст, ки он чӣ муқаррарӣ ҳисобида мешавад. Бисёр одамон одатан аз Mongo кластер месозанд ва онро дар се DC-и ҷуғрофӣ паҳн мекунанд.

Дар он вақт мо аллакай ду лоиҳаи Redis доштем. Якум кэш буд ва дуюм нигаҳдории доимӣ барои маълумоти на он қадар муҳим буд. Бо ӯ хеле душвор буд, қисман бо айби мо. Баъзан ҳаҷми хеле калон дар калид буданд ва гоҳ-гоҳ сайт бад мешуд. Мо ин системаро дар версияи master-slave истифода бурдем. Ва бисьёр ходисахое буданд, ки бо усто ходисае руй дод ва репликация вайрон шуд.

Яъне, Редис барои вазифаҳои бидуни шаҳрвандӣ мувофиқ аст, на вазифаҳои давлатӣ. Аслан, он имкон дод, ки аксари мушкилот ҳал карда шаванд, аммо танҳо агар онҳо ҳалли арзишҳои калидӣ бо як ҷуфт индексҳо бошанд. Аммо Редис дар он вақт бо истодагарӣ ва такрорӣ хеле ғамгин буд. Гайр аз ин, аз ичрои супоришхо шикоятхо ба амал омаданд.

Мо дар бораи MySQL ва PostgreSQL фикр мекардем. Аммо аввалинаш ба таври возеҳ ба мо мувофиқат накард ва дуюмаш як маҳсулоти хеле мураккаб аст ва дар он сохтани хидматҳои оддӣ номувофиқ мебуд.
Мо кӯшиш кардем RIAK, Кассандра, ҳатто як пойгоҳи графикӣ. Инҳо ҳама қарорҳои хеле мувофиқанд, ки барои нақши як воситаи универсалии эҷоди хидматҳо мувофиқ набуданд.

Дар ниҳоят мо дар Тарантул қарор гирифтем.

Вақте ки он дар версияи 1.6 буд, мо ба он муроҷиат кардем. Мо ба он симбиозии калид-арзиш ва функсияи пойгоҳи додаҳои релятсионӣ таваҷҷӯҳ зоҳир кардем. Индексҳои дуюмдараҷа, транзаксияҳо ва фосилаҳо мавҷуданд, ки онҳо ба ҷадвалҳо монанданд, аммо оддӣ нестанд, шумо метавонед шумораи гуногуни сутунҳоро дар онҳо нигоҳ доред. Аммо хусусияти қотилони Tarantool индексҳои дуюмдараҷа дар якҷоягӣ бо арзиши калидӣ ва транзаксия буд.

Ҷамъияти вокуниши русзабон, ки барои кӯмак дар чат омода аст, низ нақш бозид. Мо инро фаъолона истифода мебарем ва бевосита дар чат зиндагӣ мекунем. Ва дар бораи устувории шоиста бидуни хатоҳои ошкор ва хато фаромӯш накунед. Агар шумо ба таърихи мо бо Tarantool назар кунед, мо бо такрорӣ дард ва нокомиҳои зиёд доштем, аммо мо ҳеҷ гоҳ бо айби он маълумотро аз даст надодем!

Татбиқи он ба оғози ноҳамвор оғоз ёфт

Он вақт стеки асосии таҳияи мо .NET буд, ки ба он пайвасткунаки Tarantool вуҷуд надошт. Мо дарҳол дар Go ба коре шурӯъ кардем. Он бо Луа низ хуб кор мекард. Мушкилоти асосӣ дар он вақт бо ислоҳкунӣ буд: дар .NET ҳама чиз бо ин хуб аст, аммо пас аз он ба ҷаҳони Lua дарунсохт ворид шудан душвор буд, вақте ки шумо ба ҷуз гузоришҳо ислоҳ кардан надоред. Илова бар ин, бо ягон сабаб такрорӣ давра ба давра пароканда мешуд, бинобар ин ман маҷбур будам, ки сохтори муҳаррики Tarantool-ро омӯзам. Чат ба ин ва ба андозаи камтар ҳуҷҷатҳо кӯмак кард; баъзан мо ба код нигоҳ мекардем. Он вакт хуччатхо хамин тавр буд.

Ҳамин тавр, дар тӯли якчанд моҳ, ман тавонистам сарамро ба даст орам ва аз кор бо Tarantool натиҷаҳои хуб ба даст орам. Мо таҳияи истинодҳоро дар git тартиб додем, ки дар ташаккули микросервисҳои нав кӯмак карданд. Масалан, вақте ки вазифа ба миён омад: барои сохтани микросервиси дигар, таҳиякунанда ба коди сарчашмаи ҳалли истинод дар репозиторий назар кард ва барои сохтани хидмати нав на бештар аз як ҳафта вақт лозим буд.

Ин вақтҳои махсус буданд. Одатан, пас шумо метавонед ба администратор дар мизи дигар равед ва пурсед: "Ба ман мошини виртуалӣ диҳед." Тақрибан сӣ дақиқа пас мошин аллакай бо шумо буд. Шумо худатон пайвастед, ҳама чизро насб кардед ва трафик ба шумо фиристода шуд.

Имрӯз ин дигар кор нахоҳад кард: шумо бояд ба хидмат назорат ва сабти ном илова кунед, функсияро бо санҷишҳо фаро гиред, мошини виртуалӣ фармоиш диҳед ё ба Кубер интиқол диҳед ва ғайра. Умуман, ин тавр беҳтар хоҳад шуд, гарчанде ки он тӯлонӣ ва душвортар хоҳад буд.

Тақсим кунед ва ҳукмронӣ кунед. Бо Луа чӣ кор аст?

Мушкилоти ҷиддӣ вуҷуд дошт: баъзе дастаҳо натавонистанд тағиротро ба хидмат бо мантиқи зиёде дар Луа ба таври эътимодбахш ворид кунанд. Ин аксар вақт бо кор накардани хидмат ҳамроҳӣ мекард.

Яъне, таҳиягарон як навъ тағиротро омода мекунанд. Tarantool ба муҳоҷират оғоз мекунад, аммо нусхабардорӣ ҳоло ҳам бо рамзи кӯҳна аст; Баъзе DDL ё чизи дигар тавассути такрор ба он ҷо меоянд ва код танҳо аз ҳам ҷудо мешавад, зеро он ба назар гирифта намешавад. Дар натиҷа, тартиби навсозӣ барои маъмурон дар варақи A4 гузошта шуд: такрорро қатъ кунед, ин навсозӣ кунед, такрориро фаъол кунед, дар ин ҷо хомӯш кунед, дар он ҷо навсозӣ кунед. Кобус!

Дар натиҷа, ҳоло мо аксар вақт кӯшиш мекунем, ки дар Луа ҳеҷ коре накунем. Танҳо iproto (протоколи дуӣ барои ҳамкорӣ бо сервер) -ро истифода баред ва ҳамин тавр. Шояд ин кам будани дониш дар байни таҳиягарон бошад, аммо аз ин нуқтаи назар система мураккаб аст.

Мо на хамеша кур-курона ба ин сценария пайравй мекунем. Имрӯз мо сиёҳу сафед надорем: ё ҳама чиз дар Луа аст, ё ҳама чиз дар Go аст. Мо аллакай фаҳмидем, ки чӣ тавр мо онҳоро муттаҳид карда метавонем, то дертар бо мушкилоти муҳоҷират дучор нашавем.

Tarantool ҳоло дар куҷост?
Tarantool дар хидмат барои ҳисоб кардани арзиши ниҳоии мол бо назардошти купонҳои тахфиф, ки бо номи "Промоутер" маъруф аст, истифода мешавад. Тавре ки ман қаблан гуфтам, ӯ ҳоло ба нафақа мебарояд: ба ҷои ӯ хидмати каталоги нав бо нархҳои пешакӣ ҳисобшуда иваз карда мешавад, аммо шаш моҳ пеш ҳама ҳисобҳо дар Promotizer анҷом дода шуданд. Пештар нисфи мантики он ба забони луа навишта шуда буд. Ду сол пеш хидматрасонӣ ба як анбор табдил дода шуд ва мантиқ дар Go аз нав навишта шуд, зеро механикаи тахфифҳо каме тағир ёфта буд ва хидмат кор намекунад.

Яке аз хидматҳои муҳимтарин профили корбар аст. Яъне ҳамаи корбарони Wildberries дар Tarantool нигоҳ дошта мешаванд ва тақрибан 50 миллиони онҳо вуҷуд доранд.
Мувофиқи RPS, Промоутер як вақт пешсаф буд, ки ба 6 ҳазор дархост расид. Дар як вакт мо 50—60 нусха доштем. Ҳоло пешсаф дар RPS профилҳои корбарон, тақрибан 12 ҳазор аст.Ин хидмат sharding фармоиширо истифода мебарад, ки аз рӯи диапазонҳои ID-и корбар тақсим шудааст. Хизмат ба зиёда аз 20 дастгох хизмат мерасонад, вале ин хеле зиёд аст, мо захирахои чудошударо кам карданием, зеро барои он иктидори 4—5 дастгох кифоя аст.

Хидмати сессия аввалин хидмати мо дар vshard ва Cartridge мебошад. Насб кардани vshard ва навсозии Картридж аз мо каме кӯшишро талаб кард, аммо дар ниҳоят ҳама чиз кор кард.

Хизматрасонии намоиши баннерҳои гуногун дар вебсайт ва замимаи мобилӣ яке аз аввалинҳоест, ки мустақиман дар Tarantool бароварда шуд. Ин хадамот бо он чолиби диккат аст, ки он 6-7 сол дорад, он то хол дар кор аст ва боре аз нав ба кор андохта нашудааст. Репликатсияи Master-Master истифода шуд. Ҳеҷ чиз ҳеҷ гоҳ вайрон нашудааст.

Намунаи истифодаи Tarantool барои функсияи истинодҳои зуд дар системаи анбор барои зуд тафтиш кардани маълумот дар баъзе ҳолатҳо вуҷуд дорад. Мо кӯшиш кардем, ки Redis-ро барои ин истифода барем, аммо маълумот дар хотира назар ба Tarantool ҷои бештарро ишғол кард.

Хидматҳои рӯйхати интизорӣ, обунаҳои муштариён, ҳикояҳои муосир ва молҳои ба таъхир гузошташуда низ бо Tarantool кор мекунанд. Хизматрасонии охирин дар хотира тақрибан 120 ГБ-ро мегирад. Ин хидматрасонии ҳамаҷонибаи дар боло зикршуда мебошад.

хулоса

Ба шарофати индексҳои дуюмдараҷа дар якҷоягӣ бо арзиши калидӣ ва транзаксия, Tarantool барои меъмории ба микросервисҳо асосёфта хеле мувофиқ аст. Бо вуҷуди ин, мо ҳангоми ворид кардани тағирот ба хидматҳо бо мантиқи зиёде дар Луа ба мушкилот дучор шудем - хидматҳо аксар вақт кор намекарданд. Мо инро бартараф карда натавонистем ва бо мурури замон мо ба омезиши гуногуни Луа ва Го омадем: мо медонем, ки як забонро дар куҷо истифода кунем ва забони дигарро дар куҷо истифода кунем.

Дар ин мавзӯъ боз чӣ хондан лозим аст

Манбаъ: will.com

Илова Эзоҳ