Ninu nkan yii, Emi yoo sọrọ nipa bii iṣẹ akanṣe ti Mo n ṣiṣẹ lori yipada lati monolith nla kan si eto awọn iṣẹ microservices kan.
Ise agbese na bẹrẹ itan rẹ ni igba pipẹ sẹhin, ni ibẹrẹ ọdun 2000. Awọn ẹya akọkọ ni a kọ ni Visual Basic 6. Ni akoko pupọ, o han gbangba pe idagbasoke ni ede yii yoo nira lati ṣe atilẹyin ni ojo iwaju, niwon IDE. ati ede tikararẹ ko ni idagbasoke. Ni opin awọn ọdun 2000, a pinnu lati yipada si C # ti o ni ileri diẹ sii. Ẹya tuntun naa ni a kọ ni afiwe pẹlu atunyẹwo ti atijọ, ni diėdiė siwaju ati siwaju sii koodu ti kọ ni .NET. Backend ni C # ni akọkọ lojutu lori faaji iṣẹ, ṣugbọn lakoko idagbasoke, awọn ile-ikawe ti o wọpọ pẹlu ọgbọn ni a lo, ati pe awọn iṣẹ ṣe ifilọlẹ ni ilana kan. Abajade jẹ ohun elo kan ti a pe ni “monolith iṣẹ.”
Ọkan ninu awọn anfani diẹ ti apapo yii ni agbara awọn iṣẹ lati pe ara wọn nipasẹ API ita. Awọn ibeere pataki wa fun iyipada si iṣẹ ti o pe diẹ sii, ati ni ọjọ iwaju, faaji microservice.
A bẹrẹ iṣẹ wa lori ibajẹ ni ayika 2015. A ko tii de ipo ti o peye - awọn ẹya tun wa ti iṣẹ akanṣe nla kan ti o nira lati pe ni monoliths, ṣugbọn wọn ko dabi awọn iṣẹ microservice boya. Sibẹsibẹ, ilọsiwaju jẹ pataki.
Emi yoo sọrọ nipa rẹ ninu nkan naa.

