Canji daga monolith zuwa microservices: tarihi da aiki

A cikin wannan labarin, zan yi magana game da yadda aikin da nake aiki a kai ya canza daga babban monolith zuwa saitin microservices.

Aikin ya fara tarihinsa da dadewa, a farkon 2000. An rubuta sigar farko a cikin Visual Basic 6. A tsawon lokaci, ya bayyana a fili cewa ci gaba a cikin wannan harshe zai yi wahala a tallafawa nan gaba, tunda IDE. kuma shi kansa harshen ba shi da kyau. A ƙarshen 2000s, an yanke shawarar canzawa zuwa mafi kyawun C #. An rubuta sabon sigar a layi daya tare da sake fasalin tsohuwar, a hankali an ƙara rubuta lambar a cikin NET. Baya a cikin C # an fara mayar da hankali ne akan tsarin gine-ginen sabis, amma yayin haɓakawa, an yi amfani da ɗakunan karatu na gama gari tare da dabaru, kuma an ƙaddamar da ayyuka a cikin tsari ɗaya. Sakamakon shine aikace-aikacen da muka kira "sabis monolith."

Ɗaya daga cikin ƴan fa'idodin wannan haɗin shine ikon sabis don kiran juna ta API na waje. Akwai bayyanannun abubuwan da ake buƙatu don canzawa zuwa sabis mafi daidai, kuma a nan gaba, gine-ginen microservice.

Mun fara aikin mu kan bazuwar a kusa da 2015. Har yanzu ba mu kai matsayin da ya dace ba - har yanzu akwai sassan babban aikin da ba za a iya kiran su monoliths ba, amma kuma ba su yi kama da na'urorin sadarwa ba. Duk da haka, ci gaba yana da mahimmanci.
Zan yi magana game da shi a cikin labarin.

Canji daga monolith zuwa microservices: tarihi da aiki

Abubuwa

Gine-gine da matsalolin da ke akwai


Da farko, tsarin gine-ginen yayi kama da haka: UI aikace-aikace daban ne, an rubuta ɓangaren monolithic a cikin Visual Basic 6, aikace-aikacen NET saitin ayyuka ne masu alaƙa da ke aiki tare da babban bayanan bayanai.

Rashin hasara na maganin da ya gabata

Wuri ɗaya na gazawa
Muna da maki guda na gazawa: aikace-aikacen NET ya gudana a cikin tsari guda ɗaya. Idan kowane tsarin ya gaza, duk aikace-aikacen ya gaza kuma dole ne a sake farawa. Tun da muna sarrafa babban adadin matakai don masu amfani daban-daban, saboda gazawar ɗayansu, kowa ba zai iya aiki na ɗan lokaci ba. Kuma idan akwai kuskuren software, koda madadin bai taimaka ba.

Jerin abubuwan ingantawa
Wannan koma baya ne wajen kungiya. Aikace-aikacenmu yana da abokan ciniki da yawa, kuma duk suna son inganta shi da wuri-wuri. A baya can, ba shi yiwuwa a yi wannan a layi daya, kuma duk abokan ciniki sun tsaya a layi. Wannan tsari ba shi da kyau ga 'yan kasuwa saboda dole ne su tabbatar da cewa aikinsu yana da mahimmanci. Kuma ƙungiyar ci gaba ta ɗauki lokaci don shirya wannan jerin gwano. Wannan ya ɗauki lokaci mai yawa da ƙoƙari, kuma samfurin a ƙarshe ba zai iya canzawa da sauri kamar yadda suke so ba.

Mafi kyawun amfani da albarkatu
Lokacin ɗaukar sabis a cikin tsari guda ɗaya, koyaushe muna kwafi kwafi gaba ɗaya daga uwar garken zuwa uwar garken. Mun so mu sanya sabis ɗin da aka ɗora nauyi daban don kar mu ɓata albarkatu da samun ƙarin sassaucin iko akan tsarin tura mu.

Wahalar aiwatar da fasahohin zamani
Matsalar da aka saba da duk masu haɓakawa: akwai sha'awar gabatar da fasahar zamani a cikin aikin, amma babu dama. Tare da babban bayani na monolithic, duk wani sabuntawa na ɗakin karatu na yanzu, ba tare da ambaton sauyawa zuwa wani sabon abu ba, ya juya zuwa wani aiki maras muhimmanci. Yana ɗaukar lokaci mai tsawo don tabbatar wa shugaban ƙungiyar cewa wannan zai kawo ƙarin kari fiye da jijiyoyi da suka ɓace.

Wahalar fitar da canje-canje
Wannan ita ce babbar matsala - muna fitar da saki kowane wata biyu.
Kowane sakin ya zama babban bala'i ga bankin, duk da gwaji da ƙoƙarin masu haɓakawa. Kasuwancin ya fahimci cewa a farkon mako wasu ayyukan sa ba za su yi aiki ba. Kuma masu haɓakawa sun fahimci cewa mako guda na manyan abubuwan da suka faru suna jiran su.
Kowa yana da sha'awar canza yanayin.

