Намунаҳои меъмории қулай

Эй Ҳабр!

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

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

Миқёси уфуқӣ

Нуктаи соддатарин ва маъруфтарин. Одатан, маъмултарин ду схемаи тақсимоти сарборӣ миқёси уфуқӣ ва амудӣ мебошанд. Дар аввалин парванда шумо имкон медиҳед, ки хидматҳо дар баробари кор кунанд ва ба ин васила сарбориро байни онҳо тақсим кунед. Дар дуюм шумо серверҳои пурқувваттар фармоиш медиҳед ё кодро оптимизатсия мекунед.

Масалан, ман анбори абстрактии файли абриро мегирам, яъне як аналоги OwnCloud, OneDrive ва ғайра.

Тасвири стандартии чунин схема дар зер оварда шудааст, аммо он танҳо мураккабии системаро нишон медиҳад. Дар ниҳоят, ба мо лозим аст, ки хидматҳоро бо ягон роҳ ҳамоҳанг созем. Чӣ мешавад, агар корбар файлро аз планшет захира кунад ва сипас онро аз телефон дидан мехоҳад?

Намунаҳои меъмории қулай
Фарқи байни равишҳо: дар миқёси амудӣ, мо омодаем, ки қудрати гиреҳҳоро афзоиш диҳем ва дар миқёси уфуқӣ мо омодаем гиреҳҳои навро барои тақсими сарбор илова кунем.

CQRS

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

Аввалин бонуси ин равиш қобилияти вайрон кардани пайвастшавӣ (ба маънои васеи калима) ҳангоми иҷрои дархости тӯлонӣ мебошад. Масалан, биёед як пайдарпаии кам ё камтар стандартиро гирем:

  1. Муштарӣ ба сервер дархост фиристод.
  2. Сервер муддати тӯлонии коркардро оғоз кард.
  3. Сервер ба муштарӣ бо натиҷа посух дод.

Тасаввур мекунем, ки дар банди 2 пайвастшавӣ канда шуд (ё шабака дубора пайваст шуд, ё корбар ба саҳифаи дигар рафта, пайвастро вайрон кардааст). Дар ин ҳолат, барои сервер фиристодани посух ба корбар бо маълумот дар бораи он ки маҳз чӣ кор карда шудааст, душвор хоҳад буд. Бо истифода аз CQRS, пайдарпаӣ каме фарқ мекунад:

  1. Муштарӣ ба навсозиҳо обуна шудааст.
  2. Муштарӣ ба сервер дархост фиристод.
  3. Сервер ҷавоб дод "дархост қабул шуд".
  4. Сервер бо натиҷа тавассути канал аз нуқтаи "1" посух дод.

Намунаҳои меъмории қулай

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

Ҷолиб он аст, ки рамзи коркарди паёмҳои воридотӣ ҳам барои рӯйдодҳое, ки худи муштарӣ таъсир кардааст ва ҳам барои рӯйдодҳои дигар, аз ҷумла аз муштариёни дигар яксон мешавад (на 100%).

Аммо, дар асл мо бонуси иловагӣ мегирем, зеро ҷараёни якҷониба метавонад дар услуби функсионалӣ (бо истифода аз RX ва шабеҳ) коркард карда шавад. Ва ин аллакай як плюси ҷиддӣ аст, зеро дар асл барнома метавонад комилан реактивӣ ва инчунин бо истифода аз равиши функсионалӣ бошад. Барои барномаҳои фарбеҳ, ин метавонад ба таври назаррас захираҳои рушд ва дастгирии захираҳоро сарфа кунад.

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

Сарчашмаи рӯйдодҳо

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

Аз ин ҷо мо як далели муҳимро ба даст меорем - системаи зуд паҳншуда ҳамоҳанг карда намешавад, зеро он гоҳ мо корҳоро кам мекунем. Аз тарафи дигар, мо аксар вақт ба мувофиқати муайяни байни ҷузъҳо ниёз дорем. Ва барои ин шумо метавонед равишро бо истифода баред мувофиқати ниҳоӣ, ки дар он кафолат дода мешавад, ки агар дар тӯли чанд вақт пас аз навсозии охирин ("охирон") ягон тағйироти додаҳо ба амал наояд, ҳама дархостҳо арзиши охирини навшударо бармегардонанд.

