Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

19 сентябрь дар Москва баргузор гардид аввалин вохӯрии мавзӯӣ HUG (Highload++ User Group), ки ба хидматрасонии хурд бахшида шуда буд. Муаррифии "Фаъолияти микросервисҳо: андоза муҳим аст, ҳатто агар шумо Кубернетҳо дошта бошед" баргузор шуд, ки дар он мо таҷрибаи густурдаи Флантро дар амалисозии лоиҳаҳо бо меъмории микросервис мубодила кардем. Пеш аз ҳама, он барои ҳама таҳиягароне муфид хоҳад буд, ки дар бораи истифодаи ин равиш дар лоиҳаи ҳозира ё ояндаи худ фикр мекунанд.

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Муаррифӣ видеои гузориш (50 дақиқа, хеле иттилоотӣ аз мақола), инчунин иқтибос аз он дар шакли матн.

Эзоҳ: Видео ва презентатсия низ дар охири ин паём дастрас аст.

Муқаддима

Одатан хикояи хуб ибтидо, сюжети асосй ва резолюция дорад. Ин гузориш бештар ба муқаддима монанд аст ва аз ин рӯ, фоҷиабор аст. Инчунин қайд кардан муҳим аст, ки он нуқтаи назари бегонаро дар бораи хидматрасониҳои хурд таъмин мекунад. истисмор.

Ман бо ин график оғоз мекунам, ки муаллифи он (дар соли 2015) шуд Мартин Фаулер:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Он нишон медиҳад, ки чӣ тавр дар сурати истифодаи монолитӣ, ки ба арзиши муайян мерасад, ҳосилнокӣ ба паст шудан оғоз мекунад. Микросервисҳо бо он фарқ мекунанд, ки ҳосилнокии ибтидоӣ бо онҳо камтар аст, аммо бо зиёд шудани мураккабӣ, таназзули самаранокӣ барои онҳо он қадар назаррас нест.

Ман ба ин график барои истифодаи Kubernetes илова мекунам:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Чаро як барнома бо хидматрасониҳои хурд беҳтар аст? Зеро чунин меъморӣ нисбат ба меъморӣ талаботи ҷиддиро ба миён мегузорад, ки дар навбати худ бо имкониятҳои Кубернетес комилан фаро гирифта шудаанд. Аз тарафи дигар, баъзе аз ин функсияҳо барои монолит муфид хоҳанд буд, хусусан аз он сабаб, ки монолити маъмулӣ имрӯз маҳз як монолит нест (тафсилот баъдтар дар гузориш дода мешавад).

Тавре ки шумо мебинед, графики ниҳоӣ (вақте ки ҳам барномаҳои монолитӣ ва ҳам микросервис дар инфрасохтор бо Kubernetes ҳастанд) аз диаграммаи аслӣ чандон фарқ намекунад. Минбаъд мо дар бораи барномаҳое, ки бо истифода аз Kubernetes кор мекунанд, сӯҳбат хоҳем кард.

Микросервисҳои муфид ва зараровар

Ва ин аст идеяи асосӣ:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Чист одатан меъмории microservice? Он бояд ба шумо фоидаи воқеӣ оварад, самаранокии кори шуморо зиёд кунад. Агар ба график баргардем, ин аст:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Агар шумо ба вай занг занед муфид, он гоҳ дар тарафи дигари график хоҳад буд зараровар microservices (ба кор халал мерасонад):

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Бозгашт ба «ғояи асосӣ»: оё ман умуман ба таҷрибаи худ эътимод дорам? Аз аввали соли равон ман назар кардам 85 лоиҳа. На ҳамаи онҳо микросервисҳо буданд (тақрибан аз сеяк то нисфи онҳо чунин меъморӣ доштанд), аммо ин ҳоло ҳам шумораи зиёд аст. Мо (ширкати Flant) ҳамчун аутсорсингҳо тавонистем доираи васеи барномаҳоро ҳам дар ширкатҳои хурд (бо 5 таҳиягар) ва ҳам дар ширкатҳои калон (~500 таҳиягар) таҳия кунем. Бартарии иловагӣ он аст, ки мо мебинем, ки ин барномаҳо дар тӯли солҳо зиндагӣ мекунанд ва инкишоф меёбанд.

Чаро хидматрасонии микроэлементҳо?