Tsammani daga microservices


Batun abubuwan da aka gyara lokacin da aka shirya. Isar da abubuwan da aka gyara lokacin da aka shirya ta hanyar lalata mafita da raba matakai daban-daban.

Ƙananan ƙungiyoyin samfur. Wannan yana da mahimmanci saboda babban ƙungiyar da ke aiki akan tsohuwar monolith yana da wahalar sarrafawa. Irin wannan tawagar an tilasta yin aiki bisa ga tsauraran tsari, amma suna son ƙarin kerawa da 'yancin kai. Ƙananan ƙungiyoyi ne kawai za su iya samun wannan.

Ware sabis a cikin matakai daban-daban. Da kyau, Ina so in ware shi a cikin kwantena, amma babban adadin ayyuka da aka rubuta a cikin NET Framework yana gudana akan Windows kawai. Ayyukan da ke kan NET Core yanzu suna bayyana, amma akwai kaɗan daga cikinsu tukuna.

Sauƙaƙan turawa. Muna son hada ayyuka kamar yadda muke buƙata, ba yadda lambar ta tilasta shi ba.

Amfani da sabbin fasahohi. Wannan yana da ban sha'awa ga kowane mai tsara shirye-shirye.

Matsalolin canji


Tabbas, idan yana da sauƙi a karya monolith zuwa microservices, ba za a buƙaci yin magana game da shi ba a taro da rubuta labarai. Akwai matsaloli da yawa a cikin wannan tsari, zan bayyana manyan abubuwan da suka kawo mana cikas.

Matsala ta farko na hali ga mafi yawan monoliths: daidaituwar dabaru na kasuwanci. Lokacin da muka rubuta monolith, muna so mu sake amfani da azuzuwan mu don kada mu rubuta lambar da ba dole ba. Kuma lokacin matsawa zuwa microservices, wannan ya zama matsala: duk lambar an haɗa su sosai, kuma yana da wahala a raba ayyukan.

A lokacin da aka fara aiki, wurin ajiyar yana da fiye da ayyuka 500 da kuma fiye da layin 700 dubu. Wannan babban shawara ne kuma matsala ta biyu. Ba zai yiwu a ɗauka kawai a raba shi zuwa ƙananan sabis ba.

Matsala ta uku - rashin abubuwan da ake bukata. A haƙiƙa, muna yin kwafin lambar tushe da hannu zuwa sabobin.

Yadda ake matsawa daga monolith zuwa microservices


Samar da microservices

Da fari dai, nan da nan mun ƙaddara wa kanmu cewa rabuwar microservices wani tsari ne mai maimaitawa. A koyaushe ana buƙatar mu haɓaka matsalolin kasuwanci a layi daya. Yadda za mu aiwatar da wannan a fasaha ya riga ya zama matsalarmu. Sabili da haka, mun shirya don tsari mai maimaitawa. Ba zai yi aiki ta wata hanya ba idan kuna da babban aikace-aikacen kuma ba a shirya da farko don sake rubutawa ba.

Waɗanne hanyoyi muke amfani da su don ware ƙananan sabis?

Hanyar farko - matsar da samfura masu wanzuwa azaman sabis. Dangane da wannan, mun yi sa'a: an riga an sami sabis ɗin rajista waɗanda suka yi aiki ta amfani da ka'idar WCF. An raba su zuwa majalisa daban-daban. Mun jera su daban, muna ƙara ƙaramin ƙararrawa ga kowane gini. An rubuta ta ta amfani da babban ɗakin karatu na Topshelf, wanda ke ba ku damar gudanar da aikace-aikacen duka a matsayin sabis da kuma matsayin na'ura. Wannan ya dace don gyara kuskure tunda ba a buƙatar ƙarin ayyukan a cikin mafita ba.

An haɗa ayyukan bisa ga dabarun kasuwanci, tun da sun yi amfani da taro na gama gari kuma suna aiki tare da bayanan gama gari. Da kyar za a iya kiran su microservices a cikin tsantsar sigar su. Koyaya, zamu iya samar da waɗannan ayyuka daban, a cikin matakai daban-daban. Wannan kadai ya ba da damar rage tasirin su a kan juna, rage matsalar tare da ci gaba mai kama da juna da kuma gazawar guda ɗaya.

Haɗawa tare da mai watsa shiri layi ɗaya ne kawai na lamba a cikin ajin Shirin. Mun ɓoye aiki tare da Topshelf a cikin aji mai taimako.

namespace RBA.Services.Accounts.Host
{
   internal class Program
   {
      private static void Main(string[] args)
      {
        HostRunner<Accounts>.Run("RBA.Services.Accounts.Host");

       }
    }
}