Фаҳмидани он муҳим аст, ки барои пойгоҳи додаҳои классикӣ он аксар вақт истифода мешавад мутобиқати қавӣ, ки ҳар як гиреҳ дорои маълумоти якхела аст (ин аксар вақт дар ҳолате ба даст меояд, ки транзаксия танҳо пас аз посухи сервери дуюм муқаррар карда мешавад). Дар ин ҷо бо сабаби сатҳи ҷудошавӣ баъзе истироҳатҳо мавҷуданд, аммо идеяи умумӣ бетағйир боқӣ мемонад - шумо метавонед дар ҷаҳони комилан ҳамоҳангшуда зиндагӣ кунед.

Бо вуҷуди ин, биёед ба вазифаи аввала баргардем. Агар кисми системаро бо сохтан мумкин бошад мувофиқати ниҳоӣ, пас мо метавонем диаграммаи зеринро созем.

Намунаҳои меъмории қулай

Хусусиятҳои муҳими ин равиш:

  • Ҳар як дархости воридотӣ дар як навбат ҷойгир карда мешавад.
  • Ҳангоми коркарди дархост хидмат метавонад вазифаҳоро дар навбатҳои дигар ҷойгир кунад.
  • Ҳар як ҳодисаи воридотӣ дорои идентификатор аст (ки барои нусхабардорӣ зарур аст).
  • Навбат аз чихати идеологй аз руи схемаи «фа-кат замима кардан» кор мекунад. Шумо наметавонед элементҳоро аз он хориҷ кунед ё онҳоро аз нав танзим кунед.
  • Навбат аз рӯи схемаи FIFO кор мекунад (барои тавтология бахшиш). Агар ба шумо иҷрои параллелӣ лозим бошад, пас дар як марҳила шумо бояд объектҳоро ба навбатҳои гуногун интиқол диҳед.

Хотиррасон мекунам, ки мо масъалаи нигаҳдории файлҳои онлайнро баррасӣ карда истодаем. Дар ин ҳолат, система чунин хоҳад буд:

Намунаҳои меъмории қулай

Муҳим он аст, ки хидматҳо дар диаграмма ҳатман маънои сервери алоҳида надоранд. Ҳатто раванд метавонад якхела бошад. Чизи дигар мухим аст: аз чихати идеявй ин чизхо тавре чудо карда шудаанд, ки масштаби горизонталиро ба осонй татбик кардан мумкин аст.

Ва барои ду корбар диаграмма чунин хоҳад буд (хизматрасонӣ барои корбарони гуногун бо рангҳои гуногун нишон дода шудааст):

Намунаҳои меъмории қулай

Бонусҳо аз чунин комбинатсия:

  • Хидматҳои коркарди иттилоот ҷудо карда шудаанд. Навбатҳо низ ҷудо карда шудаанд. Агар ба мо лозим ояд, ки интиқоли системаро зиёд кунем, пас мо бояд танҳо хидматҳои бештарро дар серверҳои бештар оғоз кунем.
  • Вақте ки мо аз корбар маълумот мегирем, мо набояд интизор шавем, ки маълумот пурра захира карда шавад. Баръакс, ба мо лозим меояд, ки «ок» ҷавоб диҳему баъд тадриҷан ба кор шурӯъ кунем. Ҳамзамон, навбат қуллаҳоро ҳамвор мекунад, зеро илова кардани объекти нав зуд ба амал меояд ва корбар набояд барои гузаштани пурра аз тамоми давра интизор шавад.
  • Ҳамчун мисол, ман хидмати нусхабардориро илова кардам, ки кӯшиш мекунад файлҳои якхеларо муттаҳид кунад. Агар он дар 1% ҳолатҳо муддати тӯлонӣ кор кунад, муштарӣ онро базӯр пайхас намекунад (ба боло нигаред), ки ин як плюс бузург аст, зеро аз мо дигар талаб карда намешавад, ки XNUMX% суръат ва эътимод дошта бошем.

