ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Ma kēia ʻatikala, e kamaʻilio wau e pili ana i ka hoʻololi ʻana o ka papahana aʻu e hana nei mai kahi monolith nui i kahi pūʻulu microservices.

Ua hoʻomaka ka papahana i kona mōʻaukala i kahi manawa lōʻihi loa, i ka hoʻomaka ʻana o 2000. Ua kākau ʻia nā mana mua ma Visual Basic 6. Ma hope o ka manawa, ua maopopo ka paʻakikī o ka hoʻomohala ʻana i kēia ʻōlelo i ka wā e hiki mai ana, ʻoiai ʻo ka IDE. a ʻo ka ʻōlelo ponoʻī ʻaʻole i hoʻomohala maikaʻi ʻia. I ka pau ʻana o nā makahiki 2000, ua hoʻoholo ʻia e hoʻololi i ka C# ʻoi aku ka maikaʻi. Ua kākau ʻia ka mana hou e like me ka hoʻoponopono hou ʻana o ka mea kahiko, ua kākau ʻia a nui aʻe nā code ma .NET. Ua hoʻomaka mua ʻia ʻo Backend ma C # i kahi hoʻolālā lawelawe, akā i ka wā o ka hoʻomohala ʻana, ua hoʻohana ʻia nā hale waihona puke maʻamau me ka loiloi, a ua hoʻomaka ʻia nā lawelawe ma kahi kaʻina hana. ʻO ka hopena he palapala noi a mākou i kapa ai he "monolith lawelawe."

ʻO kekahi o nā pōmaikaʻi liʻiliʻi o kēia hui ʻana ʻo ia ka hiki o nā lawelawe ke kāhea aku kekahi i kekahi ma o kahi API waho. Loaʻa nā pono kūpono no ka hoʻololi ʻana i kahi lawelawe kūpono, a i ka wā e hiki mai ana, ʻo ka microservice architecture.

Ua hoʻomaka mākou i kā mākou hana ma ka decomposition ma kahi o 2015. ʻAʻole mākou i hiki i kahi kūlana kūpono - aia kekahi mau ʻāpana o kahi papahana nui hiki ʻole ke kapa ʻia he monoliths, akā ʻaʻole like lākou me nā microservices. Eia naʻe, he mea nui ka holomua.
E kamaʻilio wau ma ka ʻatikala.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Nā mea

Hoʻolālā a me nā pilikia o ka hoʻonā e kū nei


I ka hoʻomaka ʻana, ua like ke ʻano o ka hoʻolālā: ʻo ka UI kahi noi kaʻawale, ua kākau ʻia ka ʻāpana monolithic ma Visual Basic 6, ʻo ka noi .NET kahi hoʻonohonoho o nā lawelawe pili e hana ana me kahi ʻikepili nui.

Nā hemahema o ka hoʻonā mua

Hoʻokahi wahi o ka hāʻule
Loaʻa iā mākou hoʻokahi wahi o ka hāʻule: ua holo ka noi .NET i hoʻokahi kaʻina hana. Inā hāʻule kekahi module, ua pau ka palapala noi a pono e hoʻomaka hou. No ka mea, hoʻokaʻawale mākou i ka nui o nā kaʻina hana no nā mea hoʻohana like ʻole, no ka hemahema o kekahi o lākou, ʻaʻole hiki i nā mea āpau ke hana no kekahi manawa. A i ka hihia o kahi lako polokalamu, ʻaʻole i kōkua ka backup.

Ka laina o nā hoʻomaikaʻi
ʻO kēia drawback he mea hoʻonohonoho. He nui nā mea kūʻai aku i kā mākou noi, a makemake lākou a pau e hoʻomaikaʻi koke i ka hiki. Ma mua, ʻaʻole hiki ke hana like i kēia, a kū nā mea kūʻai aku i ka laina. ʻAʻole maikaʻi kēia kaʻina hana no nā ʻoihana no ka mea pono lākou e hōʻoia i ka waiwai o kā lākou hana. A ua hoʻohana ka hui hoʻomohala i ka manawa i ka hoʻonohonoho ʻana i kēia pila. He nui ka manawa a me ka hoʻoikaika ʻana, a ʻaʻole hiki ke loli koke ka huahana e like me kā lākou makemake.

ʻO ka hoʻohana haʻahaʻa loa i nā kumuwaiwai
Ke hoʻokipa nei i nā lawelawe ma kahi kaʻina hana hoʻokahi, ua kope mau mākou i ka hoʻonohonoho ʻana mai kahi kikowaena i kahi kikowaena. Ua makemake mākou e hoʻokaʻawale i nā lawelawe i hoʻouka nui ʻia i ʻole e hoʻopau i nā kumuwaiwai a loaʻa ka mana maʻalahi o kā mākou hoʻolālā hoʻolālā.

Paʻakikī ke hoʻokō i nā ʻenehana hou
He pilikia i kamaʻāina i nā mea hoʻomohala āpau: aia ka makemake e hoʻokomo i nā ʻenehana hou i loko o ka papahana, akā ʻaʻohe manawa. Me kahi hoʻonā monolithic nui, ʻo kēlā me kēia mea hou o ka hale waihona puke o kēia manawa, ʻaʻole e haʻi i ka hoʻololi ʻana i kahi mea hou, e lilo i mea hana ʻole. He lōʻihi ka manawa e hōʻoia ai i ke alakaʻi o ka hui e lawe mai kēia i nā bonus ʻoi aʻe ma mua o nā aʻalolo pau ʻole.

Paʻakikī i ka hoʻopuka ʻana i nā loli
ʻO kēia ka pilikia nui loa - ke hoʻokuʻu nei mākou i nā hoʻokuʻu i kēlā me kēia mahina ʻelua.
Ua lilo kēlā me kēia hoʻokuʻu i mea pōʻino maoli no ka panakō, ʻoiai nā hoʻāʻo a me nā hana a nā mea hoʻomohala. Ua hoʻomaopopo ka ʻoihana i ka hoʻomaka ʻana o ka pule e hana ʻole kekahi o kāna mau hana. A ua hoʻomaopopo nā mea hoʻomohala i kahi pule o nā hanana koʻikoʻi e kali ana iā lākou.
Ua makemake nā kānaka a pau e hoʻololi i ke kūlana.

