Аммо вақт ба пеш ҳаракат мекард ва шумораи дархостҳо дар баробари он пеш мерафт ва баъзан RPS-ро аз имконоти мо берун мебурд. Бо ба бозор ворид шудани кишварҳои ИДМ, сарбории протсессори пойгоҳи додаҳои монолитии аввал аз 90% паст нарафт ва RPS дар сатҳи 2400 боқӣ монд. Ва инҳо на танҳо селекторҳои хурд, балки дархостҳои вазнин бо як қатор чекҳо ва JOIN-ҳо, ки метавонанд тақрибан нисфи маълумотро дар заминаи IO калон иҷро кунанд.
Вақте ки фурӯши пурраи Ҷумъаи сиёҳ дар саҳна пайдо шуд - ва Wildberries яке аз аввалинҳо буд, ки онҳоро дар Русия баргузор кард - вазъ комилан ғамгин шуд. Охир, бори ин гуна рузхо се баробар меафзояд.
Оҳ, ин "замонҳои монолитӣ"! Ман боварӣ дорам, ки шумо ба ин монанд дучор шудаед ва шумо то ҳол намефаҳмед, ки чӣ тавр ин бо шумо рӯй дода метавонад.
Шумо чӣ кор карда метавонед - мӯд ба технология хос аст. Тақрибан 5 сол пеш, мо маҷбур шудем, ки яке аз ин модулҳоро дар шакли як сайти мавҷуда дар сервери .NET ва MS SQL, ки тамоми мантиқи худи сайтро бодиққат нигоҳ медошт, аз нав баррасӣ кунем. Ман онро чунон бодиққат нигоҳ доштам, ки арра кардани чунин монолит як лаззати тӯлонӣ ва на он қадар осон буд.
Нишондиҳандаи хурд.
Пойгоҳи хидматрасонӣ аз 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 ҳоло дар куҷост?
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 истифода шуд. Ҳеҷ чиз ҳеҷ гоҳ вайрон нашудааст.