Awọn akoonu
Faaji ati awọn isoro ti awọn ti wa tẹlẹ ojutu
Ni ibẹrẹ, faaji naa dabi eyi: UI jẹ ohun elo lọtọ, apakan monolithic ni a kọ sinu Visual Basic 6, ohun elo NET jẹ eto awọn iṣẹ ti o jọmọ ti n ṣiṣẹ pẹlu data data nla kan.
Awọn alailanfani ti ojutu iṣaaju
Nikan ojuami ti ikuna
A ni aaye kan ti ikuna: ohun elo .NET nṣiṣẹ ni ilana kan. Ti module eyikeyi ba kuna, gbogbo ohun elo naa kuna ati pe o ni lati tun bẹrẹ. Niwọn igba ti a ṣe adaṣe nọmba nla ti awọn ilana fun awọn olumulo oriṣiriṣi, nitori ikuna ninu ọkan ninu wọn, gbogbo eniyan ko le ṣiṣẹ fun igba diẹ. Ati ninu ọran ti aṣiṣe sọfitiwia, paapaa afẹyinti ko ṣe iranlọwọ.
Isinyi ti awọn ilọsiwaju
Yi drawback jẹ dipo leto. Ohun elo wa ni ọpọlọpọ awọn alabara, ati pe gbogbo wọn fẹ lati ni ilọsiwaju ni kete bi o ti ṣee. Ni iṣaaju, ko ṣee ṣe lati ṣe eyi ni afiwe, ati gbogbo awọn alabara duro ni laini. Ilana yii jẹ odi fun awọn iṣowo nitori wọn ni lati fi mule pe iṣẹ-ṣiṣe wọn niyelori. Ati pe ẹgbẹ idagbasoke lo akoko lati ṣeto ti isinyi yii. Eyi gba akoko pupọ ati igbiyanju, ati pe ọja naa nikẹhin ko le yipada ni yarayara bi wọn yoo ti fẹran.
Suboptimal lilo ti oro
Nigba ti alejo awọn iṣẹ ni kan nikan ilana, a nigbagbogbo daakọ iṣeto ni patapata lati olupin si olupin. A fẹ lati gbe awọn iṣẹ ti o wuwo pupọ julọ lọtọ lati ma ṣe sọ awọn orisun ṣòfo ati gba iṣakoso irọrun diẹ sii lori ero imuṣiṣẹ wa.
O nira lati ṣe imuse awọn imọ-ẹrọ igbalode
Iṣoro ti o faramọ si gbogbo awọn olupilẹṣẹ: ifẹ wa lati ṣafihan awọn imọ-ẹrọ igbalode sinu iṣẹ akanṣe, ṣugbọn ko si aye. Pẹlu ojutu monolithic nla kan, imudojuiwọn eyikeyi ti ile-ikawe lọwọlọwọ, kii ṣe darukọ iyipada si ọkan tuntun, yipada si iṣẹ ṣiṣe ti kii ṣe bintin. Yoo gba akoko pipẹ lati jẹri si oludari ẹgbẹ pe eyi yoo mu awọn imoriri diẹ sii ju awọn eegun ti o padanu.
Iṣoro awọn iyipada ipinfunni
Eyi ni iṣoro to ṣe pataki julọ - a n tu awọn idasilẹ silẹ ni gbogbo oṣu meji.
Itusilẹ kọọkan yipada si ajalu gidi fun banki, laibikita idanwo ati awọn akitiyan ti awọn olupilẹṣẹ. Iṣowo naa loye pe ni ibẹrẹ ọsẹ diẹ ninu awọn iṣẹ ṣiṣe rẹ kii yoo ṣiṣẹ. Ati awọn olupilẹṣẹ loye pe ọsẹ kan ti awọn iṣẹlẹ to ṣe pataki n duro de wọn.
Gbogbo eniyan ni ifẹ lati yi ipo naa pada.
Ireti lati microservices
Oro ti irinše nigbati o ba ṣetan. Ifijiṣẹ awọn paati nigbati o ba ṣetan nipa jijẹ ojutu ati yiya sọtọ awọn ilana oriṣiriṣi.
Awọn ẹgbẹ ọja kekere. Eyi ṣe pataki nitori ẹgbẹ nla kan ti n ṣiṣẹ lori monolith atijọ jẹ soro lati ṣakoso. Iru egbe bẹẹ ni a fi agbara mu lati ṣiṣẹ ni ibamu si ilana ti o muna, ṣugbọn wọn fẹ diẹ ẹda ati ominira. Awọn ẹgbẹ kekere nikan le fun eyi.
Ipinya awọn iṣẹ ni awọn ilana lọtọ. Ó dára jùlọ, mo fẹ́ ya á sọ́tọ̀ nínú àwọn àpótí, ṣùgbọ́n ọ̀pọ̀lọpọ̀ iṣẹ́ tí a kọ sínú .NET Framework ń ṣiṣẹ́ lábẹ́ rẹ̀ nìkan. WindowsÀwọn iṣẹ́ tí a gbé kalẹ̀ lórí .NET Core ti ń farahàn báyìí, ṣùgbọ́n díẹ̀ ló ṣì wà nínú wọn.
Irọrun imuṣiṣẹ. A yoo fẹ lati darapọ awọn iṣẹ ni ọna ti a nilo rẹ, kii ṣe ọna ti koodu fi ipa mu u.
Lilo awọn imọ-ẹrọ tuntun. Eleyi jẹ awon si eyikeyi pirogirama.
Awọn iṣoro iyipada
Nitoribẹẹ, ti o ba rọrun lati fọ monolith sinu awọn iṣẹ microservices, kii yoo jẹ iwulo lati sọrọ nipa rẹ ni awọn apejọ ati kọ awọn nkan. Ọpọlọpọ awọn ipalara ni o wa ninu ilana yii;
Iṣoro akọkọ aṣoju fun julọ monoliths: isokan ti owo kannaa. Nigba ti a ba kọ monolith kan, a fẹ lati tun lo awọn kilasi wa ki a má ba kọ koodu ti ko wulo. Ati pe nigbati o ba nlọ si awọn iṣẹ microservices, eyi di iṣoro: gbogbo koodu naa ni asopọ ni wiwọ, ati pe o nira lati ya awọn iṣẹ naa.
Ni akoko ibẹrẹ iṣẹ, ibi ipamọ naa ni diẹ sii ju awọn iṣẹ akanṣe 500 ati diẹ sii ju 700 ẹgbẹrun awọn ila ti koodu. Eleyi jẹ oyimbo ńlá kan ipinnu ati keji isoro. Ko ṣee ṣe lati mu nikan ki o pin si awọn iṣẹ microservices.
Isoro kẹta - aini ti pataki amayederun. Ni otitọ, a n ṣe didakọ koodu orisun pẹlu ọwọ si awọn olupin naa.
Bii o ṣe le gbe lati monolith si awọn iṣẹ microservices
Ipese microservices
Ni akọkọ, a pinnu lẹsẹkẹsẹ fun ara wa pe iyapa ti awọn iṣẹ microservices jẹ ilana aṣetunṣe. A nilo nigbagbogbo lati dagbasoke awọn iṣoro iṣowo ni afiwe. Bii a ṣe le ṣe imuse yii ni imọ-ẹrọ jẹ iṣoro wa tẹlẹ. Nitorinaa, a pese sile fun ilana aṣetunṣe. Kii yoo ṣiṣẹ ni ọna miiran ti o ba ni ohun elo nla ati pe ko ṣetan lakoko lati tun kọ.
Awọn ọna wo ni a lo lati ya sọtọ awọn iṣẹ microservices?
Ọna akọkọ - gbe awọn modulu ti o wa tẹlẹ bi awọn iṣẹ. Ni iyi yii, a ni orire: awọn iṣẹ ti o forukọsilẹ tẹlẹ ti ṣiṣẹ nipa lilo ilana WCF. Wọ́n yà wọ́n sọ́tọ̀ sí àwọn àpéjọ. A gbe wọn lọ lọtọ, fifi ifilọlẹ kekere kan kun si kikọ kọọkan. O ti kọ ni lilo ile-ikawe Topshelf iyanu, eyiti o fun ọ laaye lati ṣiṣẹ ohun elo mejeeji bi iṣẹ kan ati bi console. Eyi jẹ irọrun fun n ṣatunṣe aṣiṣe nitori ko si awọn iṣẹ akanṣe afikun ni ojutu.
Awọn iṣẹ naa ni asopọ ni ibamu si ọgbọn iṣowo, nitori wọn lo awọn apejọ ti o wọpọ ati ṣiṣẹ pẹlu ibi ipamọ data ti o wọpọ. Wọn ko le pe wọn ni microservices ni irisi mimọ wọn. Sibẹsibẹ, a le pese awọn iṣẹ wọnyi lọtọ, ni awọn ilana oriṣiriṣi. Eyi nikan jẹ ki o ṣee ṣe lati dinku ipa wọn lori ara wọn, idinku iṣoro naa pẹlu idagbasoke ti o jọra ati aaye kan ti ikuna.
Apejọ pẹlu agbalejo jẹ laini koodu kan ni kilasi Eto naa. A tọju iṣẹ pẹlu Topshelf ni kilasi iranlọwọ.
namespace RBA.Services.Accounts.Host
{
internal class Program
{
private static void Main(string[] args)
{
HostRunner<Accounts>.Run("RBA.Services.Accounts.Host");
}
}
}
Ọna keji lati pin awọn iṣẹ microservice ni: ṣẹda wọn lati yanju awọn iṣoro titun. Ti o ba jẹ pe ni akoko kanna monolith ko dagba, eyi ti dara julọ, eyi ti o tumọ si pe a nlọ ni ọna ti o tọ. Lati yanju awọn iṣoro tuntun, a gbiyanju lati ṣẹda awọn iṣẹ lọtọ. Ti iru aye ba wa, lẹhinna a ṣẹda awọn iṣẹ “canonical” diẹ sii ti o ṣakoso ni kikun awoṣe data ti ara wọn, ibi ipamọ data lọtọ.
A, bii ọpọlọpọ, bẹrẹ pẹlu ìfàṣẹsí ati awọn iṣẹ aṣẹ. Wọn jẹ pipe fun eyi. Wọn jẹ ominira, gẹgẹbi ofin, wọn ni awoṣe data ọtọtọ. Awọn tikarawọn ko ṣe ajọṣepọ pẹlu monolith, nikan o yipada si wọn lati yanju awọn iṣoro kan. Lilo awọn iṣẹ wọnyi, o le bẹrẹ iyipada si faaji tuntun, ṣatunṣe awọn amayederun lori wọn, gbiyanju diẹ ninu awọn isunmọ ti o ni ibatan si awọn ile-ikawe nẹtiwọọki, ati bẹbẹ lọ. A ko ni awọn ẹgbẹ eyikeyi ninu agbari wa ti ko le ṣẹda iṣẹ ijẹrisi kan.
Ọna kẹta lati pin awọn iṣẹ microservicesEyi ti a lo jẹ diẹ pato si wa. Eyi ni yiyọkuro oye iṣowo lati Layer UI. Ohun elo UI akọkọ wa ni tabili tabili; Awọn olupilẹṣẹ lorekore ṣe awọn aṣiṣe ati gbe awọn apakan ti ọgbọn lọ si UI ti o yẹ ki o wa ni ẹhin ati tun lo.
Ti o ba wo apẹẹrẹ gidi kan lati koodu ti apakan UI, o le rii pe pupọ julọ ojutu yii ni imọ-ọrọ iṣowo gidi ti o wulo ni awọn ilana miiran, kii ṣe fun kikọ fọọmu UI nikan.