Hanya ta biyu don rarraba microservices ita ce: ƙirƙira su don magance sababbin matsaloli. Idan a lokaci guda monolith bai girma ba, wannan ya riga ya yi kyau, wanda ke nufin muna tafiya a kan hanya madaidaiciya. Don magance sababbin matsaloli, mun yi ƙoƙarin ƙirƙirar ayyuka daban-daban. Idan akwai irin wannan damar, to, mun ƙirƙiri ƙarin sabis na "canonical" waɗanda ke sarrafa tsarin bayanan nasu gaba ɗaya, bayanan daban.

Mu, kamar mutane da yawa, mun fara tare da tantancewa da sabis na izini. Sun dace da wannan. Suna masu zaman kansu, a matsayin mai mulkin, suna da samfurin bayanai daban. Su da kansu ba sa mu'amala da masu tauhidi, sai dai ya koma gare su don warware wasu matsaloli. Yin amfani da waɗannan ayyukan, zaku iya fara canzawa zuwa sabon gine-gine, gyara abubuwan more rayuwa akan su, gwada wasu hanyoyin da suka shafi ɗakunan karatu na cibiyar sadarwa, da sauransu. Ba mu da wasu ƙungiyoyi a cikin ƙungiyarmu waɗanda ba za su iya ƙirƙirar sabis na tantancewa ba.

Hanya ta uku don rarraba ƙananan ayyukaWanda muke amfani da shi kadan ne a gare mu. Wannan shine cire dabarun kasuwanci daga layin UI. Babban aikace-aikacen mu na UI shine tebur; shi, kamar bangon baya, an rubuta shi a cikin C #. Masu haɓakawa lokaci-lokaci sun yi kurakurai kuma sun tura sassan dabaru zuwa UI waɗanda yakamata su kasance a bayan baya kuma a sake amfani da su.

Idan ka kalli wani misali na ainihi daga lambar ɓangaren ɓangaren UI, za ka ga cewa yawancin wannan bayani ya ƙunshi ainihin tunanin kasuwanci wanda ke da amfani a wasu matakai, ba kawai don gina nau'in UI ba.

Canji daga monolith zuwa microservices: tarihi da aiki

Haƙiƙanin dabaru na UI yana nan a cikin layukan biyu na ƙarshe. Mun mayar da shi zuwa uwar garken domin a iya sake amfani da shi, ta haka rage UI da cimma daidaitattun gine-gine.

Hanya ta huɗu kuma mafi mahimmanci don ware ƙananan sabis, wanda ke ba da damar rage monolith, shine kawar da ayyukan da ke akwai tare da sarrafawa. Lokacin da muka fitar da samfuran da ke akwai kamar yadda yake, sakamakon ba koyaushe yake son masu haɓakawa ba, kuma tsarin kasuwanci na iya zama tsohon zamani tun lokacin da aka ƙirƙiri aikin. Tare da refactoring, za mu iya tallafawa sabon tsarin kasuwanci saboda bukatun kasuwanci suna canzawa akai-akai. Za mu iya inganta lambar tushe, cire sanannun lahani, da ƙirƙirar ingantaccen tsarin bayanai. Akwai fa'idodi da yawa da ke tarawa.

Ware sabis daga sarrafawa yana da alaƙa da alaƙa da manufar mahallin da aka iyaka. Wannan ra'ayi ne daga Ƙirƙirar Domain Driven. Yana nufin sashe na ƙirar yanki wanda a cikinsa aka keɓance duk sharuɗɗan harshe ɗaya na musamman. Bari mu dubi mahallin inshora da lissafin kuɗi a matsayin misali. Muna da aikace-aikacen monolithic, kuma muna buƙatar yin aiki tare da asusun a cikin inshora. Muna sa ran mai haɓakawa zai nemo ajin Asusun da ke akwai a cikin wani taro, yayi la'akari da shi daga ajin Inshora, kuma za mu sami lambar aiki. Za a mutunta ka'idar DRY, za a yi aikin da sauri ta amfani da lambar data kasance.

A sakamakon haka, ya bayyana cewa an haɗa mahallin asusun da inshora. Yayin da sabbin buƙatu suka fito, wannan haɗin gwiwa zai tsoma baki tare da ci gaba, yana ƙara rikitacciyar dabarar kasuwanci mai rikitarwa. Don magance wannan matsalar, kuna buƙatar nemo iyakoki tsakanin mahallin a cikin lambar kuma cire abubuwan da suka keta. Misali, a yanayin inshora, yana yiwuwa lambar asusun Babban Banki mai lamba 20 da ranar da aka buɗe asusun za su isa.

Don raba waɗannan mahallin da ke da iyaka da juna kuma mu fara aiwatar da aikin raba microservices daga mafita guda ɗaya, mun yi amfani da hanya kamar ƙirƙirar APIs na waje a cikin aikace-aikacen. Idan mun san cewa wani tsarin ya kamata ya zama microservice, ko ta yaya aka canza shi a cikin tsari, to nan da nan mun yi kira zuwa dabaru wanda ke da iyakacin mahallin ta hanyar kiran waje. Misali, ta hanyar REST ko WCF.