Ба савол дар бораи манфиатҳои микросервисҳо вуҷуд дорад ҷавоби хеле мушаххас аз Мартин Фаулер, ки аллакай зикр шудааст:

  1. сарҳадҳои равшани модулият;
  2. ҷойгиркунии мустақил;
  3. озодии интихоби технология.

Ман бо меъморон ва таҳиягарони нармафзор бисёр сӯҳбат кардам ва пурсидам, ки чаро онҳо ба хидматрасониҳои хурд ниёз доранд. Ва ман рӯйхати интизориҳои худро тартиб додам. Ин аст он чизе ки рӯй дод:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Агар мо баъзе нуктаҳоро «дар ҳиссиёт» тавсиф кунем, пас:

  • сарҳадҳои равшани модулҳо: дар ин ҷо мо як монолити даҳшатнок дорем ва ҳоло ҳама чиз дар анборҳои Git ба таври дақиқ ҷойгир карда мешавад, ки дар онҳо ҳама чиз "дар рафҳо" аст, гарм ва нарм омехта нестанд;
  • истиқлолияти ҷойгиркунӣ: мо метавонем хидматҳоро мустақилона паҳн кунем, то рушд тезтар пеш равад (баробари интишори хусусиятҳои нав);
  • истиқлолияти рушд: мо метавонем ин микросервисро ба як даста/таҳиягар ва онро ба дастаи дигар диҳем, ба шарофати он мо метавонем тезтар рушд кунем;
  • боэътимоднокии бештар: агар қисман таназзул ба амал ояд (аз 20 хидмати як микросервис афтода бошад), танҳо як тугма кор намекунад ва система дар маҷмӯъ корашро идома медиҳад.

Меъмории маъмулии (зараровар) микросервис

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

Мисол як мағозаи абстрактии онлайн аст, ки бо Amazon ё ҳадди аққал OZON рақобат мекунад. Архитектураи микросервиси он чунин менамояд:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Бо як қатор сабабҳо, ин микросервисҳо дар платформаҳои гуногун навишта шудаанд:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

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

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Оқибатҳои он чӣ гунаанд?

Фаулер низ чунин дорад мақола мавҷуд аст — дар бораи «пардохт» барои истифодаи микрохизматрасонӣ:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Ва мо мебинем, ки оё интизориҳои мо иҷро шуданд.

Сарҳадҳои модулҳоро равшан кунед...

аммо мо воқеан чанд хидматрасонии хурдро ислоҳ кардан лозим аст?барои паҳн кардани тағирот? Оё мо метавонем бифаҳмем, ки чӣ гуна ҳама чиз бе пайгирии тақсимшуда кор мекунад (дар ниҳоят, ҳама дархостҳо аз ҷониби нисфи хидматҳои микросервисҳо коркард карда мешаванд)?

Намуна вуҷуд дорад "пораи калони лой", ва дар ин ҷо он як пораи тақсимшуда буд. Барои тасдиқи ин, дар ин ҷо тасвири тахминии чӣ гуна сурат гирифтани дархостҳо оварда шудааст:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Истиқлолияти истиқлолият ...

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

Озодии интихоби технология...

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

Истиқлолияти рушди...

Чӣ тавр ҳалқаи санҷиширо барои тамоми барнома сохтан мумкин аст (бо ин қадар ҷузъҳо)? Аммо шумо ба ҳар ҳол лозим аст, ки онро навсозӣ кунед. Хамаи ин ба он оварда мерасонад, ки шумораи воқеии схемаҳои санҷишӣ, ки мо онро асосан дар бар гирифта метавонем, минималӣ мегардад.

Хамаи инро дар махалхо чорй кардан чй тавр аст?.. Маълум мешавад, ки аксар вакт тахиягар кори худро мустакилона, вале «тасодуфй» ичро мекунад, зеро вай мачбур мешавад, ки то барои санчиш озод шудани схема мунтазир шавад.

Миқёси ҷудогона...

Бале, аммо он дар соҳаи DBMS истифодашаванда маҳдуд аст. Дар мисоли меъмории додашуда, Кассандра мушкилот нахоҳад дошт, аммо MySQL ва PostgreSQL.

Боэътимоди бештар ...

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

Андозагирии бор...

Ин дар ҳақиқат хуб аст.