Awọn gidi UI kannaa jẹ nikan nibẹ ni awọn ti o kẹhin tọkọtaya ti ila. A gbe lọ si olupin naa ki o le tun lo, nitorinaa dinku UI ati iyọrisi faaji to pe.
Ọna kẹrin ati pataki julọ lati ya sọtọ awọn iṣẹ microservices, eyiti o jẹ ki o ṣee ṣe lati dinku monolith, ni yiyọkuro awọn iṣẹ ti o wa pẹlu sisẹ. Nigba ti a ba mu awọn modulu ti o wa tẹlẹ bi o ṣe jẹ, abajade kii ṣe nigbagbogbo si ifẹ awọn olupilẹṣẹ, ati pe ilana iṣowo le ti di igba atijọ niwon iṣẹ-ṣiṣe ti ṣẹda. Pẹlu atunṣe atunṣe, a le ṣe atilẹyin ilana iṣowo titun nitori awọn ibeere iṣowo n yipada nigbagbogbo. A le ṣatunṣe koodu orisun, yọ awọn abawọn ti a mọ, ati ṣẹda awoṣe data to dara julọ. Nibẹ ni o wa ọpọlọpọ awọn anfani accruing.
Yiya sọtọ awọn iṣẹ lati sisẹ jẹ asopọ inextricably si imọran ti ọrọ-ọrọ didi. Eyi jẹ imọran lati Apẹrẹ Iwakọ Aṣẹ. O tumọ si apakan ti awoṣe ibugbe ninu eyiti gbogbo awọn ofin ti ede kan jẹ asọye ni iyasọtọ. Jẹ ki a wo ipo ti iṣeduro ati awọn owo-owo bi apẹẹrẹ. A ni ohun elo monolithic, ati pe a nilo lati ṣiṣẹ pẹlu akọọlẹ naa ni iṣeduro. A nireti pe olupilẹṣẹ lati wa kilasi Account ti o wa tẹlẹ ni apejọ miiran, tọka si lati kilasi Iṣeduro, ati pe a yoo ni koodu iṣẹ. Ilana DRY yoo bọwọ fun, iṣẹ naa yoo ṣee ṣe ni iyara nipa lilo koodu to wa tẹlẹ.
Bi abajade, o han pe awọn ipo ti awọn akọọlẹ ati iṣeduro ti sopọ. Bi awọn ibeere tuntun ṣe farahan, iṣọpọ yii yoo dabaru pẹlu idagbasoke, jijẹ idiju ti iṣiro iṣowo ti o nira tẹlẹ. Lati yanju iṣoro yii, o nilo lati wa awọn aala laarin awọn àrà ninu koodu ati yọ awọn irufin wọn kuro. Fun apẹẹrẹ, ni ipo iṣeduro, o ṣee ṣe pupọ pe nọmba akọọlẹ Central Bank oni-nọmba 20 ati ọjọ ti akọọlẹ naa ti ṣii yoo to.
Lati yapa awọn ipo ti o ni opin si ara wọn ati bẹrẹ ilana ti yiya sọtọ awọn iṣẹ microservices lati ojutu monolithic, a lo ọna kan gẹgẹbi ṣiṣẹda awọn API ita laarin ohun elo naa. Ti a ba mọ pe diẹ ninu awọn module yẹ ki o di a microservice, bakan títúnṣe laarin awọn ilana, ki o si a lẹsẹkẹsẹ ṣe awọn ipe si awọn kannaa ti o je ti si miiran lopin o tọ nipasẹ awọn ipe ita. Fun apẹẹrẹ, nipasẹ REST tabi WCF.
A pinnu ni iduroṣinṣin pe a ko ni yago fun koodu ti yoo nilo awọn iṣowo pinpin. Ninu ọran wa, o wa ni irọrun pupọ lati tẹle ofin yii. A ko tii pade awọn ipo nibiti awọn iṣowo pinpin ti o muna nilo gaan - aitasera ikẹhin laarin awọn modulu jẹ to.
Jẹ ká wo ni kan pato apẹẹrẹ. A ni ero ti akọrin - opo gigun ti epo ti o ṣe ilana nkan ti “ohun elo”. O ṣẹda alabara, akọọlẹ kan ati kaadi banki ni titan. Ti o ba ṣẹda alabara ati akọọlẹ ni aṣeyọri, ṣugbọn ẹda kaadi kuna, ohun elo naa ko lọ si ipo “aṣeyọri” ati pe o wa ni ipo “kaadi ti a ko ṣẹda”. Ni ojo iwaju, iṣẹ abẹlẹ yoo gbe soke ki o pari rẹ. Eto naa ti wa ni ipo aiṣedeede fun igba diẹ, ṣugbọn a ni itẹlọrun gbogbogbo pẹlu eyi.
Ti ipo kan ba dide nigbati o jẹ dandan lati ṣafipamọ apakan data nigbagbogbo, a yoo ṣeese julọ lati lọ fun isọdọkan iṣẹ naa lati le ṣe ilana rẹ ni ilana kan.
Jẹ ki a wo apẹẹrẹ ti ipinfunni microservice kan. Bawo ni o ṣe le mu wa si iṣelọpọ lailewu? Ni apẹẹrẹ yii, a ni apakan lọtọ ti eto naa - module iṣẹ isanwo, ọkan ninu awọn apakan koodu eyiti a yoo fẹ lati ṣe microservice.