Nā manaʻolana mai nā microservices


Hoʻopuka i nā ʻāpana ke mākaukau. ʻO ka hāʻawi ʻana i nā ʻāpana i ka wā e mākaukau ai ma ka hoʻokaʻawale ʻana i ka hopena a me ka hoʻokaʻawale ʻana i nā kaʻina hana like ʻole.

Nā hui huahana liʻiliʻi. He mea koʻikoʻi kēia no ka mea paʻakikī ke mālama ʻana i kahi hui nui e hana ana i ka monolith kahiko. Ua koi ʻia kēlā hui e hana e like me ke kaʻina hana koʻikoʻi, akā makemake lākou i ka noʻonoʻo a me ke kūʻokoʻa. Hiki i nā hui liʻiliʻi ke loaʻa kēia.

Hoʻokaʻawale i nā lawelawe ma nā kaʻina kaʻawale. ʻO ke kūpono, makemake wau e hoʻokaʻawale iā ia i loko o nā ipu, akā ʻo ka nui o nā lawelawe i kākau ʻia ma ka .NET Framework e holo wale ana ma lalo o WindowsKe ʻike ʻia nei nā lawelawe e pili ana i ka .NET Core, akā he kakaikahi nō naʻe o lākou.

Hiki ke hoʻolālā. Makemake mākou e hoʻohui i nā lawelawe i ke ala e pono ai mākou, ʻaʻole i ke ʻano o ke code e koi ai.

Hoʻohana i nā ʻenehana hou. He mea hoihoi kēia i kekahi mea polokalamu.

Nā pilikia hoʻololi


ʻOiaʻiʻo, inā maʻalahi ka wāwahi i kahi monolith i nā microservices, ʻaʻohe pono e kamaʻilio e pili ana iā ia ma nā ʻaha kūkā a kākau i nā ʻatikala. He nui na lua o keia hana, e wehewehe au i na mea nui i keakea ia makou.

Pilikia mua ʻano maʻamau no ka hapa nui o nā monoliths: coherence of business logic. Ke kākau mākou i kahi monolith, makemake mākou e hoʻohana hou i kā mākou mau papa i ʻole e kākau i nā code pono ʻole. A i ka neʻe ʻana i nā microservices, lilo kēia i pilikia: pili pono nā code āpau, a paʻakikī ke hoʻokaʻawale i nā lawelawe.

I ka manawa o ka hoʻomaka ʻana o ka hana, ʻoi aku ka nui o ka waihona ma mua o 500 mau papahana a ʻoi aku ma mua o 700 tausani mau laina code. He hoʻoholo nui kēia a pilikia lua. ʻAʻole hiki ke lawe wale a hoʻokaʻawale iā ia i microservices.

pilikia kolu - nele i ka pono pono. ʻO ka ʻoiaʻiʻo, ua kope lima mākou i ke code kumu i nā kikowaena.

Pehea e neʻe ai mai monolith i microservices


Hoʻolako i nā lawelawe Microservice

ʻO ka mea mua, ua hoʻoholo koke mākou no mākou iho ʻo ka hoʻokaʻawale ʻana o nā microservices he hana iterative. Ua koi mau ʻia mākou e hoʻomohala i nā pilikia ʻoihana i ka like. Pehea mākou e hoʻokō ai i kēia ʻenehana ʻo ia kā mākou pilikia. No laila, hoʻomākaukau mākou no kahi kaʻina hana hou. ʻAʻole ia e hana i kekahi ala ʻē aʻe inā he noi nui kāu a ʻaʻole i mākaukau mua e kākau hou ʻia.

He aha nā ala a mākou e hoʻohana ai e hoʻokaʻawale i nā microservice?

ʻO ke ala mua - hoʻoneʻe i nā modula i loaʻa ma ke ʻano he lawelawe. Ma kēia pili, ua laki mākou: aia nā lawelawe i hoʻopaʻa inoa ʻia i hana me ka hoʻohana ʻana i ka protocol WCF. Ua hoʻokaʻawale ʻia lākou i mau ʻāpana ʻokoʻa. Hoʻokaʻawale mākou iā lākou, hoʻohui i kahi mea hoʻolaha liʻiliʻi i kēlā me kēia hale. Ua kākau ʻia me ka hoʻohana ʻana i ka hale waihona puke ʻo Topshelf maikaʻi loa, e hiki ai iā ʻoe ke holo i ka noi ma ke ʻano he lawelawe a ma ke ʻano he console. He mea maʻalahi kēia no ka debugging no ka mea ʻaʻole koi ʻia nā papahana hou i ka hopena.

Hoʻopili ʻia nā lawelawe e like me ka loiloi ʻoihana, no ka mea ua hoʻohana lākou i nā hui maʻamau a hana pū me kahi waihona maʻamau. ʻAʻole hiki ke kapa ʻia lākou he microservices i ko lākou ʻano maʻemaʻe. Eia naʻe, hiki iā mākou ke hāʻawi i kēia mau lawelawe ma kahi kaʻawale, ma nā kaʻina hana like ʻole. ʻO kēia wale nō ka mea i hiki ai ke hōʻemi i ko lākou mana i kekahi i kekahi, e hōʻemi ana i ka pilikia me ka hoʻomohala like ʻana a me kahi wahi o ka hemahema.

ʻO ka hui me ka mea hoʻokipa hoʻokahi wale nō laina o ke code ma ka papa Polokalamu. Ua hūnā mākou i ka hana me Topshelf ma kahi papa kōkua.

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

       }
    }
}

