Озмоиши автоматии хидматрасонии микросервисҳо дар Docker барои ҳамгироии пайваста

Дар лоиҳаҳои марбут ба рушди меъмории микросервис, CI/CD аз категорияи имконияти гуворо ба категорияи зарурати таъҷилӣ мегузарад. Санҷиши автоматикунонидашуда қисми ҷудонашавандаи ҳамгироии муттасил мебошад, ки муносибати босалоҳият ба он метавонад ба даста шомҳои зиёди гуворо бо оила ва дӯстон диҳад. Дар акси ҳол, лоиҳа ҳеҷ гоҳ анҷом наёбад.

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

Ҳамаи ин ва каме бештарро тавассути санҷиши тамоми микросервис дар контейнери Docker ҳал кардан мумкин аст. Бартарии бешубҳа барои таъмини дурустии санҷишҳо дар он аст, ки ҳамон тасвирҳои Docker, ки ба истеҳсолот ворид мешаванд, санҷида мешаванд.

Автоматикунонии ин равиш як қатор мушкилотро ба миён меорад, ки ҳалли онҳо дар зер тавсиф карда мешавад:

  • зиддиятҳои вазифаҳои мувозӣ дар як мизбони докер;
  • ихтилофи идентификаторҳо дар базаи маълумот ҳангоми такрори санҷишҳо;
  • мунтазири омода шудани микросервисҳо;
  • якҷоя ва баровардани гузоришҳо ба системаҳои беруна;
  • санҷиши дархостҳои содиротии HTTP;
  • санҷиши веб-сокет (бо истифода аз SignalR);
  • санҷиши аутентификатсия ва иҷозати OAuth.

Ин мақола дар асоси сухани ман дар SECR 2019. Ҳамин тавр, барои онҳое, ки барои хондан танбал ҳастанд, дар ин ҷо сабти нутқ аст.

Озмоиши автоматии хидматрасонии микросервисҳо дар Docker барои ҳамгироии пайваста

Дар ин мақола ман ба шумо мегӯям, ки чӣ тавр истифода бурдани скрипт барои иҷро кардани хидмати санҷишӣ, пойгоҳи додаҳо ва хидматҳои Amazon AWS дар Docker, сипас дар Postman озмоишҳо ва пас аз анҷом додани онҳо контейнерҳои сохташударо қатъ ва нест кунед. Ҳар дафъае, ки код тағир меёбад, санҷишҳо иҷро карда мешаванд. Бо ин роҳ, мо боварӣ ҳосил мекунем, ки ҳар як версия бо пойгоҳи додаҳо ва хидматҳои AWS дуруст кор мекунад.

Як скрипт ҳам аз ҷониби худи таҳиягарон дар мизи кории Windows ва сервери Gitlab CI зери Linux идора карда мешавад.

Барои асоснок кардан, ҷорӣ намудани санҷишҳои нав набояд насби абзорҳои иловагиро на дар компютери таҳиягар ё дар сервере, ки санҷишҳо аз рӯи супориш иҷро мешаванд, талаб накунад.Docker ин мушкилотро ҳал мекунад.

Санҷиш бояд дар сервери маҳаллӣ бо сабабҳои зерин иҷро карда шавад:

  • Шабака ҳеҷ гоҳ комилан боэътимод нест. Аз ҳазор дархост метавонад яктоаш ноком шавад;
    Дар ин сурат санҷиши автоматӣ кор намекунад, кор қатъ мешавад ва шумо бояд сабабро дар журналҳо ҷустуҷӯ кунед;
  • Дархостҳои хеле зуд-зуд аз ҷониби баъзе хидматҳои тарафи сеюм иҷозат дода намешаванд.

Илова бар ин, истифодаи стенд номатлуб аст, зеро:

  • Стендро на танҳо тавассути коди бад, ки дар он кор мекунад, балки инчунин бо маълумоте, ки коди дуруст коркард карда наметавонад, шикастан мумкин аст;
  • Новобаста аз он ки мо чӣ қадар кӯшиш кунем, ки ҳамаи тағиротҳои дар давоми худи санҷиш ба амаломадаро баргардонем, чизе метавонад хато кунад (дар акси ҳол, чаро санҷиш?).