Ni akọkọ, a ṣẹda microservice nipa atunkọ koodu naa. A n ṣe ilọsiwaju diẹ ninu awọn aaye ti a ko ni idunnu pẹlu. A ṣe awọn ibeere iṣowo tuntun lati ọdọ alabara. A ṣafikun Ẹnu-ọna API si asopọ laarin UI ati ẹhin, eyiti yoo pese ifiranšẹ ipe.

Next, a tu yi iṣeto ni sinu isẹ, sugbon ni a awaoko ipinle. Pupọ julọ awọn olumulo wa tun ṣiṣẹ pẹlu awọn ilana iṣowo atijọ. Fun awọn olumulo titun, a n ṣe agbekalẹ ẹya tuntun ti ohun elo monolithic ti ko ni ilana yii mọ. Ni pataki, a ni apapo monolith kan ati microservice ti n ṣiṣẹ bi awaoko.

Pẹlu awakọ aṣeyọri, a loye pe iṣeto tuntun jẹ iṣẹ ṣiṣe nitootọ, a le yọ monolith atijọ kuro ni idogba ki o fi iṣeto tuntun silẹ ni aaye ojutu atijọ.

Ni apapọ, a lo gbogbo awọn ọna ti o wa tẹlẹ fun pipin koodu orisun ti monolith kan. Gbogbo wọn gba wa laaye lati dinku iwọn awọn ẹya ti ohun elo naa ki o tumọ wọn si awọn ile-ikawe tuntun, ṣiṣe koodu orisun to dara julọ.
Nṣiṣẹ pẹlu database
A le pin ibi ipamọ data ti o buru ju koodu orisun lọ, nitori pe kii ṣe ero ti isiyi nikan, ṣugbọn tun kojọpọ data itan.
Ipamọ data wa, bii ọpọlọpọ awọn miiran, ni idapada pataki miiran - iwọn nla rẹ. A ṣe apẹrẹ data data yii ni ibamu si ọgbọn iṣowo intricate ti monolith kan, ati awọn ibatan ti o ṣajọpọ laarin awọn tabili ti ọpọlọpọ awọn àrà aala.
Ninu ọran wa, lati gbe gbogbo awọn wahala (data nla, ọpọlọpọ awọn asopọ, nigbakan awọn aala koyewa laarin awọn tabili), iṣoro kan dide ti o waye ni ọpọlọpọ awọn iṣẹ akanṣe nla: lilo awoṣe data pinpin. A gba data lati awọn tabili nipasẹ wiwo, nipasẹ ẹda, ati firanṣẹ si awọn ọna ṣiṣe miiran nibiti o ti nilo ẹda yii. Bi abajade, a ko le gbe awọn tabili lọ sinu apẹrẹ ti o yatọ nitori wọn ti lo ni itara.
Pipin kanna si awọn ipo to lopin ninu koodu ṣe iranlọwọ fun wa ni ipinya. Nigbagbogbo o fun wa ni imọran ti o dara ti bii a ṣe fọ data naa ni ipele data data. A loye iru awọn tabili ti o jẹ ti ọrọ-ipin kan ati eyi ti si ekeji.
A lo awọn ọna agbaye meji ti ipinpin data data: pipin awọn tabili ti o wa tẹlẹ ati ipin pẹlu sisẹ.
Pipin awọn tabili ti o wa tẹlẹ jẹ ọna ti o dara lati lo ti eto data ba dara, pade awọn ibeere iṣowo, ati pe gbogbo eniyan ni idunnu pẹlu rẹ. Ni ọran yii, a le ya awọn tabili ti o wa tẹlẹ si eto lọtọ.
Ẹka kan pẹlu sisẹ ni a nilo nigbati awoṣe iṣowo ti yipada pupọ, ati pe awọn tabili ko ni itẹlọrun wa rara.
Pipin tẹlẹ tabili. A nilo lati pinnu ohun ti a yoo yapa. Laisi imọ yii, ko si ohun ti yoo ṣiṣẹ, ati nibi iyapa ti awọn ipo ti o ni opin ninu koodu yoo ran wa lọwọ. Gẹgẹbi ofin, ti o ba le loye awọn aala ti awọn àrà ninu koodu orisun, o han gbangba awọn tabili wo ni o yẹ ki o wa ninu atokọ fun ẹka naa.
Jẹ ki a fojuinu pe a ni ojutu kan ninu eyiti awọn modulu monolith meji ṣe nlo pẹlu data data kan. A nilo lati rii daju wipe nikan kan module interacts pẹlu awọn apakan ti ya tabili, ati awọn miiran bẹrẹ lati se nlo pẹlu ti o nipasẹ API. Lati bẹrẹ pẹlu, o to pe gbigbasilẹ nikan ni a ṣe nipasẹ API. Eyi jẹ ipo pataki fun wa lati sọrọ nipa ominira ti awọn iṣẹ microservices. Awọn asopọ kika le duro niwọn igba ti ko si iṣoro nla.