ʻO ke ala ʻelua e hoʻokaʻawale i nā microservice: hana iā lākou e hoʻoponopono i nā pilikia hou. Inā ʻaʻole ulu ka monolith i ka manawa like, ua maikaʻi loa kēia, ʻo ia ka mea e neʻe nei mākou i ke ala pololei. No ka hoʻoponopono i nā pilikia hou, ua hoʻāʻo mākou e hana i nā lawelawe kaʻawale. Inā loaʻa kahi manawa kūpono, a laila ua hana mākou i nā lawelawe "canonical" e hoʻokele piha i kā lākou ʻikepili ʻikepili, kahi waihona ʻokoʻa.

ʻO mākou, e like me nā mea he nui, hoʻomaka me nā lawelawe hōʻoia a me ka ʻae. He kūpono lākou no kēia. He kūʻokoʻa lākou, ma ke ʻano he kānāwai, loaʻa iā lākou kahi hiʻohiʻona ʻikepili kaʻawale. ʻAʻole lākou e launa pū me ka monolith, huli wale ia iā lākou e hoʻoponopono i kekahi mau pilikia. Ke hoʻohana nei i kēia mau lawelawe, hiki iā ʻoe ke hoʻomaka i ka hoʻololi ʻana i kahi hoʻolālā hou, debug i ka ʻōnaehana ma luna o lākou, e hoʻāʻo i kekahi mau ala e pili ana i nā hale waihona puke, etc. ʻAʻohe o mākou hui i kā mākou hui i hiki ʻole ke hana i kahi lawelawe hōʻoia.

ʻO ke ala ʻekolu e hoʻokaʻawale i nā microservicesʻO ka mea a mākou e hoʻohana ai he mea kikoʻī iki iā mākou. ʻO kēia ka wehe ʻana i ka loiloi ʻoihana mai ka papa UI. ʻO kā mākou noi UI nui ka papapihi; ʻo ia, e like me ke kua hope, ua kākau ʻia ma C #. Ua hana hewa nā mea hoʻomohala i kēlā me kēia manawa a hoʻololi i nā ʻāpana o ka logic i ka UI pono e noho ma ka hope a hoʻohana hou ʻia.

Inā ʻoe e nānā i kahi hiʻohiʻona maoli mai ke code o ka ʻāpana UI, hiki iā ʻoe ke ʻike i ka hapa nui o kēia hoʻonā i loaʻa i ka loiloi ʻoihana maoli e pono ai i nā kaʻina hana ʻē aʻe, ʻaʻole wale no ke kūkulu ʻana i ka palapala UI.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Aia wale nō ka loiloi UI maoli ma nā laina hope loa. Ua hoʻoili mākou iā ia i ke kikowaena i hiki ke hoʻohana hou ʻia, a laila e hōʻemi i ka UI a loaʻa i ka hoʻolālā kūpono.

ʻO ke ala ʻehā a koʻikoʻi loa e hoʻokaʻawale i nā microservices, ka mea e hiki ai ke ho'ēmi i ka monolith,ʻo ia ka weheʻana i nā lawelawe i loaʻa me ka hana. Ke lawe mākou i nā modula e like me kēia, ʻaʻole like ka hopena i ka makemake o nā mea hoʻomohala, a ua lilo paha ke kaʻina hana ʻoihana mai ka wā i hana ʻia ai ka hana. Me ka refactoring, hiki iā mākou ke kākoʻo i kahi kaʻina ʻoihana hou no ka mea ke loli mau nei nā koi ʻoihana. Hiki iā mākou ke hoʻomaikaʻi i ke kumu kumu, wehe i nā hemahema i ʻike ʻia, a hana i kahi kumu hoʻohālike maikaʻi aʻe. Nui nā pōmaikaʻi e loaʻa ana.

ʻO ka hoʻokaʻawale ʻana i nā lawelawe mai ka hana ʻana ua pili pili ʻole i ka manaʻo o ka pōʻaiapili palena. He manaʻo kēia mai ka Domain Driven Design. ʻO ia hoʻi, he ʻāpana o ke kŘkohu kikowaena kahi i wehewehe kūʻokoʻa ai nā huaʻōlelo a pau o ka ʻōlelo hoʻokahi. E nānā kākou i ke ʻano o ka ʻinikua a me nā bila. Loaʻa iā mākou kahi noi monolithic, a pono mākou e hana me ka moʻokāki ma ka ʻinikua. Manaʻo mākou e ʻike ka mea hoʻomohala i kahi papa moʻokāki i loaʻa i kahi hui ʻē aʻe, e kuhikuhi iā ia mai ka papa Inikua, a loaʻa iā mākou ke code hana. E mālama ʻia ka loina DRY, e hana wikiwiki ʻia ka hana me ka hoʻohana ʻana i ke code i loaʻa.

ʻO ka hopena, ua hoʻohuli ʻia nā pōʻaiapili o nā moʻokāki a me ka ʻinikua pili. Ke puka mai nei nā koi hou, e hoʻopilikia kēia hui ʻana i ka hoʻomohala ʻana, e hoʻonui ana i ka paʻakikī o ka loiloi ʻoihana paʻakikī. No ka hoʻoponopono i kēia pilikia, pono ʻoe e ʻimi i nā palena ma waena o nā pōʻaiapili ma ke code a wehe i kā lākou mau hewa. No ka laʻana, i loko o ka pōʻaiapili inikua, hiki ke lawa ka helu helu 20-helu Central Bank a me ka lā i wehe ʻia ai ka waihona.

No ka hoʻokaʻawale ʻana i kēia mau palena palena mai kekahi i kekahi a hoʻomaka i ke kaʻina hana o ka hoʻokaʻawale ʻana i nā microservices mai kahi hopena monolithic, ua hoʻohana mākou i kahi ala e like me ka hana ʻana i nā API waho i loko o ka noi. Inā mākou i ʻike e lilo kekahi module i microservice, i hoʻololi ʻia i loko o ke kaʻina hana, a laila ua kāhea koke mākou i ka loiloi i pili i kahi pōʻaiapili palena ʻē aʻe ma o nā kelepona waho. No ka laʻana, ma o REST a i ʻole WCF.