Mun yanke shawarar cewa ba za mu guje wa lambar da za ta buƙaci ma'amaloli da aka rarraba ba. A cikin yanayinmu, ya zama mai sauƙin bin wannan doka. Har yanzu ba mu ci karo da yanayi ba inda ake buƙatar ainihin ma'amaloli da aka rarraba - daidaiton ƙarshe tsakanin kayayyaki ya isa sosai.

Bari mu kalli takamaiman misali. Muna da ra'ayi na mawaƙa - bututun da ke aiwatar da mahallin "aikace-aikacen". Yana ƙirƙirar abokin ciniki, asusu da katin banki bi da bi. Idan abokin ciniki da asusun an ƙirƙira su cikin nasara, amma ƙirƙirar katin ya gaza, aikace-aikacen baya matsawa zuwa matsayin "nasara" kuma ya kasance a cikin matsayin "katin da ba a ƙirƙira ba". A nan gaba, aikin bango zai ɗauke shi ya ƙare shi. Tsarin ya kasance cikin rashin daidaituwa na ɗan lokaci, amma gabaɗaya mun gamsu da wannan.

Idan wani yanayi ya taso lokacin da ya zama dole a ci gaba da adana wani yanki na bayanan, za mu yi yuwuwa mu je don ƙarfafa sabis ɗin don aiwatar da shi a cikin tsari ɗaya.

Bari mu kalli misali na ware microservice. Ta yaya za ku iya kawo shi don samarwa cikin aminci? A cikin wannan misali, muna da wani ɓangare na tsarin - tsarin sabis na biyan kuɗi, ɗaya daga cikin sassan code wanda muke so mu yi microservice.

Canji daga monolith zuwa microservices: tarihi da aiki

Da farko, muna ƙirƙirar microservice ta sake rubuta lambar. Muna inganta wasu bangarorin da ba mu ji dadin su ba. Muna aiwatar da sababbin buƙatun kasuwanci daga abokin ciniki. Muna ƙara Ƙofar API zuwa haɗin kai tsakanin UI da bangon baya, wanda zai samar da isar da kira.

Canji daga monolith zuwa microservices: tarihi da aiki

Na gaba, za mu saki wannan saitin zuwa aiki, amma a cikin yanayin matukin jirgi. Yawancin masu amfani da mu har yanzu suna aiki tare da tsoffin hanyoyin kasuwanci. Ga sababbin masu amfani, muna haɓaka sabon sigar aikace-aikacen monolithic wanda ba ya ƙunshi wannan tsari. Ainihin, muna da haɗin monolith da microservice da ke aiki azaman matukin jirgi.

Canji daga monolith zuwa microservices: tarihi da aiki

Tare da matukin jirgi mai nasara, mun fahimci cewa sabon tsarin yana iya aiki da gaske, za mu iya cire tsohon monolith daga ma'auni kuma mu bar sabon tsari a maimakon tsohon bayani.

Canji daga monolith zuwa microservices: tarihi da aiki

Gabaɗaya, muna amfani da kusan duk hanyoyin da ake da su don rarraba lambar tushe na monolith. Dukansu suna ba mu damar rage girman sassan aikace-aikacen kuma mu fassara su zuwa sabbin ɗakunan karatu, suna yin mafi kyawun lambar tushe.

Aiki tare da database


Za'a iya raba ma'ajin bayanai mafi muni fiye da lambar tushe, tun da yake ya ƙunshi ba kawai tsarin da ake ciki ba, har ma da tara bayanan tarihi.

Rumbun bayanan mu, kamar sauran mutane, yana da wani muhimmin koma baya - girmansa. An ƙirƙira wannan ma'ajin bayanai bisa ga ƙaƙƙarfan dabaru na kasuwanci na monolith, da alaƙar da suka taru a tsakanin tebur na mahallin da ke kan iyaka.

A cikin yanayinmu, don ɗaukar duk matsalolin (babban bayanan bayanai, haɗin kai da yawa, wasu lokuta rashin iyakoki tsakanin tebur), matsala ta taso da ke faruwa a cikin manyan ayyuka da yawa: amfani da samfurin bayanan da aka raba. An ɗauki bayanai daga tebur ta hanyar dubawa, ta hanyar kwafi, kuma an aika zuwa wasu tsarin inda ake buƙatar wannan kwafin. Sakamakon haka, ba za mu iya matsar da allunan zuwa wani tsari na daban ba saboda ana amfani da su sosai.

Rarraba iri ɗaya zuwa ƙayyadaddun mahallin a cikin lambar yana taimaka mana cikin rabuwa. Yawancin lokaci yana ba mu kyakkyawan ra'ayi na yadda muke rushe bayanai a matakin bayanan. Mun fahimci waɗanne teburi ne na mahallin da aka daure da kuma wanne ga wani.

Mun yi amfani da hanyoyin duniya guda biyu na rarraba bayanai: rarrabuwa na tebur da ke akwai da rarraba tare da sarrafawa.