Igbesẹ ti o tẹle ni pe a le ya apakan ti koodu ti o ṣiṣẹ pẹlu awọn tabili ti o yapa, pẹlu tabi laisi sisẹ, sinu microservice ti o yatọ ati ṣiṣe ni ilana ti o yatọ, apoti kan. Eyi yoo jẹ iṣẹ lọtọ pẹlu asopọ si ibi ipamọ data monolith ati awọn tabili wọnyẹn ti ko ni ibatan taara si rẹ. Awọn monolith tun ṣe ibaraenisepo fun kika pẹlu apakan ti o yọkuro.

Nigbamii a yoo yọ asopọ yii kuro, iyẹn ni, data kika lati inu ohun elo monolithic lati awọn tabili ti o yapa yoo tun gbe lọ si API.

Nigbamii, a yoo yan lati ibi ipamọ data gbogbogbo awọn tabili pẹlu eyiti microservice tuntun nikan ṣiṣẹ. A le gbe awọn tabili lọ si eto lọtọ tabi paapaa si ibi ipamọ data ti ara ọtọtọ. Asopọ kika tun wa laarin microservice ati ibi ipamọ data monolith, ṣugbọn ko si nkankan lati ṣe aniyan nipa, ni iṣeto yii o le gbe laaye fun igba pipẹ.

Igbesẹ ikẹhin ni lati yọ gbogbo awọn asopọ kuro patapata. Ni idi eyi, a le nilo lati gbe data lati ibi ipamọ data akọkọ. Nigba miiran a fẹ lati tun lo diẹ ninu awọn data tabi awọn ilana ti a ṣe atunṣe lati awọn ọna ṣiṣe ita ni awọn apoti isura data pupọ. Eleyi ṣẹlẹ si wa lorekore.

Ẹka processing. Ọna yii jẹ iru pupọ si akọkọ, nikan ni ọna iyipada. Lẹsẹkẹsẹ a pin ibi-ipamọ data tuntun ati microservice tuntun ti o ṣe ajọṣepọ pẹlu monolith nipasẹ API kan. Ṣugbọn ni akoko kanna, ṣeto awọn tabili data data wa ti a fẹ paarẹ ni ọjọ iwaju. A ko nilo rẹ mọ;

Fun ero yii lati ṣiṣẹ, a yoo nilo akoko iyipada kan.
Nibẹ ni o wa ki o si meji ṣee ṣe yonuso.
Ni igba akọkọ: a pidánpidán gbogbo data ninu awọn titun ati ki o atijọ infomesonu. Ni idi eyi, a ni apọju data ati awọn iṣoro imuṣiṣẹpọ le dide. Ṣugbọn a le gba awọn onibara oriṣiriṣi meji. Ọkan yoo ṣiṣẹ pẹlu ẹya tuntun, ekeji pẹlu ti atijọ.
Keji: a pin data gẹgẹbi diẹ ninu awọn ilana iṣowo. Fun apẹẹrẹ, a ni awọn ọja 5 ninu eto ti a fipamọ sinu ibi ipamọ data atijọ. A gbe awọn kẹfa ọkan laarin awọn titun owo-ṣiṣe ni titun kan database. Ṣugbọn a yoo nilo Ẹnu-ọna API kan ti yoo mu data yii ṣiṣẹpọ ati ṣafihan ibiti ati kini lati gba lati ọdọ alabara.
Awọn ọna mejeeji ṣiṣẹ, yan da lori ipo naa.
Lẹhin ti a ni idaniloju pe ohun gbogbo n ṣiṣẹ, apakan ti monolith ti o ṣiṣẹ pẹlu awọn ẹya data atijọ le jẹ alaabo.