Ua hoʻoholo paʻa mākou ʻaʻole mākou e pale i nā code e koi ai i nā kālepa hoʻolaha. I kā mākou hihia, ua maʻalahi ka hahai ʻana i kēia lula. ʻAʻole mākou i ʻike i nā kūlana kahi e pono ai ka hoʻokaʻawale ʻana i nā kālepa - ua lawa ka kūlike hope ma waena o nā modules.

E nānā kākou i kekahi laʻana. Loaʻa iā mākou ka manaʻo o kahi orchestrator - kahi pipeline e hana ana i ke ʻano o ka "noi". Hoʻokumu ʻo ia i kahi mea kūʻai aku, kahi moʻokāki a me kahi kāleka panakō. Inā hoʻokumu maikaʻi ʻia ka mea kūʻai aku a me ka moʻokāki, akā hāʻule ka hana kāleka, ʻaʻole neʻe ka noi i ke kūlana "holomua" a noho mau i ke kūlana "kāleka ʻaʻole i hana ʻia". I ka wā e hiki mai ana, e kiʻi a hoʻopau ka hana hope. Ua kū ʻole ka ʻōnaehana no kekahi manawa, akā ʻoluʻolu mākou i kēia.

Inā kū mai kahi kūlana i ka wā e pono ai e mālama mau i kahi hapa o ka ʻikepili, e hele paha mākou no ka hoʻohui ʻana i ka lawelawe i mea e hana ai i ka hana hoʻokahi.

E nānā kākou i kahi laʻana o ka hoʻokaʻawale ʻana i kahi microservice. Pehea e hiki ai iā ʻoe ke lawe mai i ka hana me ka palekana? Ma kēia hiʻohiʻona, loaʻa iā mākou kahi ʻāpana ʻokoʻa o ka ʻōnaehana - kahi module lawelawe uku, kekahi o nā ʻāpana code a mākou e makemake ai e hana i ka microservice.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

ʻO ka mea mua, hana mākou i kahi microservice ma ke kākau hou ʻana i ke code. Ke hoʻomaikaʻi nei mākou i kekahi mau mea a mākou i hauʻoli ʻole ai. Hoʻokō mākou i nā koi ʻoihana hou mai ka mea kūʻai aku. Hoʻohui mākou i kahi API Gateway i ka pilina ma waena o ka UI a me ka hope, e hāʻawi i ka hoʻouna kelepona.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

A laila, hoʻokuʻu mākou i kēia hoʻonohonoho i ka hana, akā ma kahi mokuʻāina. Ke hana nei ka hapa nui o kā mākou mea hoʻohana me nā kaʻina hana ʻoihana kahiko. No nā mea hoʻohana hou, ke kūkulu nei mākou i kahi mana hou o ka noi monolithic i loaʻa ʻole kēia kaʻina hana. ʻO ka mea nui, loaʻa iā mākou kahi hui o kahi monolith a me kahi microservice e hana ana ma ke ʻano he pailaka.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Me ka hoʻokele holomua, hoʻomaopopo mākou he hana maoli ka hoʻonohonoho hou, hiki iā mākou ke wehe i ka monolith kahiko mai ka hoʻohālikelike a waiho i ka hoʻonohonoho hou ma kahi o ka hopena kahiko.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Ma ka huina, hoʻohana mākou i nā ʻano hana āpau no ka hoʻokaʻawale ʻana i ke kumu kumu o kahi monolith. ʻAe lākou a pau iā mākou e hōʻemi i ka nui o nā ʻāpana o ka noi a unuhi iā lākou i nā hale waihona puke hou, e hana ai i ka code kumu maikaʻi.

Ke hana nei me ka waihona


Hiki ke hoʻokaʻawale ʻia ka ʻikepili ma mua o ke code kumu, no ka mea, ʻaʻole i loko o ka schema o kēia manawa wale nō, akā, i hōʻiliʻili ʻia ka ʻikepili mōʻaukala.

ʻO kā mākou waihona, e like me nā mea ʻē aʻe, loaʻa kekahi drawback koʻikoʻi - kona nui nui. Ua hoʻolālā ʻia kēia ʻikepili e like me ka loina pāʻoihana paʻakikī o kahi monolith, a me nā pilina i hōʻiliʻili ʻia ma waena o nā papa o nā ʻano like ʻole.

I kā mākou hihia, ma luna o nā pilikia a pau (ka waihona waihona nui, nā pilina he nui, i kekahi manawa ʻike ʻole ʻia nā palena ma waena o nā papa), ua kū mai kahi pilikia i loko o nā papahana nui: ka hoʻohana ʻana i ka template database shared. Lawe ʻia ka ʻikepili mai nā papa ma o ka nānā ʻana, ma o ka hana hou ʻana, a hoʻouna ʻia i nā ʻōnaehana ʻē aʻe kahi e pono ai kēia hana hou. ʻO ka hopena, ʻaʻole hiki iā mākou ke hoʻoneʻe i nā papa i loko o kahi schema kaʻawale no ka mea ua hoʻohana ikaika ʻia lākou.

ʻO ka mahele like i loko o nā pōʻaiapili palena i ke code kōkua iā mākou i ka hoʻokaʻawale. Hāʻawi pinepine ia iā mākou i kahi manaʻo maikaʻi loa e pili ana i ka wāwahi ʻana i ka ʻikepili ma ka pae waihona. Hoʻomaopopo mākou i nā papa e pili ana i kahi pōʻaiapili palena ʻia a ʻo wai i kekahi.

Ua hoʻohana mākou i ʻelua mau ʻano honua no ka hoʻokaʻawale ʻana i ka waihona: ka hoʻokaʻawale ʻana i nā papa i loaʻa a me ka hoʻokaʻawale ʻana me ka hana.