Дар бораи лоиҳа ва ташкили раванд

Ширкати мо як барномаи интернетии микросервисро таҳия кардааст, ки дар Docker дар абри Amazon AWS кор мекунад. Дар лоиҳа аллакай санҷишҳои воҳидҳо истифода мешуданд, аммо аксар вақт хатогиҳо рух медоданд, ки санҷишҳои воҳидҳо ошкор накарданд. Зарур буд, ки тамоми микросервисро дар якҷоягӣ бо пойгоҳи додаҳо ва хидматҳои Amazon озмоиш кунед.

Лоиҳа як раванди ҳамгироии доимии стандартиро истифода мебарад, ки санҷиши хидматрасонии микросервисро бо ҳар як ӯҳдадорӣ дар бар мегирад. Пас аз таъини вазифа, таҳиякунанда ба микросервис тағирот ворид мекунад, онро дастӣ месанҷад ва ҳама санҷишҳои автоматии дастрасро иҷро мекунад. Агар лозим бошад, таҳиякунанда санҷишҳоро тағир медиҳад. Агар ягон мушкилот пайдо нашавад, ба филиали ин масъала ӯҳдадор карда мешавад. Пас аз ҳар як иҷро, санҷишҳо ба таври худкор дар сервер иҷро карда мешаванд. Муттаҳидшавӣ ба як филиали умумӣ ва оғози санҷишҳои автоматӣ дар он пас аз баррасии бомуваффақият сурат мегирад. Агар санҷишҳо дар филиали муштарак гузаранд, хидмат дар муҳити санҷишӣ дар Amazon Elastic Container Service (стансия) ба таври худкор нав карда мешавад. Стенд барои ҳама таҳиягарон ва озмоишгарон зарур аст ва онро вайрон кардан мувофиқ нест. Озмоишгарон дар ин муҳит ислоҳ ё хусусияти навро тавассути санҷишҳои дастӣ тафтиш мекунанд.

Архитектураи лоиҳа

Озмоиши автоматии хидматрасонии микросервисҳо дар Docker барои ҳамгироии пайваста

Барнома аз зиёда аз даҳ хидмат иборат аст. Баъзеи онҳо дар .NET Core ва баъзеи онҳо дар NodeJs навишта шудаанд. Ҳар як хидмат дар як контейнери Docker дар Amazon Elastic Container Service кор мекунад. Ҳар як пойгоҳи додаҳои Postgres-и худро дорад ва баъзеҳо инчунин Redis доранд. Пойгоҳи маълумоти умумӣ вуҷуд надорад. Агар якчанд хадамот ба як маълумот ниёз дошта бошанд, пас ин маълумот ҳангоми тағирёбанда ба ҳар яке аз ин хидматҳо тавассути SNS (Simple Notification Service) ва SQS (Amazon Simple Queue Service) интиқол дода мешавад ва хидматҳо онро дар пойгоҳи додаҳои алоҳидаи худ нигоҳ медоранд.

SQS ва SNS

SQS ба шумо имкон медиҳад, ки бо истифода аз протоколи HTTPS паёмҳоро ба навбат гузоред ва паёмҳоро аз навбат хонед.

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

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

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

Озмоиши автоматии хидматрасонии микросервисҳо дар Docker барои ҳамгироии пайваста

Дарвозаи API

Аксарияти хидматҳо мустақиман аз Интернет дастрас нестанд. Дастрасӣ тавассути API Gateway аст, ки ҳуқуқҳои дастрасиро тафтиш мекунад. Ин хидмати мо низ аст ва барои он низ озмоишҳо мавҷуданд.

Огоҳиҳо дар вақти воқеӣ

Барнома истифода мебарад SignalRбарои нишон додани огоҳиномаҳо дар вақти воқеӣ ба корбар. Ин дар хидмати огоҳӣ амалӣ карда мешавад. Он мустақиман аз Интернет дастрас аст ва худаш бо OAuth кор мекунад, зеро дар муқоиса бо ҳамгироии OAuth ва хидмати огоҳӣ сохтани дастгирии розеткаҳои веб дар Gateway ғайри қобили амал буд.

Усули маъруфи санҷиш

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

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

Махзани маълумот дар хотира яке аз DBMS мебошад, ки онро Entity Framework дастгирӣ мекунад. Он махсус барои озмоиш сохта шудааст. Маълумот дар чунин пойгоҳи додаҳо танҳо то он даме, ки раванди истифодаи он қатъ карда мешавад, нигоҳ дошта мешавад. Он эҷод кардани ҷадвалҳоро талаб намекунад ва тамомияти маълумотро тафтиш намекунад.

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

Чӣ гуна бояд Postgres-ро ба таври худкор оғоз ва анҷом додани муҳоҷират ҳангоми гузаронидани санҷиш дар мақолаи Microsoft нишон дода нашудааст. Ҳалли ман ин корро мекунад ва илова бар ин, ягон коди махсус барои санҷишҳо ба худи микросервис илова намекунад.

Биёед ба ҳалли масъала гузарем

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

Муайян кардани муҳити санҷиш

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

  • Хизматрасонии озмоишшавандаро барои муҳити маҳаллӣ танзим кунед, тафсилотро барои пайвастшавӣ ба пойгоҳи додаҳо ва AWS дар тағирёбандаҳои муҳити зист муайян кунед;
  • Postgres-ро оғоз кунед ва интиқолро тавассути иҷро кардани Liquibase иҷро кунед.
    Дар МБМ-ҳои релятсионӣ пеш аз навиштани маълумот ба базаи маълумот, шумо бояд схемаи додаҳо, ба ибораи дигар, ҷадвалҳо созед. Ҳангоми навсозии барнома, ҷадвалҳо бояд ба шакле, ки версияи нав истифода мешавад ва беҳтараш бе талафи маълумот оварда шаванд. Инро муҳоҷират меноманд. Эҷоди ҷадвалҳо дар базаи ибтидоӣ холӣ як ҳолати махсуси муҳоҷират аст. Муҳоҷират метавонад дар худи барнома сохта шавад. Ҳам .NET ва ҳам NodeJS чаҳорчӯбаи муҳоҷират доранд. Дар ҳолати мо, бо сабабҳои амниятӣ, хидматрасониҳои хурд аз ҳуқуқи тағир додани схемаи додаҳо маҳрум карда мешаванд ва интиқол бо истифода аз Liquibase анҷом дода мешавад.
  • Amazon LocalStack-ро оғоз кунед. Ин татбиқи хидматҳои AWS барои кор дар хона мебошад. Барои LocalStack дар Docker Hub як тасвири омода мавҷуд аст.
  • Скриптро барои эҷоди объектҳои зарурӣ дар LocalStack иҷро кунед. Скриптҳои Shell AWS CLI-ро истифода мебаранд.

Барои санҷиш дар лоиҳа истифода мешавад хаткашон. Он қаблан вуҷуд дошт, аммо он дастӣ ба кор андохта шуд ва замимаеро, ки аллакай дар стенд ҷойгир карда шудааст, санҷид. Ин асбоб ба шумо имкон медиҳад, ки дархостҳои худсаронаи HTTP(S) эҷод кунед ва санҷед, ки ҷавобҳо ба интизориҳо мувофиқанд ё не. Дархостҳо дар маҷмӯа муттаҳид карда мешаванд ва тамоми маҷмӯаро метавон иҷро кард.

Озмоиши автоматии хидматрасонии микросервисҳо дар Docker барои ҳамгироии пайваста

Санҷиши автоматӣ чӣ гуна кор мекунад?

Ҳангоми санҷиш ҳама чиз дар Docker кор мекунад: хидмати озмоишшуда, Postgres, абзори муҳоҷират ва Postman, дурусттар версияи консолии он - Newman.

Docker як қатор мушкилотро ҳал мекунад:

  • Истиқлолият аз конфигуратсияи мизбон;
  • Насб кардани вобастагӣ: Docker тасвирҳоро аз Docker Hub зеркашӣ мекунад;
  • Баргардонидани система ба ҳолати аввалааш: танҳо хориҷ кардани контейнерҳо.

Docker-ташкил контейнерҳоро ба як шабакаи виртуалӣ, ки аз Интернет ҷудо карда шудааст, муттаҳид мекунад, ки дар он контейнерҳо ҳамдигарро аз рӯи номҳои домен пайдо мекунанд.

