ViennaNET: raamatukogude kogum backend’ile

Tere kÔigile!

Me oleme .NET-arendajate kogukond Raiffeisenbankist ja tahame rÀÀkida .NET Core'i infrastruktuuriraamatukogudest, mis vĂ”imaldavad kiiresti luua mikroteenuseid ĂŒhes ekosĂŒsteemis. Oleme selle viinud avatud lĂ€htekoodiga!

ViennaNET: raamatukogude kogum backend’ile

Enne kui liigume edasi

Kusagil oli meil suur monoliitne projekt, mis muutus jĂ€rk-jĂ€rgult mikroteenuste kogumiks (selle protsessi kohta saab lugeda selles artiklis). Protsessi kĂ€igus kohtasime probleemi, et uute mikroteenuste loomisel pidime sageli kopeerima erinevaid infrastruktuuri lahendusi – nagu logimise seadistamine, andmebaasi kasutamine, WCF jne. Selle projekti kallal töötas ĂŒks meeskond ja kĂ”ik olid harjunud teatud kindla lĂ€henemisega infrastruktuuri loomisel. SeetĂ”ttu eraldasime ĂŒhise koodi eraldi repositooriumisse, kokku pandud raamatukogud pakkisime Nuget-pakettideks ja paigutasime meie sisemisse Nuget-hoidlasse.

Aeg möödus, projekt puhkes mitmeks osaks, tekkis soov luua uusi kliendipoolseid mooduleid kaasaegses Js-raamistikus ja kĂ€ivitada neid brauseris. Me alustasime ĂŒleminekut WCF/SOAP-ist REST/HTTP-le, seetĂ”ttu vajasime uusi raamatukogusid, et kiiresti kĂ€ivitada teenuseid AspNet WebApi baasil. Esimene versioon .Net Framework 4.5-lt tehti meie arhitekti poolt peaaegu vahepeal vabal ajal, kuid see vĂ”imaldas juba kastist vĂ€lja kolmes reas Program.cs-s kĂ€ivitada teenust, mis sisaldas autoriseerimist (NTLM), logimist, Swaggerit, IoC/DI Castle Windsor baasil, seadistatud HTTP-kliente, mis edastasid erinevaid pĂ€iseid, et tagada ĂŒhtne logimine kogu projektis. Ja kĂ”ik see oli vĂ”imalik ka lisakorraldamiseks teenuse konfiguratsioonifailis.

Kuid kĂ”ik ei kulgenud sujuvalt: see raamatukogu osutus uute moodulite sisestamise osas ÀÀrmiselt jĂ€igaks. NĂ€iteks, kui oli vaja lisada mĂ”ni eriline middleware, tuli luua uus kogumik ja pĂ€rida teenust kĂ€ivitavast baasklassist, mis oli ÀÀrmiselt ebamugav. Õnneks selliseid juhtumeid ei olnud liiga palju.

Docker ja Kubernetes ajastu

On jĂ”udnud aeg, mil ka meie juurde on jĂ”udnud Docker ja Kubernetes, mida oleme tĂ€helepanelikult jĂ€lginud: see oli suurepĂ€rane vĂ”imalus liikuda edasi tehnoloogiatega, .Net Core'i suunas. Seega vajame uut infrastruktuuri teenuste kĂ€ivitamiseks: osa raamatukogusid on ĂŒle viidud .Net Frameworkilt .Net Standard'ile ja .Net Core'ile peaaegu muutumatuna, osa vĂ€ikeste tĂ€iustustega. Aga kĂ”ige rohkem soovime ĂŒmber töötada AspNet Core'i teenuste kĂ€ivitamisega seotud funktsionaalsust.

Esimese asjana kaaluti kontsepti, mis kĂ”rvaldab eelmise versiooni peamise puuduse: paindlikkuse puudumise. SeetĂ”ttu otsustati muuta kogu raamatukogude sĂŒsteem vĂ”imalikult sĂ”ltumatuks ja modulaarseks ning koguda vajalikud teenused funktsionaalsuse jĂ€rgi nagu konstruktori ehitamisel.

Peamine eesmĂ€rk on luua ĂŒhtne lĂ€henemine, mis kirjeldab, kuidas suhelda andmebaaside, busside ja teiste teenustega. PĂŒĂŒdsime, et integreerimine oleks kiire ja valutuks ning arendajad saaksid keskenduda Ă€ri loogika kirjutamisele, mitte infrastruktuurile - see on juba valmis. Ühine repodeerimine aitab parandada koostöökogemust meeskondade vahel: kui kasutatakse vĂ€ga sarnaseid sisemisi infrastruktuure, on lihtsam muuta teiste meeskondade arendusse ja jagada oma teadmisi.

Miks me vajame Open Source'i?

Soovime nĂ€idata oma ekspertiisi kĂŒpsust ja saada kvaliteetset tagasisidet: inimene, kes on vĂ€ljaspool pankade sĂŒsteemi, suudab tuua midagi uut. Meid huvitab ka praktika arendamine mikroteenuste ja DDD osas .NET-is tööstuses, vĂ”ib-olla tahab keegi osa raamistiku osade enda juurde vĂ”tta.

Oma osa on ViennaNET

NĂŒĂŒd vaatame kĂ”ike lĂ€hemalt. TĂ€ielik lĂ€htekood on siin.

ViennaNET.WebApi.*

See raamatukogude komplekt koosneb 'juurest' ViennaNET.WebApi, mis sisaldab CompanyHostBuilder teenuse konstruktorit, ja hulgast konfiguratoritest ViennaNET.WebApi.Configurators.*, millest igaĂŒks vĂ”imaldab lisada ja konfigureerida teatud funktsionaalsust loodud teenuses. Konfiguratorite seast vĂ”ib leida logimise, diagnostika, autentimise ja autoriseerimise tĂŒĂŒpe, swaggerit jms.

Siin ViennaNET.WebApi.Runners.* sisaldab eelnevalt seadistatud teenuste ehitajaid. Need paketid vĂ”imaldavad igakordse uue teenuse loomisel meeles pidada, millised konfigureerijad tuleb ĂŒhendada. Samas ei piira need teenuste ehitajate funktsionaalsust.

ViennaNET.Mediator.*

Raamatukogud, mis vĂ”imaldavad luua sisemise vahesilla kĂ€sud ja pĂ€ringud teenuse sees. Selline lĂ€henemine vĂ€hendab DI-sĂŒstimist nĂ€iteks kontrollerites ĂŒhe juhul. Seda saab teha erinevate dekoratorite lisamisega pĂ€ringutele, mis ĂŒhtlustab nende töötlemist ja vĂ€hendab koodi hulka.

ViennaNET.Validation

Kogum, mis sisaldab klasside komplekti valideerimisreeglite ja nende jÀrjestuste loomiseks. VÀga mugav domaanivÀÀrtingute rakendamiseks, kuna see vÔimaldab iga Àrijoont kirjeldada lihtsa ja eraldi reegliga.

ViennaNET.Redis

Raamatukogu Redisiga mugavaks töötamiseks mÀlu kohandajana.

ViennaNET.Specifications

Kogum, mis sisaldab klasside komplekti, mis rakendavad 'Spetsifikatsiooni' mustrit.

See pole kaugeltki kĂ”ik, mis meie komplektis on. ÜlejÀÀnut saab vaadata GitHubi hoidlast. Peagi on plaanis avaldada meie andmebaaside tööks mĂ”eldud raamatukogusid avatud lĂ€htekoodina.

AitĂ€h tĂ€helepanu eest, ootame teie kommentaare ja pull request’e.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster