Tere kõigile!
Me oleme .NET arendajate kogukond Raiffeisen Bankist ja soovime rääkida .NET Core infrastruktuuride raamatukogudest, mis võimaldavad kiiresti luua mikroteenuseid ühe ja sama ökosüsteemiga. Toode on nüüd avatud lähtekoodiga!
Veidi ajalugu
Kunagi oli meil suur monoliitne projekt, mis järk-järgult muutus mikroteenuste kogumiks (selle protsessi spetsiifikatest saate lugeda ). Protsessi käigus seisisime silmitsi probleemiga, et uute mikroteenuste loomisel pidime sageli kopeerima erinevaid infrastruktuurilahendusi – näiteks logimise seadistamine, andmebaasidega töötamine, WCF jne. Selle projekti kallal töötas üks meeskond, ja kõik olid juba harjunud teatud väljakujunenud lähenemisega infrastruktuurile. Seetõttu eraldasime ühise koodi eraldi hoidlasse, pakkisime koostatud raamatukogud Nuget-pakettidesse ja panime need meie sisemisse Nuget-laokotta.
Aeg mööda ja projekt hakkas osadeks lagunema, tekkis soov luua uusi kliendipoolseid mooduleid kaasaegsele Js-raamistikule ja käivitada need brauseris. Alustasime üleminekut WCF/SOAP-lt REST/HTTP-le ning seetõttu vajasime uusi raamatukogusid, et kiiresti käivitada teenuseid AspNet WebApi baasil. Esiteks versioon .Net Framework 4.5 oli meie arhitekti poolt peaaegu kätega vabal ajal valmis tehtud, kuid see võimaldas juba välja kastist kolme reaga Program.cs-s käivitada teenuse, mis sisaldas autoriseerimist (NTLM), logimist, Swaggerit, IoC/DI Castle Windsor baasil, seadistatud HTTP-kliendi, mis edastas erinevaid päiseid, et tagada kogu projekti ulatuslik logimine. Ja kõik see oli võimalik lisaks konfigureerida otse teenuse konfiguratsioonifailis.
Kuid kõik ei olnud sujuv: see raamatukogu osutus äärmiselt jäigaks uute moodulite integreerimisel. Näiteks, kui oli vaja lisada mingit erilist middleware'i, tuli luua uus kogumik ja alustada põhiklassist, mis käivitas teenuse, mis oli äärmiselt ebamugav. Õnneks selliseid juhtumeid ei olnud väga palju.
Docker ja Kubernetes aeg
On aeg, mil ka meid on tabanud Docker ja Kubernetes laine, millele me tähelepanelikult oleme jälginud: see oli suurepärane võimalus liikuda edasi tehnoloogiatega .Net Core. Seega vajame uut infrastruktuuri teenuste käivitamiseks: osa teeke kolis .Net Frameworkist .Net Standardisse ja .Net Core'sse praktiliselt muutumatuna, osa väikeste täiustustega. Kuid kõige enam soovisime täiustada funktsionaalsust, mis on seotud teenuste käivitamisega AspNet Core'il.
Esimese sammuna kaaluti kontseptsiooni, mis võimaldab kõrvaldada eelmine versioon peamise puuduse: paindlikkuse puudumine. Seetõttu otsustati teha kogu teekide süsteem võimalikult sõltumatuks ja modulaarseks ning koguda vajalikud teenused funktsioonide kaupa nagu ehituskomplekt.
Peamine eesmärk on luua ühtne lähenemine, mis kirjeldab, kuidas suhelda andmebaaside, busside ja teiste teenustega. Oleme püüdnud, et integratsioonid oleksid kiired ja valutud, võimaldades arendajatel keskenduda äriloogika kirjutamisele, mitte infrastruktuurile — see on juba valmis. Ühine repository aitab parandada meeskondade koostöökogemust: kui kasutatakse väga sarnaseid siseseid infrastruktuure, on kergem liituda teise meeskonna arendusprotsessiga ja jagada oma ekspertiisi.
Ja miks me vajame avatud lähtekoodi?
Tahame näidata oma ekspertiisi küpsust ja saada kvaliteetset tagasisidet: inimene, kes ei ole pangas, saab midagi juurde tuua. Samuti on meil huvi arendada mikroteenuste ja DDD praktikaid .NETis tööstuses, võib-olla soovib keegi teatud osasid raamistikust endale võtta.
Nii et, ViennaNET
Nüüd vaatame kõike lähemalt. .
ViennaNET.WebApi.*
See library package koosneb ViennaNET.WebApi «juurest», mis sisaldab CompanyHostBuilder teenuse ehitajaklassi ja ViennaNET.WebApi.Configurators.* konfigureerijat, mis võimaldavad lisada ja seadistada teenusesse erinevat funktsionaalsust. Konfigureerijate seas on olemas logimise, diagnostika, autentimise ja autoriseerimise tüübid, swagger jne.
ViennaNET.WebApi.Runners.* sisaldab eelnevalt seadistatud teenuse ehitajaid. Need paketid aitavad vältida igakordset muretsega, milliseid konfigureerijaid uue teenuse loomisel kasutada. Samuti ei piira need teenuse ehitaja funktsionaalsust.
ViennaNET.Mediator.*
Raamatukogud, mis võimaldavad luua teenuse sees sisemise vahepealse bussi käsud ja päringud. Selline lähenemine aitab vähendada DI-süstide arvu ühega, näiteks kontrollerites. Sellega saab lisada erinevaid dekoraatoreid päringutele, mis ühtlustab nende töötlemist ja vähendab koodi kogust.
ViennaNET.Validation
Kogumik, mis sisaldab klasside kogumit valideerimisreeglite ja nende järjekordade loomiseks. Väga mugav domeenivalideerimise rakendamiseks, kuna võimaldab kirjeldada igat äritingimust lihtsalt ja eraldi reegli vormis.
ViennaNET.Redis
Raamatukogu, mis sisaldab mähiseid, et hõlbustada Redis'i kasutamist in-memory cache'ina.
ViennaNET.Specifications
Kogumik, mis sisaldab klasse, mis rakendavad 'Spetsifikatsiooni' mustrit.
See ei ole kaugeltki kõik, mis meie kogumikus on. Ülejäänut saab vaadata . Meie andmebaasidega töötamiseks mõeldud raamatukogud on peagi vabaks saadaval Open Source.
Täname tähelepanu eest, ootame teie kommentaare ja pull request'e.
Allikas: habr.com