Санҷиш аз ҷониби скрипти shell идора карда мешавад. Барои санҷиш дар Windows мо git-bash-ро истифода мебарем. Ҳамин тариқ, як скрипт барои Windows ва Linux кифоя аст. Git ва Docker аз ҷониби ҳамаи таҳиягарон дар лоиҳа насб карда мешаванд. Ҳангоми насб кардани Git дар Windows, git-bash насб карда мешавад, бинобар ин ҳама инро доранд.

Скрипт қадамҳои зеринро иҷро мекунад:

  • Сохтани тасвирҳои докер
    docker-compose build
  • Оғози пойгоҳи додаҳо ва LocalStack
    docker-compose up -d <контейнер>
  • Муҳоҷирати пойгоҳи додаҳо ва омодасозии LocalStack
    docker-compose run <контейнер>
  • Оғози хидмат дар зери санҷиш
    docker-compose up -d <сервис>
  • Гузаронидани санҷиш (Ньюман)
  • Ҳама контейнерҳоро қатъ кунед
    docker-compose down
  • Интишори натиҷаҳо дар Slack
    Мо сӯҳбате дорем, ки дар он паёмҳо бо аломати сабз ё салиби сурх ва истинод ба гузоришҳо мераванд.

Тасвирҳои зерини Docker дар ин қадамҳо иштирок мекунанд:

  • Хидмате, ки санҷида мешавад, ҳамон тасвирест, ки барои истеҳсолот аст. Конфигуратсия барои санҷиш тавассути тағирёбандаҳои муҳити зист аст.
  • Барои Postgres, Redis ва LocalStack тасвирҳои тайёр аз Docker Hub истифода мешаванд. Инчунин барои Liquibase ва Newman тасвирҳои тайёр мавҷуданд. Мо скелети худро дар скелети онҳо сохта, файлҳои худро дар он ҷо илова мекунем.
  • Барои омода кардани LocalStack, шумо тасвири тайёри AWS CLI-ро истифода мебаред ва тасвиреро эҷод мекунед, ки дар асоси он скрипт дорад.

Истифодабарӣ ҳаҷми, ба шумо лозим нест, ки тасвири Docker созед, танҳо барои илова кардани файлҳо ба контейнер. Аммо, ҳаҷмҳо барои муҳити мо мувофиқ нестанд, зеро худи вазифаҳои Gitlab CI дар контейнерҳо иҷро мешаванд. Шумо метавонед Docker-ро аз чунин контейнер идора кунед, аммо ҳаҷми танҳо ҷузвдонҳоро аз системаи ҳост насб кунед, на аз контейнери дигар.

Мушкилоте, ки шумо метавонед дучор шавед

Интизори омодагӣ

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

Ин мушкилот баъзан бо истифода аз скрипт ҳал карда мешавад мунтазири он.ш, ки имкони таъсиси пайвасти TCP-ро интизор аст. Аммо, LocalStack метавонад хатогии 502 Bad Gateway -ро партофт. Илова бар ин, он аз бисёр хидматҳо иборат аст ва агар яке аз онҳо омода бошад, дар бораи дигарон чизе намегӯяд.

ҳалли: Скриптҳои таъминкунандаи LocalStack, ки интизори 200 посух аз SQS ва SNS мебошанд.

Муноқишаҳои вазифаҳои параллелӣ

Якчанд санҷишҳо метавонанд дар як ҳости Docker ҳамзамон иҷро шаванд, аз ин рӯ номҳои контейнер ва шабака бояд беназир бошанд. Гузашта аз ин, санҷишҳо аз шохаҳои гуногуни як хадамот низ метавонанд ҳамзамон иҷро шаванд, аз ин рӯ навиштани номи онҳо дар ҳар як файли эҷод кифоя нест.

ҳалли: Скрипт тағирёбандаи COMPOSE_PROJECT_NAME-ро ба арзиши беназир муқаррар мекунад.

Хусусиятҳои Windows