Igbesẹ ti o kẹhin ni lati yọ awọn ẹya data atijọ kuro.

Lati ṣe akopọ, a le sọ pe a ni awọn iṣoro pẹlu ibi ipamọ data: o ṣoro lati ṣiṣẹ pẹlu rẹ ni akawe si koodu orisun, o nira sii lati pin, ṣugbọn o le ati pe o yẹ ki o ṣee ṣe. A ti rii diẹ ninu awọn ọna ti o gba wa laaye lati ṣe eyi lailewu, ṣugbọn o tun rọrun lati ṣe awọn aṣiṣe pẹlu data ju koodu orisun lọ.
Ṣiṣẹ pẹlu koodu orisun
Eyi ni ohun ti aworan atọka koodu orisun dabi nigbati a bẹrẹ ṣiṣe itupalẹ iṣẹ akanṣe monolithic.

O le pin ni aijọju si awọn fẹlẹfẹlẹ mẹta. Eyi jẹ ipele ti awọn modulu ifilọlẹ, awọn afikun, awọn iṣẹ ati awọn iṣẹ kọọkan. Ni otitọ, iwọnyi jẹ awọn aaye titẹsi laarin ojutu monolithic kan. Gbogbo wọn ti wa ni wiwọ ni wiwọ pẹlu kan wọpọ Layer. O ni oye iṣowo ti awọn iṣẹ pin ati ọpọlọpọ awọn asopọ. Iṣẹ kọọkan ati ohun itanna lo to awọn apejọ 10 tabi diẹ sii ti o wọpọ, da lori iwọn wọn ati ẹri-ọkan ti awọn olupilẹṣẹ.
A ni orire lati ni awọn ile-ikawe amayederun ti o le ṣee lo lọtọ.
Nigba miiran ipo kan dide nigbati diẹ ninu awọn ohun ti o wọpọ ko jẹ ti Layer yii, ṣugbọn jẹ awọn ile-ikawe amayederun. Eyi ti yanju nipasẹ yi lorukọmii.
Ibakcdun ti o tobi julọ ni awọn àrà aala. O ṣẹlẹ pe awọn ipo 3-4 ni a dapọ ni apejọ ti o wọpọ ati lo ara wọn laarin awọn iṣẹ iṣowo kanna. O jẹ dandan lati loye ibiti o ti le pin eyi ati pẹlu awọn aala wo, ati kini lati ṣe ni atẹle pẹlu ṣiṣe aworan pipin yii sinu awọn apejọ koodu orisun.
A ti ṣe agbekalẹ awọn ofin pupọ fun ilana pipin koodu.
Ni igba akọkọ: A ko fẹ lati pin iṣaro iṣowo laarin awọn iṣẹ, awọn iṣẹ ati awọn afikun. A fẹ lati jẹ ki oye iṣowo jẹ ominira laarin awọn iṣẹ microservices. Awọn iṣẹ Microservices, ni ida keji, ni ero pipe bi awọn iṣẹ ti o wa ni ominira patapata. Mo gbagbọ pe ọna yii jẹ apanirun diẹ, ati pe o nira lati ṣaṣeyọri, nitori, fun apẹẹrẹ, awọn iṣẹ ni C # yoo ni eyikeyi ọran ti sopọ nipasẹ ile-ikawe boṣewa. Eto wa ti kọ ni C #; a ko ti lo awọn imọ-ẹrọ miiran. Nitorinaa, a pinnu pe a le ni anfani lati lo awọn apejọ imọ-ẹrọ ti o wọpọ. Ohun akọkọ ni pe wọn ko ni eyikeyi awọn ajẹkù ti oye iṣowo. Ti o ba ni ohun elo wewewe lori ORM ti o nlo, lẹhinna didakọ rẹ lati iṣẹ si iṣẹ jẹ gbowolori pupọ.
Ẹgbẹ wa jẹ olufẹ ti apẹrẹ ti o ni idari agbegbe, nitorinaa faaji alubosa jẹ ibamu nla fun wa. Ipilẹ ti awọn iṣẹ wa kii ṣe ipele iraye si data, ṣugbọn apejọ kan pẹlu ọgbọn agbegbe, eyiti o ni awọn ọgbọn iṣowo nikan ninu ati pe ko ni awọn asopọ pẹlu awọn amayederun. Ni akoko kanna, a le ni ominira yipada apejọ agbegbe lati yanju awọn iṣoro ti o jọmọ awọn ilana.
Ni ipele yii a pade iṣoro pataki akọkọ wa. Iṣẹ naa ni lati tọka si apejọ agbegbe kan, a fẹ lati jẹ ki ọgbọn-ọrọ naa jẹ ominira, ati pe ilana DRY ṣe idiwọ pupọ wa nibi. Awọn olupilẹṣẹ fẹ lati tun lo awọn kilasi lati awọn apejọ adugbo lati yago fun ẹda-iwe, ati bi abajade, awọn ibugbe bẹrẹ si ni asopọ papọ lẹẹkansi. A ṣe itupalẹ awọn abajade ati pinnu pe boya iṣoro naa tun wa ni agbegbe ti ẹrọ ibi ipamọ koodu orisun. A ni ibi ipamọ nla kan ti o ni gbogbo koodu orisun ninu. Solusan fun gbogbo ise agbese jẹ gidigidi soro lati pejọ lori ẹrọ agbegbe kan. Nitorinaa, awọn solusan kekere lọtọ ni a ṣẹda fun awọn apakan ti iṣẹ akanṣe naa, ko si si ẹnikan ti o ṣe idiwọ fifi diẹ ninu wọpọ tabi apejọ agbegbe si wọn ati tun lo wọn. Ọpa kan ṣoṣo ti ko gba wa laaye lati ṣe eyi ni atunyẹwo koodu. Ṣugbọn nigbami o tun kuna.
Lẹhinna a bẹrẹ gbigbe si awoṣe pẹlu awọn ibi ipamọ lọtọ. Imọye iṣowo ko nṣàn lati iṣẹ si iṣẹ mọ, awọn ibugbe ti di ominira nitootọ. Awọn ọrọ ti o ni opin ni atilẹyin diẹ sii kedere. Bawo ni a ṣe tun lo awọn ile-ikawe amayederun? A ya wọn sọtọ si ibi ipamọ ọtọtọ, lẹhinna fi wọn sinu awọn apoti Nuget, ti a fi sinu Artifatory. Pẹlu eyikeyi iyipada, apejọ ati atẹjade waye laifọwọyi.

