ViennaNET: seti ya maktaba za nyuma

Hello kila mtu!

Sisi ni jumuiya ya wasanidi wa .NET katika Raiffeisenbank na tunataka kuzungumza kuhusu seti ya maktaba za miundombinu kulingana na .NET Core kwa kuunda huduma ndogo kwa haraka kwa mfumo ikolojia mmoja. Waliileta kwa Open Source!

ViennaNET: seti ya maktaba za nyuma

kidogo ya historia

Wakati mmoja tulikuwa na mradi mkubwa wa monolithic, ambao polepole ukageuka kuwa seti ya huduma ndogo (unaweza kusoma juu ya sifa za mchakato huu katika Makala hii) Katika mchakato huo, tulikumbana na tatizo kwamba wakati wa kuunda huduma ndogo ndogo, mara nyingi tulilazimika kunakili suluhu mbalimbali za miundombinu - kama vile kuweka kumbukumbu, kufanya kazi na hifadhidata, WCF, n.k. Timu moja ilifanya kazi kwenye mradi huu, na kila mtu alikuwa tayari amezoea mbinu fulani ya kufanya kazi na miundombinu. Kwa hiyo, tulitenganisha msimbo wa kawaida katika hifadhi tofauti, tukafunga maktaba zilizokusanywa katika vifurushi vya Nuget na kuziweka kwenye hifadhi yetu ya ndani ya Nuget.

Muda ulipita, mradi uligawanyika polepole, na kulikuwa na hamu ya kuunda moduli mpya za upande wa mteja kwenye mfumo wa kisasa wa JS na kuziendesha kwenye kivinjari. Tulianza kuhama kutoka WCF/SOAP hadi REST/HTTP, kwa hivyo tulihitaji maktaba mpya ili kuzindua huduma haraka kulingana na AspNet WebApi. Toleo la kwanza kwenye .Net Framework 4.5 lilifanywa na mbunifu wetu karibu na magoti yake wakati wake wa bure, lakini nje ya sanduku ilifanya iwezekane kuzindua huduma na mistari mitatu katika Program.cs iliyokuwa na idhini (NTLM), ukataji miti, Swagger, IoC/DI kulingana na Castle Windsor, wateja walioboreshwa wa HTTP ambao husambaza vichwa mbalimbali ili kutoa ukataji wa miti kutoka mwisho hadi mwisho katika mradi mzima. Na jambo hili lote linaweza kusanidiwa zaidi moja kwa moja kwenye faili ya usanidi wa huduma.

Walakini, sio kila kitu kilikuwa laini: maktaba hii iligeuka kuwa isiyobadilika sana katika suala la kuanzisha moduli mpya. Kwa mfano, ikiwa unahitaji kuongeza vifaa maalum vya kati, ilibidi uunde mkusanyiko mpya na urithi kutoka kwa darasa la msingi linaloendesha huduma, ambayo ilikuwa ngumu sana. Kwa bahati nzuri, hakukuwa na kesi nyingi kama hizo.

Enzi ya Docker na Kubernetes

Wakati umefika ambapo wimbi la Docker na Kubernetes lilitufikia, ambalo tulitazama kwa karibu: baada ya yote, ilikuwa nafasi nzuri ya kuanza kusonga zaidi pamoja na teknolojia, katika .Net Core. Hii ina maana kwamba tutahitaji miundombinu mipya ili kuendesha huduma: baadhi ya maktaba zimehama kutoka .Net Framework hadi .Net Standard na .Net Core kivitendo bila mabadiliko, baadhi zikiwa na maboresho madogo. Lakini zaidi ya yote nilitaka kurekebisha utendaji unaohusishwa na uzinduzi wa huduma kwenye AspNet Core.

Jambo la kwanza tulilozingatia ni dhana ambayo ingeondoa drawback kuu ya toleo la awali: ukosefu wa kubadilika. Kwa hivyo, iliamuliwa kufanya mfumo mzima wa maktaba kuwa huru na wa kawaida iwezekanavyo na kukusanya huduma zinazohitajika kwa utendaji kama mjenzi.

Lengo kuu ni kuunda mbinu ya umoja inayoelezea jinsi ya kuingiliana na hifadhidata, mabasi na huduma zingine. Tulijaribu kufanya ushirikiano haraka na usio na uchungu, na watengenezaji wanaweza kuzingatia kuandika mantiki ya biashara badala ya miundombinu - tayari iko tayari. Hazina ya pamoja husaidia kuboresha matumizi ya mwingiliano ndani ya timu: wakati miundo mbinu ya ndani inayofanana sana inatumiwa, ni rahisi kujiunga na mchakato wa uundaji wa timu nyingine na kubadilishana utaalamu.

Na kwa nini tunahitaji Open Source?

Tunataka kuonyesha ukomavu wa utaalam wetu na kupokea maoni ya hali ya juu: mtu aliye nje ya benki ataweza kujiletea kitu. Pia tunavutiwa na uundaji wa mazoea ya kufanya kazi na huduma ndogo na DDD kwenye .NET kwenye tasnia; labda mtu atataka kuchukua sehemu fulani za mfumo.

Kwa kweli, ViennaNET

Sasa hebu tuangalie kwa karibu. Msimbo kamili wa chanzo umewekwa hapa.

ViennaNET.WebApi.*

Seti hii ya maktaba inajumuisha "mzizi" ViennaNET.WebApi, iliyo na darasa la wajenzi kwa huduma ya CompanyHostBuilder, na seti ya visanidi ViennaNET.WebApi.Configurators.*, ambayo kila moja inakuruhusu kuongeza na kusanidi utendakazi fulani kwa iliyoundwa. huduma. Miongoni mwa wasanidi unaweza kupata viunganisho vya ukataji miti, uchunguzi, uthibitishaji na aina za idhini, swagger, nk.

ViennaNET.WebApi.Runners.* pia ina vijenzi vya huduma vilivyosanidiwa awali. Vifurushi hivi hukuruhusu kukumbuka kila wakati unapounda huduma mpya ambayo visanidi vinahitaji kuunganishwa. Hata hivyo, hawana kikomo utendaji wa wajenzi wa huduma kwa njia yoyote.

ViennaNET.Mediator.*

Maktaba zinazokuruhusu kuunda basi la kati la ndani kwa amri na maombi ndani ya huduma. Njia hii inakuwezesha kupunguza idadi ya sindano za DI kwa moja, kwa mfano, katika vidhibiti. Kutokana na hili, unaweza kuongeza mapambo mbalimbali kwa maombi, ambayo huunganisha usindikaji wao na kupunguza kiasi cha kanuni.

ViennaNET.Uthibitishaji

Mkutano ulio na seti ya madarasa ya kuunda sheria za uthibitishaji na mlolongo kutoka kwao. Ni rahisi sana kwa kutekeleza uthibitishaji wa kikoa, kwani inakuwezesha kuelezea kila hali ya biashara kwa namna ya utawala rahisi na tofauti.

ViennaNET.Redis

Maktaba iliyo na vifuniko kwa kazi rahisi na Redis kama kache ya kumbukumbu.

Vielelezo vya ViennaNET

Mkusanyiko ulio na madarasa yanayotekeleza muundo wa Uainisho.

Hii sio yote yaliyo kwenye seti yetu. Unaweza kuona wengine kwenye hazina ya GitHub. Tunapanga kutoa maktaba zetu kwa ajili ya kufanya kazi na hifadhidata kwa OpenSource hivi karibuni.

Asante kwa umakini wako, tunatarajia maoni yako na maombi ya kuvuta.

Chanzo: mapenzi.com

Kuongeza maoni