Ҳангоми истифодаи Docker дар Windows, як қатор чизҳое ҳастанд, ки ман мехоҳам ба шумо ишора кунам, зеро ин таҷрибаҳо барои фаҳмидани он ки чаро хатогиҳо рух медиҳанд, муҳиманд.

  1. Скриптҳои Shell дар контейнер бояд охири сатри Linux дошта бошанд.
    Рамзи қабати CR хатои синтаксис аст. Аз паёми хатогӣ фаҳмидан душвор аст, ки ин ҳолат аст. Ҳангоми таҳрири чунин скриптҳо дар Windows ба шумо муҳаррири матнии мувофиқ лозим аст. Илова бар ин, системаи идоракунии версия бояд дуруст танзим карда шавад.

Ин аст, ки git конфигуратсия карда мешавад:

git config core.autocrlf input

  1. Git-bash папкаҳои стандартии Linux-ро тақлид мекунад ва ҳангоми занг задан ба файли exe (аз ҷумла docker.exe) роҳҳои мутлақи Linux-ро бо роҳҳои Windows иваз мекунад. Аммо, ин барои роҳҳое, ки дар мошини маҳаллӣ нестанд (ё роҳҳо дар контейнер) маъно надорад. Ин рафторро ғайрифаъол кардан мумкин нест.

ҳалли: ба оғози роҳ хатти иловагӣ илова кунед: //bin ба ҷои /bin. Linux ин гуна роҳҳоро дарк мекунад; барои он, якчанд слэш бо як аст. Аммо git-bash ин гуна роҳҳоро эътироф намекунад ва кӯшиш намекунад, ки онҳоро табдил диҳад.

Натиҷаи сабт

Ҳангоми гузаронидани санҷишҳо ман мехоҳам гузоришҳоро ҳам аз Нюман ва ҳам хидмате, ки санҷида мешаванд, бубинам. Азбаски рӯйдодҳои ин гузоришҳо бо ҳам алоқаманданд, якҷоя кардани онҳо дар як консол назар ба ду файли алоҳида хеле қулайтар аст. Newman тавассути docker-compose иҷро кунед, ва ҳамин тавр баромади он дар консол ба охир мерасад. Танҳо он чизе, ки боқӣ мемонад, ин аст, ки ҳосили хидмат низ ба он ҷо меравад.

Ҳалли аслӣ ин буд Доктор-эҷод кунед байрак нест -d, аммо бо истифода аз қобилиятҳои ҷабҳа ин равандро ба замина фиристед:

docker-compose up <service> &

Ин то он даме, ки зарурати фиристодани гузоришҳо аз Docker ба хидмати тарафи сеюм кор мекард. Доктор-эҷод кунед баровардани гузоришҳоро ба консол қатъ кард. Бо вучуди ин коллектив кор кард докер замима кунед.

ҳалли:

docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<сервис>_1 &

Муноқишаи идентификатор ҳангоми такрори санҷиш

Санҷишҳо дар якчанд такрор гузаронида мешаванд. Пойгоҳи маълумот тоза карда нашудааст. Сабтҳо дар пойгоҳи додаҳо ID-ҳои беназир доранд. Агар мо идентификаторҳои мушаххасро дар дархостҳо нависед, мо дар такрори дуюм ихтилоф хоҳем дошт.

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

ҳалли: бо истифода аз скриптҳои Postman GUID эҷод кунед.

var uuid = require('uuid');
var myid = uuid.v4();
pm.environment.set('myUUID', myid);

Сипас аломатро дар дархост истифода баред {{myUUID}}, ки бо арзиши тағирёбанда иваз карда мешавад.

Ҳамкорӣ тавассути LocalStack

Агар хидмате, ки санҷида мешавад, дар навбати SQS мехонад ё менависад, пас барои тасдиқи ин, худи санҷиш низ бояд бо ин навбат кор кунад.

ҳалли: дархостҳо аз Postman ба LocalStack.

API-и хидматҳои AWS ҳуҷҷатгузорӣ шудааст, ки имкон медиҳад дархостҳо бидуни SDK анҷом дода шаванд.

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

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

Агар хадамот бояд паёмро аз навбат хонад, пас дар қадами қаблии санҷиш мо ин паёмро ба навбат менависем.

Озмоиши дархостҳои HTTP, ки аз микросервиси мавриди санҷиш сарчашма мегирад

Баъзе хидматҳо тавассути HTTP бо чизи ғайр аз AWS кор мекунанд ва баъзе хусусиятҳои AWS дар LocalStack татбиқ карда намешаванд.