Awọn iṣẹ wa bẹrẹ si tọka awọn idii amayederun inu ni ọna kanna bi awọn ti ita. A gba ita ikawe lati Nuget. Lati ṣiṣẹ pẹlu Artifctory, nibiti a ti gbe awọn idii wọnyi, a lo awọn alakoso package meji. Ni awọn ibi ipamọ kekere a tun lo Nuget. Ni awọn ibi ipamọ pẹlu awọn iṣẹ lọpọlọpọ, a lo Paket, eyiti o pese aitasera ẹya diẹ sii laarin awọn modulu.

Nitorinaa, nipa ṣiṣẹ lori koodu orisun, iyipada diẹ ninu faaji ati yiya sọtọ awọn ibi ipamọ, a jẹ ki awọn iṣẹ wa ni ominira diẹ sii.
Awọn iṣoro amayederun
Pupọ julọ awọn ipadabọ si gbigbe si awọn iṣẹ microservices jẹ ibatan si awọn amayederun. Iwọ yoo nilo imuṣiṣẹ adaṣe, iwọ yoo nilo awọn ile-ikawe tuntun lati ṣiṣe awọn amayederun.
Fifi sori ẹrọ ni ọwọ ni awọn agbegbe
Ni ibẹrẹ, a fi sori ẹrọ ojutu fun awọn agbegbe pẹlu ọwọ. Lati ṣe adaṣe ilana yii, a ṣẹda opo gigun ti epo CI/CD. A yan ilana ifijiṣẹ lemọlemọfún nitori imuṣiṣẹ ilọsiwaju ko tii ṣe itẹwọgba fun wa lati oju ti awọn ilana iṣowo. Nitorinaa, fifiranṣẹ fun iṣẹ ni a ṣe ni lilo bọtini kan, ati fun idanwo - laifọwọyi.

A lo Atlassian, Bitbucket fun ibi ipamọ koodu orisun ati Bamboo fun kikọ. A fẹ lati kọ awọn iwe afọwọkọ ni Akara nitori o jẹ kanna bi C #. Awọn idii ti o ti ṣetan wa si Artifacty, ati Ansible laifọwọyi n wọle si awọn olupin idanwo, lẹhin eyi wọn le ṣe idanwo lẹsẹkẹsẹ.

Wọle lọtọ
Ni akoko kan, ọkan ninu awọn imọran ti monolith ni lati pese gedu pinpin. A tun nilo lati ni oye kini lati ṣe pẹlu awọn akọọlẹ kọọkan ti o wa lori awọn disiki naa. Awọn akọọlẹ wa ni a kọ si awọn faili ọrọ. A pinnu lati lo akopọ ELK boṣewa kan. A ko kọwe si ELK taara nipasẹ awọn olupese, ṣugbọn pinnu pe a yoo ṣe atunṣe awọn akọọlẹ ọrọ ki o si kọ ID itọpa ninu wọn gẹgẹbi idamọ, fifi orukọ iṣẹ naa kun, ki awọn akọọlẹ wọnyi le ṣe atunṣe nigbamii.