Бо вуҷуди ин, камбудиҳо фавран намоён мешаванд:

  • Системам мо устувории катъии худро гум кардааст. Ин маънои онро дорад, ки агар, масалан, шумо ба хидматҳои гуногун обуна шавед, пас назариявӣ шумо метавонед ҳолати дигарро ба даст оред (зеро яке аз хидматҳо барои гирифтани огоҳинома аз навбати дохилӣ вақт надошта бошад). Дар натиҷаи дигар, система ҳоло вақти умумӣ надорад. Яъне, масалан, ҳама рӯйдодҳоро аз рӯи вақти расидан мураттаб кардан ғайриимкон аст, зеро соатҳои байни серверҳо метавонанд синхронӣ набошанд (илова бар ин, як вақт дар ду сервер утопия аст).
  • Ҳоло ҳеҷ гуна рӯйдодҳоро ба таври оддӣ баргардонидан мумкин нест (чунон ки метавон бо пойгоҳи додаҳо анҷом дод). Ба ҷои ин, шумо бояд як чорабинии нав илова кунед - ҳодисаи ҷуброн, ки ҳолати охиринро ба ҳолати зарурӣ иваз мекунад. Мисол аз як минтақаи шабеҳ: бидуни дубора навиштани таърих (ки дар баъзе мавридҳо бад аст), шумо наметавонед ӯҳдадориро дар git баргардонед, аммо шумо метавонед як чизи махсус созед. ӯҳдадории бозгашт, ки аслан танҳо ҳолати кӯҳнаро бармегардонад. Бо вуҷуди ин, ҳам ӯҳдадории хато ва ҳам бозгашт дар таърих боқӣ хоҳанд монд.
  • Схемаи маълумот метавонад аз як нашр ба нашр тағир ёбад, аммо рӯйдодҳои кӯҳна дигар наметавонанд ба стандарти нав нав карда шаванд (зеро воқеан воқеан наметавонанд тағир дода шаванд).

Тавре ки шумо мебинед, Event Sourcing бо CQRS хуб кор мекунад. Гузашта аз ин, татбиқи система бо навбатҳои муассир ва қулай, вале бидуни ҷудо кардани ҷараёни маълумот аллакай мушкил аст, зеро шумо бояд нуқтаҳои синхронизатсияро илова кунед, ки тамоми таъсири мусбати навбатҳоро безарар мегардонанд. Ҳарду равишро якбора татбиқ намуда, рамзи барномаро каме танзим кардан лозим аст. Дар ҳолати мо, ҳангоми фиристодани файл ба сервер, ҷавоб танҳо "OK" меояд, ки танҳо маънои онро дорад, ки "амали илова кардани файл захира шудааст". Ба таври расмӣ, ин маънои онро надорад, ки маълумот аллакай дар дигар дастгоҳҳо мавҷуд аст (масалан, хидмати нусхабардорӣ метавонад индексро аз нав барқарор кунад). Аммо, пас аз чанд вақт, муштарӣ дар услуби "файл X захира карда шуд" огоҳӣ мегирад.

Дар натиҷа:

  • Миқдори ҳолати фиристодани файл меафзояд: ба ҷои классикии "файл фиристодашуда", мо ду мегирем: "файл ба навбат дар сервер илова карда шуд" ва "файл дар анбор захира карда шудааст." Охирин маънои онро дорад, ки дастгоҳҳои дигар аллакай метавонанд ба қабули файл шурӯъ кунанд (ба далели он, ки навбатҳо бо суръати гуногун кор мекунанд).
  • Аз сабаби он, ки иттилооти пешниҳодшуда ҳоло тавассути каналҳои гуногун меояд, мо бояд барои гирифтани ҳолати коркарди файл ҳалли худро пайдо кунем. Дар натиҷа: бар хилофи дархост-ҷавоби классикӣ, муштариро ҳангоми коркарди файл аз нав оғоз кардан мумкин аст, аммо ҳолати худи ин коркард дуруст хоҳад буд. Ғайр аз он, ин ашё аслан аз қуттӣ кор мекунад. Дар натиҷа: мо ҳоло нисбат ба нокомиҳо таҳаммулпазирем.

Sharding

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

  • Файлҳоро аз рӯи намуд ҷудо кунед. Масалан, тасвирҳо/видеоҳоро метавон рамзкушоӣ кард ва формати муассиртарро интихоб кардан мумкин аст.
  • Ҳисобҳои алоҳида аз рӯи кишвар. Бо сабаби бисёр қонунҳо, ин метавонад талаб карда шавад, аммо ин схемаи меъморӣ чунин имкониятро ба таври худкор фароҳам меорад

Намунаҳои меъмории қулай