Rarraba allunan da ke akwai hanya ce mai kyau don amfani idan tsarin bayanan yana da kyau, ya cika buƙatun kasuwanci, kuma kowa yana farin ciki da shi. A wannan yanayin, zamu iya raba allunan data kasance cikin tsari daban.

Ana buƙatar sashe tare da sarrafawa lokacin da tsarin kasuwanci ya canza sosai, kuma tebur ɗin ba ya gamsar da mu kwata-kwata.

Rarraba teburan da ke akwai. Muna buƙatar sanin abin da za mu rabu. Idan ba tare da wannan ilimin ba, babu abin da zai yi aiki, kuma a nan rabuwa da iyakokin iyaka a cikin lambar zai taimake mu. A matsayinka na mai mulki, idan zaka iya fahimtar iyakoki na mahallin a cikin lambar tushe, ya bayyana a fili wanda ya kamata a haɗa da tebur a cikin jerin don sashen.

Bari mu yi tunanin cewa muna da mafita a cikin abin da na'urorin monolith guda biyu ke hulɗa tare da bayanai guda ɗaya. Muna buƙatar tabbatar da cewa ɗayan guda ɗaya ne kawai ke hulɗa tare da sashin tebur ɗin da aka raba, ɗayan kuma ya fara hulɗa da shi ta hanyar API. Don farawa, ya isa cewa kawai ana yin rikodin ta hanyar API. Wannan shine yanayin da ya wajaba a gare mu muyi magana game da 'yancin kai na microservices. Haɗin karatu na iya kasancewa muddin babu babbar matsala.

Canji daga monolith zuwa microservices: tarihi da aiki

Mataki na gaba shine zamu iya raba sashin lambar da ke aiki tare da tebur da aka raba, tare da ko ba tare da sarrafawa ba, a cikin wani microservice na daban kuma mu gudanar da shi a cikin wani tsari daban, akwati. Wannan zai zama keɓantaccen sabis ɗin tare da haɗin kai zuwa madaidaitan bayanai na monolith da waɗancan tebur waɗanda ba su da alaƙa kai tsaye da shi. Har ila yau monolith yana mu'amala don karatu tare da sashin da ake iya cirewa.

Canji daga monolith zuwa microservices: tarihi da aiki

Daga baya za mu cire wannan haɗin, wato, karanta bayanai daga aikace-aikacen monolithic daga keɓaɓɓen tebur kuma za a canza shi zuwa API.

Canji daga monolith zuwa microservices: tarihi da aiki

Na gaba, za mu zaɓi daga babban bayanan bayanan tebur waɗanda kawai sabon ƙaramin sabis ɗin ke aiki da su. Za mu iya matsar da allunan zuwa wani tsari na daban ko ma zuwa wani keɓaɓɓen bayanan bayanan jiki. Har yanzu akwai haɗin karatu tsakanin microservice da ma'ajin bayanai na monolith, amma babu wani abin damuwa, a cikin wannan tsarin zai iya rayuwa na dogon lokaci.

Canji daga monolith zuwa microservices: tarihi da aiki

Mataki na ƙarshe shine cire duk haɗin gwiwa gaba ɗaya. A wannan yanayin, ƙila mu buƙaci ƙaura bayanai daga babban rumbun adana bayanai. Wani lokaci muna son sake amfani da wasu bayanai ko kundayen adireshi da aka kwafi daga tsarin waje a cikin ma'ajin bayanai da yawa. Wannan yana faruwa da mu lokaci-lokaci.

Canji daga monolith zuwa microservices: tarihi da aiki

Sashen sarrafawa. Wannan hanyar tana kama da ta farko, sai dai a juzu'i. Nan da nan muka keɓe sabon bayanan bayanai da sabon ƙaramin sabis wanda ke hulɗa tare da monolith ta API. Amma a lokaci guda, akwai sauran saitin tebur ɗin bayanai waɗanda muke son gogewa a nan gaba. Ba mu ƙara buƙatarsa; mun maye gurbinsa a cikin sabon ƙirar.

Canji daga monolith zuwa microservices: tarihi da aiki

Domin wannan tsarin ya yi aiki, muna iya buƙatar lokacin miƙa mulki.

Akwai hanyoyi guda biyu masu yiwuwa.

Na farko: mun kwafi duk bayanan da ke cikin sababbi da tsoffin ma'ajin bayanai. A wannan yanayin, muna da sakewar bayanai kuma matsalolin aiki tare na iya tasowa. Amma za mu iya daukar biyu daban-daban abokan ciniki. Ɗayan zai yi aiki tare da sabon sigar, ɗayan tare da tsohuwar.

Na biyu: muna rarraba bayanan bisa ga wasu sharuɗɗan kasuwanci. Alal misali, muna da samfurori 5 a cikin tsarin da aka adana a cikin tsohuwar bayanai. Mun sanya na shida a cikin sabon aikin kasuwanci a cikin sabon bayanan bayanai. Amma za mu buƙaci Ƙofar API wanda zai daidaita wannan bayanan kuma ya nuna abokin ciniki a ina da abin da zai samu.