ʻO ka hoʻokaʻawale ʻana i nā papa ʻaina he ala maikaʻi ia e hoʻohana ai inā maikaʻi ke ʻano o ka ʻikepili, kūpono i nā koi ʻoihana, a hauʻoli nā mea a pau. I kēia hihia, hiki iā mākou ke hoʻokaʻawale i nā papa i loaʻa i kahi schema kaʻawale.

Pono kahi keʻena me ka hoʻoponopono ʻana i ka wā i loli nui ai ke ʻano ʻoihana, a ʻaʻole e māʻona hou nā papa ʻaina iā mākou.

Ka hoʻokaʻawale ʻana i nā papa i loaʻa. Pono mākou e hoʻoholo i ka mea a mākou e hoʻokaʻawale ai. Me ka ʻole o kēia ʻike, ʻaʻohe mea e hana, a ma ʻaneʻi e kōkua ka hoʻokaʻawale ʻana o nā pōʻaiapili palena i ke code. Ma ke ʻano he lula, inā hiki iā ʻoe ke hoʻomaopopo i nā palena o nā pōʻaiapili i loko o ke code kumu, e akaka nā papa e hoʻokomo ʻia i ka papa inoa no ka ʻoihana.

E noʻonoʻo kākou he hoʻonā ʻelua monolith modules e launa pū me hoʻokahi waihona. Pono mākou e hōʻoia i hoʻokahi wale nō module e launa pū me ka ʻāpana o nā papa i hoʻokaʻawale ʻia, a hoʻomaka kekahi e launa pū me ia ma o ka API. I ka hoʻomaka ʻana, ua lawa ka hoʻopaʻa ʻana wale ʻia ma o ka API. He kūlana kūpono kēia no mākou e kamaʻilio e pili ana i ke kūʻokoʻa o nā microservices. Hiki ke hoʻomau i nā pilina heluhelu inā ʻaʻohe pilikia nui.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

ʻO ka hana hou aʻe, hiki iā mākou ke hoʻokaʻawale i ka ʻāpana o ke code e hana me nā papa i hoʻokaʻawale ʻia, me ka ʻole o ka hana ʻana, i loko o kahi microservice kaʻawale a holo i loko o kahi kaʻina kaʻawale, kahi pahu. He lawelawe ʻokoʻa kēia me kahi pilina i ka waihona monolith a me kēlā mau papa i pili ʻole iā ia. Hoʻopili mau ka monolith no ka heluhelu ʻana me ka ʻāpana hiki ke wehe.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Ma hope e wehe mākou i kēia pili, ʻo ia hoʻi, e hoʻoili ʻia ka ʻikepili mai kahi noi monolithic mai nā papa i hoʻokaʻawale ʻia i ka API.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Ma hope aʻe, e koho mākou mai ka waihona maʻamau i nā papa e hana ai ka microservice hou. Hiki iā mākou ke hoʻoneʻe i nā papa i kahi schema ʻokoʻa a i ʻole i kahi waihona kino kino. Aia nō kahi pilina heluhelu ma waena o ka microservice a me ka waihona monolith, akā ʻaʻohe mea e hopohopo ai, ma kēia hoʻonohonoho hiki ke ola no ka manawa lōʻihi.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

ʻO ka hana hope loa e wehe loa i nā pilina a pau. I kēia hihia, pono mākou e neʻe i ka ʻikepili mai ka waihona nui. I kekahi manawa makemake mākou e hoʻohana hou i kekahi mau ʻikepili a i ʻole nā ​​​​papa kuhikuhi i hoʻopili ʻia mai nā ʻōnaehana waho i nā waihona. Hana kēia iā mākou i kēlā me kēia manawa.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

ʻOihana hana. Ua like loa kēia ʻano me ka mea mua, aia wale nō ma ka ʻaoʻao hope. Hoʻokaʻawale koke mākou i kahi waihona hou a me kahi microservice hou e launa pū me ka monolith ma o kahi API. Akā i ka manawa like, aia kahi papa o ka waihona waihona a mākou e makemake ai e holoi i ka wā e hiki mai ana. ʻAʻole pono mākou iā ia; ua hoʻololi mākou iā ia i ke kumu hoʻohālike hou.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

No ka holo ʻana o kēia papahana, pono paha mākou i kahi manawa hoʻololi.

A laila ʻelua mau ala hiki.

ʻO ka mua: hoʻopālua mākou i nā ʻikepili a pau i ka ʻikepili hou a me nā mea kahiko. I kēia hihia, loaʻa iā mākou ka hoʻihoʻi hou ʻana o ka ʻikepili a hiki mai nā pilikia synchronization. Akā hiki iā mākou ke lawe i ʻelua mau mea kūʻai aku. E hana kekahi me ka mana hou, ʻo kekahi me ka mea kahiko.

ʻO ka lua: hoʻokaʻawale mākou i ka ʻikepili e like me kekahi mau ʻoihana ʻoihana. No ka laʻana, loaʻa iā mākou nā huahana 5 i ka ʻōnaehana i mālama ʻia i ka waihona kahiko. Hoʻonoho mākou i ke ono i loko o ka hana ʻoihana hou i kahi waihona hou. Akā, pono mākou i kahi API Gateway e hoʻonohonoho i kēia ʻikepili a hōʻike i ka mea kūʻai aku i hea a me ka mea e loaʻa ai.

Ke hana nei nā ala ʻelua, koho ma muli o ke kūlana.

Ma hope o ka maopopo ʻana ua hana nā mea a pau, hiki ke hoʻopau ʻia ka ʻāpana o ka monolith e hana pū me nā hale waihona waihona.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

ʻO ka hana hope loa, ʻo ia ka wehe ʻana i nā hale ʻikepili kahiko.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

No ka hōʻuluʻuluʻana, hiki iā mākou ke'ōlelo he pilikia ko mākou me kaʻikepili: paʻakikī ke hana me ia i ka hoʻohālikelikeʻana i ke kumu kumu,ʻoi aku ka paʻakikī o ka māheleʻana, akā hiki ke hanaʻia. Ua loaʻa iā mākou kekahi mau ala e hiki ai iā mākou ke hana i kēia me ka palekana, akā ʻoi aku ka maʻalahi o ka hana hewa me ka ʻikepili ma mua o ka code kumu.

Ke hana nei me ka code kumu


ʻO kēia ke ʻano o ke kiʻi kumu kumu i ka wā i hoʻomaka ai mākou e nānā i ka papahana monolithic.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Hiki ke hoʻokaʻawale ʻia i ʻekolu papa. He papa kēia o nā modules i hoʻokuʻu ʻia, nā plugins, nā lawelawe a me nā hana pilikino. ʻO kaʻoiaʻiʻo, he mau helu komo kēia i loko o kahi hopena monolithic. Ua hoʻopaʻa paʻa ʻia lākou a pau me kahi papa maʻamau. Loaʻa iā ia ka loiloi pāʻoihana i kaʻana like nā lawelawe a me nā pilina he nui. Hoʻohana ʻia kēlā me kēia lawelawe a me ka plugin a hiki i ka 10 a i ʻole nā ​​hui maʻamau, e pili ana i ko lākou nui a me ka noʻonoʻo o nā mea hoʻomohala.

Laki mākou i ka loaʻa ʻana o nā hale waihona puke i hiki ke hoʻohana ʻokoʻa.

I kekahi manawa ua ala mai kahi kūlana inā ʻaʻole i pili maoli kekahi mau mea maʻamau i kēia papa, akā he mau hale waihona puke. Ua hoʻoholo ʻia kēia ma ka hoʻololi ʻana i ka inoa.

ʻO ka manaʻo nui loa ʻo ia nā pōʻaiapili palena. Ua hui pū ʻia nā pōʻaiapili 3-4 i hoʻokahi hui maʻamau a hoʻohana kekahi i kekahi i loko o nā hana ʻoihana like. Pono e hoʻomaopopo i kahi e hiki ai ke hoʻokaʻawale ʻia a me nā palena, a me ka mea e hana hou ai me ka palapala ʻana i kēia māhele i nā hui code kumu.

Ua haku mākou i kekahi mau lula no ke kaʻina hoʻokaʻawale code.

ʻO ka mua: ʻAʻole mākou makemake hou e kaʻana like i ka loiloi ʻoihana ma waena o nā lawelawe, nā hana a me nā plugins. Makemake mākou e hana kūʻokoʻa i ka loiloi ʻoihana i loko o nā microservices. ʻO Microservices, ma ka ʻaoʻao ʻē aʻe, ua manaʻo maikaʻi ʻia nā lawelawe e kū kūʻokoʻa kūʻokoʻa. Ke manaʻoʻiʻo nei au he mea ʻino kēia ala, a paʻakikī ke hoʻokō, no ka mea, no ka laʻana, e hoʻopili ʻia nā lawelawe ma C # e kahi waihona maʻamau. Ua kākau ʻia kā mākou ʻōnaehana ma C#; ʻaʻole mākou i hoʻohana i nā ʻenehana ʻē aʻe. No laila, ua hoʻoholo mākou e hiki iā mākou ke hoʻohana i nā hui loea maʻamau. ʻO ka mea nui ʻaʻole lākou i loko o nā ʻāpana o ka loiloi ʻoihana. Inā loaʻa iā ʻoe kahi wīwī maʻalahi ma luna o ka ORM āu e hoʻohana nei, a laila ʻoi aku ka pipiʻi o ke kope ʻana mai ka lawelawe a i ka lawelawe.

ʻO kā mākou hui he mea makemake i ka hoʻolālā domain-driven, no laila ua kūpono ka hoʻolālā aniani no mākou. ʻO ke kumu o kā mākou lawelawe, ʻaʻole ia ka papa komo ʻikepili, akā he hui me ka logic domain, aia wale nō ka loiloi ʻoihana a ʻaʻohe pili me ka ʻōnaehana. I ka manawa like, hiki iā mākou ke hoʻololi kūʻokoʻa i ka hui domain e hoʻoponopono i nā pilikia pili i nā frameworks.

I kēia manawa ua loaʻa iā mākou ko mākou pilikia koʻikoʻi mua. Pono ka lawelawe e kuhikuhi i hoʻokahi hui domain, makemake mākou e hoʻokaʻawale i ka loiloi, a ua hoʻopilikia nui ke kumu DRY iā mākou ma aneʻi. Ua makemake nā mea hoʻomohala e hoʻohana hou i nā papa mai nā hui e pili ana e pale i ka hana hou ʻana, a ma muli o ka hopena, ua hoʻomaka ka hoʻopili hou ʻana o nā kāʻei kapu. Ua nānā mākou i nā hopena a ua hoʻoholo mākou aia paha ka pilikia ma kahi o ka waihona waihona waihona kumu. Loaʻa iā mākou kahi waihona nui i loaʻa nā code kumu āpau. ʻO ka hoʻonā no ka papahana holoʻokoʻa he paʻakikī loa ka hui ʻana ma kahi mīkini kūloko. No laila, ua hana ʻia nā ʻāpana liʻiliʻi liʻiliʻi no nā ʻāpana o ka papahana, a ʻaʻohe mea i pāpā i ka hoʻohui ʻana i kahi hui maʻamau a i ʻole ka ʻāina iā lākou a hoʻohana hou iā lākou. ʻO ka mea hana wale nō i ʻae ʻole iā mākou e hana i kēia, ʻo ka loiloi code. Akā i kekahi manawa ua hāʻule nō hoʻi.