Агар шумо хоҳед, ки маълумотро аз як анбор ба дигараш интиқол диҳед, пас воситаҳои стандартӣ дигар кофӣ нестанд. Мутаассифона, дар ин ҳолат шумо бояд навбатро қатъ кунед, муҳоҷиратро анҷом диҳед ва сипас онро оғоз кунед. Дар ҳолати умумӣ, маълумотро "дар парвоз" интиқол додан мумкин нест, аммо, агар навбати ҳодиса комилан нигоҳ дошта шуда бошад ва шумо аксҳои ҳолати қаблии нигаҳдорӣ дошта бошед, мо метавонем рӯйдодҳоро ба таври зерин такрор кунем:

  • Дар Сарчашмаи рӯйдодҳо, ҳар як ҳодиса идентификатори худро дорад (идеалӣ, камнашаванда). Ин маънои онро дорад, ки мо метавонем майдонро ба анбор илова кунем - id-и элементи охирини коркардшуда.
  • Мо навбатро такрор мекунем, то ки ҳама рӯйдодҳо барои якчанд анборҳои мустақил коркард шаванд (аввал онест, ки дар он маълумот аллакай захира шудааст ва дуюмаш нав аст, вале холӣ аст). Навбати дуюм, албатта, хануз коркард нашудааст.
  • Мо навбати дуюмро оғоз мекунем (яъне мо ба такрори рӯйдодҳо шурӯъ мекунем).
  • Вақте ки навбати нав нисбатан холӣ аст (яъне фарқияти миёнаи вақти байни илова кардани элемент ва дарёфти он қобили қабул аст), шумо метавонед ба гузариш ба анбори нав шурӯъ кунед.

Чи тавре ки мебинед, дар системам мо собиткадамонаи катъй надошт ва холо хам нест. Танҳо пайвастагии ниҳоӣ вуҷуд дорад, яъне кафолати коркарди рӯйдодҳо бо як тартиб (вале эҳтимол бо таъхирҳои гуногун). Ва бо истифода аз ин, мо метавонем нисбатан ба осонӣ маълумотро бидуни қатъ кардани система ба тарафи дигари ҷаҳон интиқол диҳем.

Ҳамин тариқ, идома додани мисоли мо дар бораи нигоҳдории онлайн барои файлҳо, чунин меъморӣ аллакай ба мо як қатор мукофотҳо медиҳад:

  • Мо метавонем объектҳоро ба таври динамикӣ ба корбарон наздиктар кунем. Бо ин роҳ шумо метавонед сифати хидматро беҳтар кунед.
  • Мо метавонем баъзе маълумотро дар дохили ширкатҳо нигоҳ дорем. Масалан, корбарони Enterprise аксар вақт талаб мекунанд, ки маълумоти онҳо дар марказҳои додаҳои идорашаванда нигоҳ дошта шаванд (барои пешгирӣ кардани ихроҷи маълумот). Тавассути sharding мо метавонем инро ба осонӣ дастгирӣ кунем. Ва вазифа боз ҳам осонтар аст, агар муштарӣ абри мувофиқ дошта бошад (масалан, Azure худ мизбон кард).
  • Ва муҳимтар аз ҳама он аст, ки мо набояд ин корро кунем. Дар ниҳоят, барои оғоз кардан, мо аз як анбор барои ҳама ҳисобҳо хеле қаноатманд хоҳем буд (барои зуд ба кор оғоз кардан). Ва хусусияти асосии ин система дар он аст, ки гарчанде он васеъшаванда аст, дар марҳилаи аввал он хеле содда аст. Ба шумо лозим нест, ки фавран код нависад, ки бо як миллион навбатҳои алоҳидаи мустақил ва ғайра кор мекунад. Агар зарур бошад, дар оянда ин корро кардан мумкин аст.

Хостинги мундариҷаи статикӣ

Ин нукта метавонад хеле возеҳ ба назар расад, аммо он барои як барномаи кам ё камтар стандартӣ зарур аст. Моҳияти он оддӣ аст: ҳама мундариҷаи статикӣ на аз ҳамон сервере, ки барнома ҷойгир аст, балки аз серверҳои махсусе, ки махсус ба ин вазифа бахшида шудаанд, тақсим карда мешавад. Дар натиҷа, ин амалиётҳо зудтар иҷро мешаванд (nginx шартӣ нисбат ба сервери Java ба файлҳо зудтар ва арзонтар хизмат мерасонад). Plus меъмории CDN (Шабакаи интиқолдиҳии мундариҷа) ба мо имкон медиҳад, ки файлҳои худро ба корбарони ниҳоӣ наздиктар ҷойгир кунем, ки ин ба роҳати кор бо хидмат таъсири мусбӣ мерасонад.