Duk hanyoyin biyu suna aiki, zaɓi dangane da yanayin.

Bayan mun tabbata cewa komai yana aiki, za a iya kashe ɓangaren monolith wanda ke aiki tare da tsoffin tsarin bayanai.

Canji daga monolith zuwa microservices: tarihi da aiki

Mataki na ƙarshe shine cire tsoffin tsarin bayanan.

Canji daga monolith zuwa microservices: tarihi da aiki

Don taƙaitawa, zamu iya cewa muna da matsaloli tare da bayanan bayanai: yana da wuya a yi aiki tare da shi idan aka kwatanta da lambar tushe, ya fi wuya a raba, amma yana iya kuma ya kamata a yi. Mun sami wasu hanyoyin da ke ba mu damar yin hakan cikin aminci, amma har yanzu yana da sauƙin yin kuskure da bayanai fiye da lambar tushe.

Yin aiki tare da lambar tushe


Wannan shine yadda zanen lambar tushe yayi kama da lokacin da muka fara nazarin aikin monolithic.

Canji daga monolith zuwa microservices: tarihi da aiki

Ana iya raba shi kusan zuwa yadudduka uku. Wannan wani nau'i ne na ƙirar da aka ƙaddamar, plugins, ayyuka da ayyuka na mutum ɗaya. A haƙiƙa, waɗannan wuraren shiga ne a cikin mafita guda ɗaya. Dukkansu an rufe su sosai tare da Layer gama gari. Yana da dabaru na kasuwanci wanda ayyukan suka raba da haɗin kai da yawa. Kowane sabis da plugin ana amfani da su har zuwa 10 ko fiye na gama gari, ya danganta da girman su da lamiri na masu haɓakawa.

Mun yi sa'a da samun dakunan karatu na abubuwan more rayuwa waɗanda za a iya amfani da su daban.

Wani lokaci wani yanayi ya taso lokacin da wasu abubuwan gama gari ba su kasance cikin wannan Layer ba, amma ɗakunan karatu ne. An warware wannan ta hanyar sake suna.

Babban abin damuwa shi ne abubuwan da ke da iyaka. Ya faru cewa an gauraya mahallin 3-4 a cikin taron gama gari ɗaya kuma an yi amfani da juna a cikin ayyukan kasuwanci iri ɗaya. Ya zama dole a fahimci inda za'a iya raba wannan kuma tare da waɗanne iyakoki, da abin da za a yi na gaba tare da tsara wannan rarrabuwa zuwa manyan majalissar dokoki.

Mun tsara dokoki da yawa don tsarin raba lambar.

Na farko: Ba mu ƙara son raba dabarun kasuwanci tsakanin ayyuka, ayyuka da plugins. Mun so mu mai da dabarun kasuwanci mai zaman kansa a cikin microservices. Microservices, a gefe guda, ana tunanin su azaman sabis waɗanda ke wanzu gaba ɗaya na kansu. Na yi imani cewa wannan hanya yana da ɗan ɓarna, kuma yana da wuya a cimma, saboda, alal misali, ayyuka a cikin C # za a haɗa su ta hanyar ɗakin karatu na yau da kullum. An rubuta tsarin mu a cikin C #; har yanzu ba mu yi amfani da wasu fasahohin ba. Saboda haka, mun yanke shawarar cewa za mu iya samun damar yin amfani da taron fasaha na gama gari. Babban abu shi ne cewa ba su ƙunshi kowane guntu na dabaru na kasuwanci ba. Idan kuna da abin rufe fuska akan ORM ɗin da kuke amfani da shi, to kwafin shi daga sabis zuwa sabis yana da tsada sosai.

Ƙungiyarmu ta kasance mai sha'awar ƙirar yanki, don haka gine-ginen albasa ya dace da mu. Tushen ayyukanmu ba shine Layer samun damar bayanai ba, amma taro tare da dabaru na yanki, wanda ya ƙunshi dabaru na kasuwanci kawai kuma ba shi da alaƙa da abubuwan more rayuwa. A lokaci guda, za mu iya gyara taron yanki da kansa don warware matsalolin da suka shafi tsarin.

A wannan mataki mun ci karo da babbar matsalarmu ta farko. Sabis ɗin dole ne ya koma taron yanki ɗaya, muna so mu mai da hankali mai zaman kansa, kuma ƙa'idar DRY ta yi mana cikas a nan. Masu haɓakawa sun so su sake yin amfani da azuzuwan daga majalisu maƙwabta don guje wa kwafi, kuma a sakamakon haka, an fara haɗa yankuna tare. Mun bincika sakamakon kuma mun yanke shawarar cewa watakila matsalar ita ma ta ta'allaka ne a yankin na'urar ajiyar lambar tushe. Muna da babban wurin ajiya mai ɗauke da duk lambar tushe. Magani ga dukan aikin yana da wuyar haɗuwa a kan injin gida. Don haka, an ƙirƙiri ƙananan hanyoyin magance sassa daban-daban don sassan aikin, kuma babu wanda ya hana ƙara wasu gama gari ko yanki a kansu da sake amfani da su. Kayan aiki daya tilo da bai bamu damar yin wannan ba shine sake duba lambar. Amma wani lokacin ma ya gaza.