"Сабукӣ" -и хидматрасониҳои микро ...

Мо на танхо бузург дорем сарбории шабака (дархостҳо барои DNS зиёд мешаванд ва ғ.), балки инчунин аз сабаби зерпурсишҳои зиёде, ки мо оғоз кардем маълумотро такрор кунед (кэшҳои мағоза), ки ба миқдори зиёди нигоҳдорӣ оварда расонд.

Ва ин аст натиҷаи қонеъ кардани интизориҳои мо:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Аммо ин ҳама нест!

Азбаски:

  • Эҳтимол, ба мо автобуси паёмӣ лозим аст.
  • Чӣ тавр бояд дар лаҳзаи дурусти вақт нусхабардории доимӣ созад? Ягона воқеӣ хосият барои ин хомӯш кардани трафик аст. Аммо ин корро дар истехсолот чй тавр бояд кард?
  • Агар сухан дар бораи дастгирй намудани якчанд район равад, пас дар хар кадоми он ташкил намудани устуворй кори хеле мехнатталаб аст.
  • Проблемаи ба амал овардани дигаргунихои мутамарказ ба миён меояд. Масалан, агар ба мо лозим аст, ки версияи PHP-ро навсозӣ кунем, ба мо лозим меояд, ки ба ҳар як анбор итоат кунем (ва даҳҳо онҳо вуҷуд доранд).
  • Афзоиши мураккабии амалиётӣ, ғайримуқаррарӣ, экспоненсиалӣ аст.

Бо ин ҳама чӣ бояд кард?

Бо як барномаи монолитӣ оғоз кунед. Таҷрибаи Фоулер мегӯяд ки қариб ҳама барномаҳои бомуваффақияти микросервис ҳамчун як монолит оғоз ёфтанд, ки хеле калон шуданд ва сипас шикастанд. Дар баробари ин, қариб ҳама системаҳое, ки ҳамчун микросервис сохта шудаанд, дер ё зуд мушкилоти ҷиддиро аз сар мебурданд.

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

Аммо чӣ мешавад, агар мо аллакай дар ин вазъият бошем?

Қадами аввалини ҳалли ҳар як мушкилот ин аст, ки бо он розӣ шавем ва фаҳмем, ки ин мушкилот аст, мо дигар азоб кашидан намехоҳем.

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

Масалан, барои тасвири коллективӣ, ки дар боло баррасӣ шуд ...

Аз микросервисҳои шубҳанок халос шавед:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Ҳама хидматҳои хурдеро, ки барои тавлиди фронт масъуланд, муттаҳид кунед:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

... ба як хидматрасонии хурд, ки дар як забон/чаҳорчӯба (муосир ва муқаррарӣ, тавре ки шумо фикр мекунед) навишта шудааст:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Он дорои як ORM (як DBMS) ва аввал якчанд барномаҳо хоҳад буд:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

... аммо дар маҷмӯъ шумо метавонед ба он ҷо бештар интиқол диҳед ва натиҷаи зеринро ба даст оред:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

Ғайр аз он, мо дар Кубернетес ҳамаи инҳоро дар ҳолатҳои алоҳида иҷро мекунем, ки ин маънои онро дорад, ки мо ҳоло ҳам сарбориро чен карда, онҳоро алоҳида чен карда метавонем.

Барои чамъбаст кардан

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

Дар калимаи "микросервисҳо" қисми "микро" зиёдатист.. Онҳо "микро" ҳастанд, зеро онҳо аз монолитҳои азим хурдтаранд. Аммо онҳоро ҳамчун чизи хурд фикр накунед.

Ва барои андешаи ниҳоӣ, биёед ба диаграммаи аслӣ баргардем:

Микросервисҳо: Ҳаҷм муҳим аст, ҳатто агар шумо Kubernetes дошта бошед

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

Видеоҳо ва слайдҳо

Видео аз суханронӣ (~50 дақиқа; мутаассифона, он эҳсосоти сершумори меҳмононро ифода намекунад, ки асосан рӯҳияи гузоришро муайян мекунад, аммо ин тавр аст):

Муаррифии гузориш:

PS

Дигар гузоришҳо дар блоги мо:

Шумо инчунин метавонед ба нашрияҳои зерин таваҷҷӯҳ кунед:

Манбаъ: will.com

Илова Эзоҳ