ҳалли: дар ин ҳолатҳо он метавонад кӯмак кунад MockServer, ки тасвири тайёр дар Маркази докерӣ. Дархостҳо ва посухҳои интизорӣ ба онҳо тавассути дархости HTTP танзим карда мешаванд. API ҳуҷҷатгузорӣ шудааст, аз ин рӯ мо аз Postman дархост мекунем.

Санҷиши аутентификатсия ва авторизатсияи OAuth

Мо OAuth ва JSON Web Tokens (JWT). Санҷиш провайдери OAuth-ро талаб мекунад, ки мо метавонем онро ба таври маҳаллӣ иҷро кунем.

Ҳама ҳамкории байни хидмат ва провайдери OAuth ба ду дархост рост меояд: аввал, конфигуратсия дархост карда мешавад /.конфигуратсияи хуб маълум/openid, ва он гоҳ калиди ҷамъиятӣ (JWKS) дар суроғаи конфигуратсия дархост карда мешавад. Ҳамаи ин мундариҷаи статикӣ аст.

ҳалли: Провайдери озмоишии мо OAuth сервери мундариҷаи статикӣ ва ду файл дар он аст. Токен як бор тавлид мешавад ва ба Git дода мешавад.

Хусусиятҳои санҷиши SignalR

Почтачӣ бо вебсокетҳо кор намекунад. Барои санҷиши SignalR асбоби махсус сохта шудааст.

Мизоҷи SignalR метавонад на танҳо як браузер бошад. Барои он дар зери .NET Core китобхонаи муштарӣ мавҷуд аст. Мизоҷ, ки дар .NET Core навишта шудааст, пайвастшавӣ муқаррар мекунад, тасдиқ карда мешавад ва пайдарпайии мушаххаси паёмҳоро интизор аст. Агар паёми ғайричашмдошт гирифта шавад ё пайвастшавӣ қатъ шавад, муштарӣ бо рамзи 1 мебарояд. Агар паёми охирини интизорӣ гирифта шавад, муштарӣ бо рамзи 0 мебарояд.

Нюман ҳамзамон бо муштарӣ кор мекунад. Якчанд муштариён барои тафтиш кардани он, ки паёмҳо ба ҳар касе, ки ба онҳо эҳтиёҷ доранд, фиристода мешаванд.

Озмоиши автоматии хидматрасонии микросервисҳо дар Docker барои ҳамгироии пайваста

Барои кор кардани муштариёни сершумор, интихобро истифода баред --миқёс дар сатри фармони docker-compose.

Пеш аз кор кардан, скрипти Postman интизор аст, ки ҳама муштариён пайваст шаванд.
Мо аллакай бо мушкили интизории пайвастшавӣ дучор шудем. Аммо серверҳо буданд ва ин ҷо мизоҷ аст. Муносибати дигар лозим аст.

ҳалли: мизочон дар контейнер механизмро истифода мебарад Тандурустӣба скрипт дар мизбон дар бораи вазъи он хабар диҳад. Муштарӣ файлро дар роҳи мушаххас эҷод мекунад, бигӯед /healthcheck, баробари барқарор шудани пайваст. Скрипти HealthCheck дар файли докер чунин менамояд:

HEALTHCHECK --interval=3s CMD if [ ! -e /healthcheck ]; then false; fi

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

Пас аз анҷоми Нюман, скрипт тафтиш мекунад, ки ҳама контейнерҳо бо муштарӣ бо рамзи 0 қатъ карда шудаанд.

Хушбахтӣ вуҷуд дорад

Пас аз он ки мо душвориҳои дар боло тавсифшударо паси сар кардем, мо як қатор санҷишҳои устувори давиданро доштем. Дар санҷишҳо, ҳар як хидмат ҳамчун як воҳиди ягона кор мекунад, ки бо пойгоҳи додаҳо ва Amazon LocalStack ҳамкорӣ мекунад.

Ин санҷишҳо як гурӯҳи 30+ таҳиягаронро аз хатогиҳо дар барнома бо ҳамкории мураккаби 10+ микросервисҳо бо густариши зуд-зуд муҳофизат мекунанд.

Манбаъ: will.com

Илова Эзоҳ