Sa'an nan kuma muka fara motsawa zuwa samfurin tare da ɗakunan ajiya daban. Hankalin kasuwanci baya gudana daga sabis zuwa sabis, yankuna sun zama masu zaman kansu da gaske. Abubuwan da aka ɗaure suna da goyan bayan ƙarara. Ta yaya za mu sake amfani da dakunan karatu na kayan more rayuwa? Mun raba su zuwa wani ma'ajiyar daban, sa'an nan kuma sanya su cikin kunshin Nuget, wanda muka sanya a cikin Artifatory. Tare da kowane canji, taro da bugawa suna faruwa ta atomatik.

Canji daga monolith zuwa microservices: tarihi da aiki

Ayyukanmu sun fara yin la'akari da fakitin abubuwan more rayuwa na ciki kamar yadda na waje suke. Muna zazzage dakunan karatu na waje daga Nuget. Don yin aiki tare da Artifatory, inda muka sanya waɗannan fakitin, mun yi amfani da manajan fakiti biyu. A cikin ƙananan ɗakunan ajiya kuma mun yi amfani da Nuget. A cikin ma'ajiya tare da ayyuka da yawa, mun yi amfani da Paket, wanda ke ba da ƙarin daidaito tsakanin kayayyaki.

Canji daga monolith zuwa microservices: tarihi da aiki

Don haka, ta hanyar yin aiki akan lambar tushe, ɗan canza tsarin gine-gine da raba ma'ajiyar, muna sa ayyukanmu su zama masu zaman kansu.

Matsalolin ababen more rayuwa


Yawancin abubuwan da ke faruwa don matsawa zuwa ƙananan ayyuka suna da alaƙa da abubuwan more rayuwa. Kuna buƙatar turawa ta atomatik, kuna buƙatar sabbin ɗakunan karatu don gudanar da abubuwan more rayuwa.

Shigarwa da hannu a cikin mahalli

Da farko, mun shigar da mafita don mahalli da hannu. Domin sarrafa wannan tsari, mun ƙirƙiri bututun CI/CD. Mun zaɓi tsarin isar da ci gaba saboda ci gaba da turawa ba a yarda da mu ba tukuna daga mahangar hanyoyin kasuwanci. Sabili da haka, ana aiwatar da aikawa don aiki ta amfani da maɓallin, kuma don gwaji - ta atomatik.

Canji daga monolith zuwa microservices: tarihi da aiki

Muna amfani da Atlassian, Bitbucket don ajiyar lambar tushe da Bamboo don gini. Muna son rubuta rubutun gini a cikin Cake saboda daidai yake da C #. Shirye-shiryen da aka ƙera suna zuwa Artifatory, kuma Mai yiwuwa yana zuwa ta atomatik zuwa sabar gwajin, bayan haka ana iya gwada su nan da nan.

Canji daga monolith zuwa microservices: tarihi da aiki

Rarrabe shinge


A wani lokaci, ɗaya daga cikin ra'ayoyin monolith shine samar da katako tare. Muna kuma buƙatar fahimtar abin da za mu yi da kowane rajistan ayyukan da ke kan faifai. An rubuta rajistan ayyukan mu zuwa fayilolin rubutu. Mun yanke shawarar yin amfani da daidaitaccen tari na ELK. Ba mu rubuta wa ELK kai tsaye ta hanyar masu samarwa ba, amma mun yanke shawarar cewa za mu kammala rajistar rubutun kuma mu rubuta ID ɗin ganowa a cikin su azaman mai ganowa, ƙara sunan sabis ɗin, ta yadda waɗannan rajistan ayyukan za a iya rarraba su daga baya.

Canji daga monolith zuwa microservices: tarihi da aiki

Amfani da Filebeat, muna samun damar tattara rajistan ayyukan mu daga sabobin, sannan mu canza su, yi amfani da Kibana don gina tambayoyi a cikin UI kuma mu ga yadda kiran ya gudana tsakanin sabis. Trace ID yana taimakawa sosai da wannan.

Gwaji da gyara ayyuka masu alaƙa


Da farko, ba mu fahimci cikakken yadda ake zaluntar ayyukan da ake haɓakawa ba. Komai ya kasance mai sauƙi tare da monolith; mun gudanar da shi akan injin gida. Da farko sun yi ƙoƙarin yin haka tare da microservices, amma wani lokacin don ƙaddamar da microservice guda ɗaya kuna buƙatar ƙaddamar da wasu da yawa, kuma wannan ba shi da daɗi. Mun gane cewa muna buƙatar matsawa zuwa samfurin inda muka bar kan na'ura na gida kawai sabis ko ayyuka da muke son cirewa. Ana amfani da ragowar ayyukan daga sabobin da suka dace da tsarin aiki tare da samfur. Bayan cirewa, yayin gwaji, ga kowane ɗawainiya, kawai ayyukan da aka canza ana ba su zuwa uwar garken gwaji. Don haka, ana gwada maganin a cikin hanyar da zai bayyana a samarwa a nan gaba.