A laila hoʻomaka mākou e neʻe i kahi hoʻohālike me nā waihona ʻokoʻa. ʻAʻole kahe hou ka loiloi pāʻoihana mai ka lawelawe i ka lawelawe, ua kūʻokoʻa maoli nā kikowaena. Kākoʻo maopopo ʻia nā pōʻaiapili palena. Pehea mākou e hoʻohana hou ai i nā hale waihona puke? Hoʻokaʻawale mākou iā lākou i kahi waihona ʻokoʻa, a laila hoʻokomo iā lākou i loko o nā pūʻulu Nuget, a mākou i hoʻokomo ai i Artifactory. Me ka hoʻololi ʻana, hiki i ka hui ʻana a me ka hoʻolaha ʻana.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Ua hoʻomaka kā mākou lawelawe e kuhikuhi i nā pūʻolo hoʻomohala kūloko e like me nā mea waho. Hoʻoiho mākou i nā hale waihona puke waho mai Nuget. No ka hana pū ʻana me Artifactory, kahi i waiho ai mākou i kēia mau pūʻolo, ua hoʻohana mākou i ʻelua mau pūʻulu mana. Ma nā waihona liʻiliʻi ua hoʻohana pū mākou iā Nuget. I loko o nā waihona me nā lawelawe he nui, ua hoʻohana mākou i ka Paket, kahi e hāʻawi ai i nā ʻano like ʻole ma waena o nā modula.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

No laila, ma ka hana ʻana i ke code kumu, hoʻololi iki i ka hoʻolālā ʻana a me ka hoʻokaʻawale ʻana i nā waihona, hoʻolilo mākou i kā mākou lawelawe i ke kūʻokoʻa.

Nā pilikia hoʻolālā


ʻO ka hapa nui o nā haʻahaʻa i ka neʻe ʻana i nā microservices pili i nā ʻōnaehana. Pono ʻoe i ka hoʻolaha ʻana, pono ʻoe i nā hale waihona puke hou e holo i ka ʻōnaehana.

Hoʻokomo lima ma nā kaiapuni

I ka hoʻomaka ʻana, hoʻokomo lima mākou i ka hopena no nā kaiapuni. No ka hoʻokaʻawale ʻana i kēia kaʻina hana, hana mākou i kahi pipeline CI/CD. Ua koho mākou i ke kaʻina hoʻouna hoʻomau no ka mea ʻaʻole i ʻae ʻia ka hoʻomau mau ʻana no mākou mai ka ʻike o nā kaʻina ʻoihana. No laila, lawe ʻia ka hoʻouna ʻana no ka hana me ke pihi, a no ka hoʻāʻo ʻana - maʻalahi.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Hoʻohana mākou iā Atlassian, Bitbucket no ka mālama ʻana i nā code kumu a me ka Bamboo no ke kūkulu ʻana. Makemake mākou e kākau i nā palapala kūkulu ma Cake no ka mea like ia me C #. Hele mai nā pūʻolo i hoʻomākaukau ʻia i Artifactory, a hele koke ʻo Ansible i nā kikowaena hoʻāʻo, a laila hiki ke hoʻāʻo koke ʻia.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Hoʻokaʻawale logging


I kekahi manawa, ʻo kekahi o nā manaʻo o ka monolith ʻo ia ka hāʻawi ʻana i ka logging kaʻana like. Pono mākou e hoʻomaopopo i ka mea e hana ai me nā lāʻau pākahi ma luna o nā disks. Ua kākau ʻia kā mākou mau moʻolelo i nā faila kikokikona. Ua hoʻoholo mākou e hoʻohana i kahi waihona ELK maʻamau. ʻAʻole mākou i kākau pololei iā ELK ma o nā mea hoʻolako, akā ua hoʻoholo mākou e hoʻololi i nā moʻolelo kikokikona a kākau i ka trace ID i loko o lākou ma ke ʻano he mea hōʻike, hoʻohui i ka inoa lawelawe, i hiki ke hoʻopaʻa ʻia kēia mau log ma hope.

ʻO ka hoʻololi mai ka monolith i nā microservices: ka mōʻaukala a me ka hana

Me Filebeat hiki iā mākou ke hōʻiliʻili i kā mākou mau log mai nā kikowaena, a laila hoʻololi iā lākou, e hoʻohana iā Kibana e kūkulu i nā nīnau ma ka UI, a ʻike pehea i hoʻokele ʻia ai ke kāhea ma waena o nā lawelawe. He kōkua nui nā ID Trace no kēia.

ʻO ka hoʻāʻo ʻana a me ka hoʻopau ʻana i nā lawelawe pili


I ka hoʻomaka ʻana, ʻaʻole maopopo mākou i ke ʻano o ka debug i nā lawelawe i kūkulu ʻia. Ua maʻalahi nā mea a pau me ka monolith; holo mākou ma kahi mīkini kūloko. I ka wā mua ua hoʻāʻo lākou e hana like me nā microservices, akā i kekahi manawa e hoʻomaka piha i kahi microservice pono ʻoe e hoʻomaka i kekahi mau mea ʻē aʻe, a he mea kūpono ʻole kēia. Ua ʻike mākou pono mākou e neʻe i kahi hoʻohālike a mākou e waiho ai ma ka mīkini kūloko wale nō ka lawelawe a i ʻole nā ​​​​lawelawe a mākou e makemake ai e debug. Hoʻohana ʻia nā lawelawe i koe mai nā kikowaena e kūlike i ka hoʻonohonoho me ka prod. Ma hope o ka debugging, i ka wā o ka hoʻāʻo ʻana, no kēlā me kēia hana, hāʻawi ʻia nā lawelawe i hoʻololi ʻia i ka server hoʻāʻo. No laila, hoʻāʻo ʻia ka hopena ma ke ʻano e ʻike ʻia ai i ka hana ʻana i ka wā e hiki mai ana.

Aia nā kikowaena e holo wale i nā mana hana o nā lawelawe. Pono kēia mau kikowaena inā loaʻa nā hanana, e nānā i ka lawe ʻana ma mua o ka hoʻolaha ʻana a no ka hoʻomaʻamaʻa kūloko.