Намунаи соддатарин ва стандартии мундариҷаи статикӣ маҷмӯи скриптҳо ва тасвирҳо барои вебсайт мебошад. Бо онҳо ҳама чиз оддӣ аст - онҳо пешакӣ маълуманд, пас бойгонӣ ба серверҳои CDN бор карда мешавад ва аз он ҷо онҳо ба корбарони ниҳоӣ тақсим карда мешаванд.

Аммо, дар асл, барои мундариҷаи статикӣ, шумо метавонед равишеро истифода баред, ки то андозае ба меъмории лямбда монанд аст. Биёед ба вазифаи худ баргардем (нигаҳдории файлҳои онлайн), ки дар он мо бояд файлҳоро ба корбарон паҳн кунем. Ҳалли соддатарин ин эҷод кардани хидматест, ки барои ҳар як дархости корбар тамоми санҷишҳои заруриро анҷом медиҳад (авторизатсия ва ғайра) ва сипас файлро мустақиман аз анбори мо зеркашӣ мекунад. Камбудии асосии ин равиш дар он аст, ки мундариҷаи статикӣ (ва файле, ки таҷдиди муайян дорад, воқеан мундариҷаи статикӣ аст) аз ҷониби ҳамон сервере паҳн мешавад, ки мантиқи тиҷоратро дар бар мегирад. Ба ҷои ин, шумо метавонед диаграммаи зеринро созед:

  • Сервер URL-и зеркаширо таъмин мекунад. Он метавонад аз формати file_id + калид бошад, ки дар он калид имзои хурди рақамӣ мебошад, ки ҳуқуқи дастрасӣ ба манбаро дар тӯли XNUMX соати оянда медиҳад.
  • Файл тавассути nginx оддӣ бо имконоти зерин паҳн карда мешавад:
    • Кэшкунии мундариҷа. Азбаски ин хидмат метавонад дар сервери алоҳида ҷойгир карда шавад, мо барои оянда захираи худро бо қобилияти нигоҳ доштани ҳама файлҳои охирини зеркашидашуда дар диск гузоштаем.
    • Санҷиши калид ҳангоми эҷоди пайвастшавӣ
  • Ихтиёрӣ: коркарди мундариҷаи ҷараён. Масалан, агар мо ҳамаи файлҳоро дар хидмат фишурда кунем, пас мо метавонем бевосита дар ин модул кушоданро анҷом диҳем. Дар натиҷа: Амалиёти IO дар ҷое, ки онҳо тааллуқ доранд, анҷом дода мешаванд. Архивкунанда дар Java ба осонӣ хотираи зиёди изофӣ ҷудо мекунад, аммо дубора навиштани хидмат бо мантиқи тиҷорат ба шартҳои Rust/C++ низ метавонад бесамар бошад. Дар ҳолати мо, равандҳои гуногун (ё ҳатто хидматҳо) истифода мешаванд ва аз ин рӯ мо метавонем мантиқи тиҷорат ва амалиёти IO-ро ба таври муассир ҷудо кунем.

Намунаҳои меъмории қулай

Ин схема ба паҳн кардани мундариҷаи статикӣ чандон монанд нест (зеро мо тамоми бастаи статикиро дар ҷое бор намекунем), аммо дар асл, ин равиш маҳз ба паҳн кардани додаҳои тағирнашаванда дахл дорад. Гузашта аз ин, ин схемаро ба дигар ҳолатҳое умумӣ кардан мумкин аст, ки мундариҷа на танҳо статикӣ аст, балки метавонад ҳамчун маҷмӯи блокҳои тағирнашаванда ва ҳазфнашаванда муаррифӣ карда шавад (ҳарчанд онҳо метавонанд илова карда шаванд).

Мисоли дигар (барои таҳким): агар шумо бо Jenkins/TeamCity кор карда бошед, пас шумо медонед, ки ҳарду ҳалли онҳо дар Java навишта шудаанд. Ҳардуи онҳо як раванди Java мебошанд, ки ҳам сохтани оркестр ва ҳам идоракунии мундариҷаро идора мекунанд. Махсусан, ҳардуи онҳо вазифаҳое доранд, ба монанди "интиқоли файл / ҷузвдон аз сервер". Мисол: додани артефактҳо, интиқоли коди сарчашма (вақте ки агент кодро мустақиман аз анбор зеркашӣ намекунад, аммо сервер онро барои ӯ мекунад), дастрасӣ ба гузоришҳо. Ҳамаи ин вазифаҳо бо сарбории IO фарқ мекунанд. Яъне, маълум мешавад, ки сервере, ки барои мантиқи мураккаби тиҷорат масъул аст, бояд ҳамзамон қодир бошад, ки ҷараёни зиёди маълумотро тавассути худ ба таври муассир тела диҳад. Ва ҷолибтарин он аст, ки чунин амалиётро метавон ба ҳамон nginx мувофиқи ҳамон схема таъин кард (ба истиснои он ки калиди маълумот бояд ба дархост илова карда шавад).