Akwai sabobin da ke tafiyar da nau'ikan ayyuka kawai. Ana buƙatar waɗannan sabobin idan akwai abubuwan da suka faru, don bincika bayarwa kafin turawa da kuma horo na ciki.

Mun ƙara tsarin gwaji mai sarrafa kansa ta amfani da mashahurin ɗakin karatu na Specflow. Gwaje-gwaje suna gudana ta atomatik ta amfani da NUnit nan da nan bayan turawa daga Mai yiwuwa. Idan ɗaukar hoto cikakke ne ta atomatik, to babu buƙatar gwajin hannu. Ko da yake wani lokacin ana buƙatar ƙarin gwajin hannu. Muna amfani da tags a Jira don tantance waɗanne gwaje-gwajen da za mu yi don takamaiman batu.

Bugu da ƙari, buƙatar gwajin lodi ya ƙaru; a baya an yi shi ne kawai a lokuta da ba kasafai ba. Muna amfani da JMeter don gudanar da gwaje-gwaje, InfluxDB don adana su, da Grafana don gina zane-zane.

Me muka samu?


Da farko, mun kawar da manufar "saki". An tafi tsawon watanni biyu masu ban tsoro lokacin da aka tura wannan yanki a cikin yanayin samarwa, na ɗan lokaci yana ɓata tsarin kasuwanci. Yanzu muna tura ayyuka akan matsakaita kowane kwanaki 1,5, muna haɗa su saboda suna shiga aiki bayan amincewa.

Babu kasawa mai mutuwa a cikin tsarin mu. Idan muka saki microservice tare da kwaro, to aikin da ke tattare da shi zai karye, kuma duk sauran ayyukan ba za su shafa ba. Wannan yana haɓaka ƙwarewar mai amfani sosai.

Za mu iya sarrafa tsarin turawa. Kuna iya zaɓar ƙungiyoyin sabis daban da sauran mafita, idan ya cancanta.

Bugu da kari, mun rage matsala sosai tare da babban layin ingantawa. Yanzu muna da ƙungiyoyin samfura daban waɗanda ke aiki tare da wasu ayyukan da kansu. Tsarin Scrum ya riga ya yi kyau a nan. Ƙungiya ta ƙayyadaddun ƙila ta sami keɓaɓɓen Mai Samfur wanda ke ba da ayyuka gare ta.

Takaitaccen

  • Microservices sun dace sosai don lalata tsarin hadaddun. A cikin tsari, za mu fara fahimtar abin da ke cikin tsarinmu, menene iyakanceccen mahallin da ke akwai, inda iyakokin su ke kwance. Wannan yana ba ku damar rarraba haɓakawa daidai tsakanin kayayyaki da hana rikicewar lamba.
  • Microservices suna ba da fa'idodin ƙungiyoyi. Sau da yawa ana magana game da su kawai a matsayin gine-gine, amma ana buƙatar kowane gine-gine don magance bukatun kasuwanci, kuma ba a kan kansa ba. Sabili da haka, zamu iya cewa microservices sun dace sosai don magance matsaloli a cikin ƙananan ƙungiyoyi, ganin cewa Scrum ya shahara sosai a yanzu.
  • Rabuwa tsari ne mai maimaitawa. Ba za ku iya ɗaukar aikace-aikacen ba kuma kawai raba shi zuwa ƙananan sabis. Samfurin da aka samu ba shi yiwuwa ya yi aiki. Lokacin keɓe ƙananan ayyuka, yana da fa'ida don sake rubuta abin da aka bari, wato, juya shi zuwa lambar da muke so kuma mafi dacewa da bukatun kasuwanci dangane da aiki da sauri.

    Karamin faɗakarwa: Kudin ƙaura zuwa ƙananan ayyuka suna da matuƙar mahimmanci. An dauki lokaci mai tsawo ana magance matsalar ababen more rayuwa kadai. Don haka idan kuna da ƙaramin aikace-aikacen da ba ya buƙatar takamaiman ƙima, sai dai idan kuna da ɗimbin abokan ciniki masu fafatawa don kulawa da lokacin ƙungiyar ku, to, microservices bazai zama abin da kuke buƙata a yau ba. Yana da tsada sosai. Idan kun fara tsari tare da microservices, farashin zai fara zama mafi girma fiye da idan kun fara wannan aikin tare da haɓaka monolith.

    PS Ƙarin labari mai juyayi (kuma kamar a gare ku) - bisa ga mahada.
    Ga cikakken rahoton.

source: www.habr.com

Add a comment