Ua hoʻohui mākou i kahi kaʻina hoʻāʻo automated me ka hoʻohana ʻana i ka waihona Specflow kaulana. Holo koke nā ho'āʻo me ka hoʻohana ʻana iā NUnit ma hope koke o ka lawe ʻana mai Ansible. Inā holo piha ka uhi hana, a laila ʻaʻohe pono o ka hoʻāʻo lima. ʻOiai i kekahi manawa koi ʻia nā hoʻāʻo manual hou. Hoʻohana mākou i nā hōʻailona ma Jira e hoʻoholo ai i nā hoʻokolohua e holo ai no kahi pilikia kikoʻī.

Hoʻohui ʻia, ua hoʻonui ʻia ka pono no ka hoʻāʻo ʻana i ka ukana; ma mua i hana ʻia i nā hihia liʻiliʻi wale nō. Hoʻohana mākou iā JMeter e holo i nā hoʻokolohua, InfluxDB e mālama iā lākou, a me Grafana e kūkulu i nā kiʻi kaʻina hana.

He aha kā mākou i loaʻa ai?


ʻO ka mea mua, ua kāpae mākou i ka manaʻo o ka "hoʻokuʻu". Ua hala ʻelua mahina i hoʻokuʻu ʻia i ka wā i kau ʻia ai kēia colossus i kahi ʻenehana hana, e hoʻopau i nā kaʻina hana ʻoihana. I kēia manawa, hoʻolaha mākou i nā lawelawe ma ka awelika i kēlā me kēia 1,5 mau lā, e hui pū ana iā lākou no ka mea hele lākou i ka hana ma hope o ka ʻae ʻia.

ʻAʻohe pōʻino make i kā mākou ʻōnaehana. Inā hoʻokuʻu mākou i kahi microservice me kahi bug, a laila e haki ka hana e pili ana me ia, a ʻaʻole e hoʻopilikia ʻia nā hana ʻē aʻe. Hoʻomaikaʻi nui kēia i ka ʻike mea hoʻohana.

Hiki iā mākou ke hoʻomalu i ke ʻano hoʻolaha. Hiki iā ʻoe ke koho i nā hui o nā lawelawe ma kahi kaʻawale mai ke koena o ka hopena, inā pono.

Eia kekahi, ua hōʻemi nui mākou i ka pilikia me kahi laina nui o nā hoʻomaikaʻi. Loaʻa iā mākou nā hui huahana ʻokoʻa e hana kūʻokoʻa me kekahi o nā lawelawe. Ua kūpono ke kaʻina hana Scrum maanei. Hiki i kekahi hui kiko'ī ke loaʻa i kahi mea kūʻai huahana ʻokoʻa nāna e hāʻawi i nā hana iā ia.

Hōʻuluʻulu

  • Ua kūpono nā Microservices no ka decomposing system complex. Ma ke kaʻina hana, hoʻomaka mākou e hoʻomaopopo i ka mea i loko o kā mākou ʻōnaehana, he aha nā pōʻaiapili i kaupalena ʻia, kahi e waiho ai ko lākou mau palena. ʻAe kēia iā ʻoe e puʻunaue pono i nā hoʻomaikaʻi ma waena o nā modula a pale i ka huikau code.
  • Hāʻawi nā Microservices i nā pono hoʻonohonoho. Ua kamaʻilio pinepine ʻia lākou ma ke ʻano he hoʻolālā wale nō, akā pono kekahi hale hana e hoʻoponopono i nā pono ʻoihana, ʻaʻole ma kāna iho. No laila, hiki iā mākou ke ʻōlelo ua kūpono nā microservices no ka hoʻoponopono ʻana i nā pilikia i nā hui liʻiliʻi, ʻoiai ua kaulana loa ʻo Scrum i kēia manawa.
  • ʻO ka hoʻokaʻawale ʻana he hana hou. ʻAʻole hiki iā ʻoe ke lawe i kahi noi a hoʻokaʻawale iā ia i nā microservices. ʻAʻole hiki ke hoʻohana ʻia ka huahana hopena. I ka hoʻolaʻa ʻana i nā microservices, ʻoi aku ka maikaʻi o ka kākau hou ʻana i ka hoʻoilina i loaʻa, ʻo ia hoʻi, e hoʻololi iā ia i code a mākou e makemake ai a ʻoi aku ka maikaʻi o ka hoʻokō ʻana i nā pono ʻoihana e pili ana i ka hana a me ka wikiwiki.

    ʻO kahi hōʻailona liʻiliʻi: ʻO nā kumukūʻai o ka neʻe ʻana i nā microservices he mea nui loa. Ua lōʻihi ka hoʻoponopono ʻana i ka pilikia ʻoihana wale nō. No laila, inā loaʻa iā ʻoe kahi noi liʻiliʻi ʻaʻole koi i ka scaling kikoʻī, ke ʻole ka nui o nā mea kūʻai aku e hoʻokūkū nei no ka nānā a me ka manawa o kāu hui, a laila ʻaʻole ʻo microservice ka mea āu e pono ai i kēia lā. He pipiʻi loa. Inā hoʻomaka ʻoe i ke kaʻina hana me nā microservices, a laila ʻoi aku ka kiʻekiʻe o nā kumukūʻai ma mua o ka hoʻomaka ʻana i ka papahana like me ka hoʻomohala ʻana o kahi monolith.

    PS He moʻolelo noʻonoʻo hou aʻe (a me he mea lā no ʻoe iho) - e like me loulou.
    Eia ka mana piha o ka hoike.

Source: www.habr.com

E kūʻai i ka hoʻokipa hilinaʻi no nā pūnaewele me ka pale DDoS, nā kikowaena VPS VDS 🔥 E kūʻai i ka hoʻokipa pūnaewele hilinaʻi me ka pale DDoS, nā kikowaena VPS VDS | ProHoster