Pẹ̀lú Filebeat a lè gba àwọn àkọsílẹ̀ wa láti inú apèsè, lẹ́yìn náà yí wọn padà, lo Kibana láti kọ́ àwọn ìbéèrè nínú UI, kí o sì wo bí a ṣe darí ìpè náà láàrín àwọn iṣẹ́. Àwọn ID Trace wúlò gan-an fún èyí.
Idanwo ati ṣatunṣe awọn iṣẹ ti o ni ibatan
Ni ibẹrẹ, a ko loye ni kikun bi a ṣe le ṣatunṣe awọn iṣẹ ti n dagbasoke. Ohun gbogbo wà rọrun pẹlu monolith a ran o lori kan ti agbegbe ẹrọ. Ni akọkọ wọn gbiyanju lati ṣe kanna pẹlu awọn microservices, ṣugbọn nigbamiran lati ṣe ifilọlẹ microservice kan ni kikun o nilo lati ṣe ifilọlẹ ọpọlọpọ awọn miiran, ati pe eyi ko rọrun. A ṣe akiyesi pe a nilo lati gbe lọ si awoṣe nibiti a ti lọ kuro lori ẹrọ agbegbe nikan iṣẹ tabi awọn iṣẹ ti a fẹ lati ṣatunṣe. Awọn iṣẹ ti o ku ni a lo lati ọdọ awọn olupin ti o baamu iṣeto pẹlu prod. Lẹhin ti n ṣatunṣe aṣiṣe, lakoko idanwo, fun iṣẹ kọọkan, awọn iṣẹ ti o yipada nikan ni a gbejade si olupin idanwo naa. Nitorinaa, ojutu naa ni idanwo ni irisi eyiti yoo han ni iṣelọpọ ni ọjọ iwaju.
Awọn olupin wa ti o nṣiṣẹ awọn ẹya iṣelọpọ ti awọn iṣẹ nikan. Awọn olupin wọnyi nilo ni ọran ti awọn iṣẹlẹ, lati ṣayẹwo ifijiṣẹ ṣaaju imuṣiṣẹ ati fun ikẹkọ inu.
A ti ṣafikun ilana idanwo adaṣe ni lilo ile-ikawe Specflow olokiki. Awọn idanwo ṣiṣẹ laifọwọyi ni lilo NUnit lẹsẹkẹsẹ lẹhin imuṣiṣẹ lati Ansible. Ti agbegbe iṣẹ ba wa ni kikun laifọwọyi, lẹhinna ko si iwulo fun idanwo afọwọṣe. Botilẹjẹpe nigbakan afikun idanwo afọwọṣe tun nilo. A lo awọn afi ni Jira lati pinnu iru awọn idanwo lati ṣiṣẹ fun ọran kan.
Ni afikun, iwulo fun idanwo fifuye ti pọ si ni iṣaaju o ti ṣe ni awọn ọran toje. A lo JMeter lati ṣiṣe awọn idanwo, InfluxDB lati tọju wọn, ati Grafana lati kọ awọn aworan ilana.
Kini a ti ṣaṣeyọri?
Ni akọkọ, a yọkuro ero ti “itusilẹ”. Awọn idasilẹ ibanilẹru oṣu meji lọ ti lọ nigbati a gbe colossus yii lọ si agbegbe iṣelọpọ kan, ni idilọwọ awọn ilana iṣowo fun igba diẹ. Bayi a ran awọn iṣẹ ni apapọ ni gbogbo ọjọ 1,5, ṣiṣe akojọpọ wọn nitori wọn lọ si iṣẹ lẹhin ifọwọsi.
Ko si awọn ikuna apaniyan ninu eto wa. Ti a ba tu silẹ microservice pẹlu kokoro kan, lẹhinna iṣẹ ṣiṣe ti o ni nkan ṣe pẹlu rẹ yoo fọ, ati pe gbogbo iṣẹ ṣiṣe miiran kii yoo ni ipa. Eyi mu iriri olumulo dara gaan.
A le ṣakoso ilana imuṣiṣẹ. O le yan awọn ẹgbẹ ti awọn iṣẹ lọtọ lati iyoku ojutu, ti o ba jẹ dandan.
Ni afikun, a ti dinku iṣoro naa pẹlu isinyi nla ti awọn ilọsiwaju. A ni awọn ẹgbẹ ọja lọtọ ti o ṣiṣẹ pẹlu diẹ ninu awọn iṣẹ ni ominira. Ilana Scrum ti wa ni ibamu ti o dara nibi. Ẹgbẹ kan pato le ni Oniwun Ọja lọtọ ti o fi awọn iṣẹ ṣiṣe si.
Akopọ
- Microservices ni o wa daradara ti baamu fun decomposing eka awọn ọna šiše. Ninu ilana, a bẹrẹ lati ni oye ohun ti o wa ninu eto wa, kini awọn ipo to lopin ti o wa, nibiti awọn aala wọn wa. Eyi n gba ọ laaye lati pin awọn ilọsiwaju ni deede laarin awọn modulu ati ṣe idiwọ idarudapọ koodu.
- Microservices pese leto anfani. Wọn nigbagbogbo sọrọ nipa nikan bi faaji, ṣugbọn eyikeyi faaji nilo lati yanju awọn iwulo iṣowo, kii ṣe lori tirẹ. Nitorinaa, a le sọ pe awọn iṣẹ microservices ni ibamu daradara fun ipinnu awọn iṣoro ni awọn ẹgbẹ kekere, nitori pe Scrum jẹ olokiki pupọ ni bayi.
- Iyapa jẹ ilana aṣetunṣe. O ko le gba ohun elo kan ki o pin pin si awọn iṣẹ microservices. Abajade ọja ko ṣeeṣe lati ṣiṣẹ. Nigbati o ba ya awọn microservices, o jẹ anfani lati tun kọ ohun-ini ti o wa tẹlẹ, iyẹn ni, yi pada sinu koodu ti a fẹran ati pe o dara julọ pade awọn iwulo iṣowo ni awọn ofin ti iṣẹ ṣiṣe ati iyara.
Apeere kekere kan: Awọn idiyele ti gbigbe si awọn iṣẹ microservice jẹ pataki pupọ. O gba akoko pipẹ lati yanju iṣoro amayederun nikan. Nitorinaa ti o ba ni ohun elo kekere ti ko nilo iwọnwọn kan pato, ayafi ti o ba ni nọmba nla ti awọn alabara ti njijadu fun akiyesi ẹgbẹ rẹ ati akoko, lẹhinna awọn iṣẹ microservices le ma jẹ ohun ti o nilo loni. O jẹ ohun gbowolori. Ti o ba bẹrẹ ilana pẹlu awọn microservices, lẹhinna awọn idiyele yoo wa lakoko ti o ga ju ti o ba bẹrẹ iṣẹ akanṣe kanna pẹlu idagbasoke monolith kan.
PS Itan ẹdun diẹ sii (ati bi ẹnipe fun ọ tikalararẹ) - ni ibamu si .
Eyi ni ẹkunrẹrẹ ijabọ naa.
orisun: www.habr.com