Аммо, агар мо ба системаи худ баргардем, мо диаграммаи шабеҳро мегирем:

Намунаҳои меъмории қулай

Тавре ки шумо мебинед, система ба таври куллӣ мураккабтар шудааст. Ҳоло он на танҳо як мини-равандест, ки файлҳоро ба таври маҳаллӣ нигоҳ медорад. Ҳоло он чизе ки талаб карда мешавад, дастгирии соддатарин, назорати версияи API ва ғайра нест. Аз ин рӯ, пас аз кашидани ҳама диаграммаҳо, беҳтар аст, ки ба таври муфассал арзёбӣ кунед, ки оё васеъшавӣ ба арзиш аст. Аммо, агар шумо хоҳед, ки системаро васеъ карда тавонед (аз ҷумла барои кор бо шумораи бештари корбарон), пас шумо бояд барои ҳалли шабеҳ равед. Аммо, дар натиҷа, система аз ҷиҳати меъморӣ барои зиёд кардани сарборӣ омода аст (қариб ҳар як ҷузъро барои миқёси уфуқӣ клон кардан мумкин аст). Системаро бе қатъ кардани он нав кардан мумкин аст (танҳо баъзе амалиётҳо каме суст мешаванд).

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

хулоса

Ҳамаи ин равишҳо қаблан маълум буданд. Худи ҳамон ВК кайҳо боз идеяи Хостинги Static Content-ро барои намоиш додани тасвирҳо истифода мебарад. Бисёре аз бозиҳои онлайнӣ нақшаи Sharding-ро барои тақсим кардани бозигарон ба минтақаҳо ё ҷудо кардани маконҳои бозӣ истифода мебаранд (агар худи ҷаҳон як бошад). Равиши манбаъҳои рӯйдодҳо дар почтаи электронӣ фаъолона истифода мешавад. Аксари барномаҳои тиҷоратӣ, ки дар он маълумот пайваста гирифта мешавад, воқеан дар равиши CQRS сохта шудаанд, то тавонанд филтр кардани маълумоти гирифташударо дошта бошанд. Хуб, миқёси уфуқӣ дар бисёр хидматҳо муддати тӯлонӣ истифода мешавад.

Аммо, муҳимтар аз ҳама, ҳамаи ин намунаҳо дар замимаҳои муосир хеле осон шудаанд (агар онҳо мувофиқ бошанд, албатта). Абрҳо фавран Sharding ва миқёси уфуқӣ пешниҳод мекунанд, ки ин аз фармоиш додани серверҳои гуногуни бахшидашуда дар марказҳои гуногуни маълумот хеле осонтар аст. CQRS хеле осонтар шудааст, агар танҳо аз сабаби рушди китобхонаҳо ба монанди RX. Тақрибан 10 сол пеш, як вебсайти нодир метавонад инро дастгирӣ кунад. Ба туфайли контейнерҳои омода бо Apache Kafka насб кардани манбаъи ҳодиса низ бениҳоят осон аст. 10 сол пеш ин як навоварӣ мебуд, ҳоло маъмул аст. Бо хостинги мундариҷаи статикӣ ҳамин тавр аст: аз сабаби технологияҳои нисбатан қулай (аз ҷумла он, ки ҳуҷҷатҳои муфассал ва пойгоҳи калони ҷавобҳо мавҷуданд), ин равиш боз ҳам соддатар шудааст.

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

Ва муҳимтар аз ҳама: лутфан ин равишҳоро истифода набаред, агар шумо як барномаи оддӣ дошта бошед. Бале, онҳо зебо ва ҷолибанд, аммо барои як сайте, ки бо сафари қуллаи 100 нафар иборат аст, шумо метавонед аксар вақт бо як монолити классикӣ ба даст оред (ҳадди аққал дар берун, ҳама чизро дар дохили он ба модулҳо тақсим кардан мумкин аст ва ғайра).

Манбаъ: will.com

Илова Эзоҳ