ViennaNET: skup knjižnica za backend

Pozdrav!

Mi smo zajednica .NET programera u Raiffeisenbank i želimo razgovarati o skupu infrastrukturnih biblioteka temeljenih na .NET Core za brzo stvaranje mikroservisa s jednim ekosustavom. Doveli su ga u Open Source!

ViennaNET: skup knjižnica za backend

Malo povijesti

Jednom davno imali smo veliki monolitni projekt, koji se postupno pretvorio u skup mikroservisa (o značajkama ovog procesa možete pročitati u ovaj članak). U procesu smo se susreli s problemom da smo prilikom kreiranja novih mikroservisa često morali kopirati razna infrastrukturna rješenja – poput postavljanja logiranja, rada s bazom podataka, WCF-a itd. Na ovom projektu radio je jedan tim i svi su već bili navikli na neki ustaljeni pristup radu s infrastrukturom. Stoga smo odvojili zajednički kod u zasebno spremište, omotali prikupljene biblioteke u Nuget pakete i smjestili ih u naš interni Nuget repozitorij.

Vrijeme je prolazilo, projekt se postupno fragmentirao i pojavila se želja za stvaranjem novih modula na strani klijenta na modernom JS okviru i njihovim pokretanjem u pregledniku. Počeli smo prelaziti s WCF/SOAP na REST/HTTP, pa su nam bile potrebne nove biblioteke za brzo pokretanje usluga temeljenih na AspNet WebApi. Prvu verziju na .Net Framework 4.5 naš je arhitekt napravio gotovo na koljenima u slobodno vrijeme, ali je iz kutije omogućila pokretanje servisa s tri retka u Program.cs koji su sadržavali autorizaciju (NTLM), bilježenje, Swagger, IoC/DI na temelju Castle Windsor, prilagođeni HTTP klijenti koji prosljeđuju različita zaglavlja za pružanje end-to-end bilježenja kroz cijeli projekt. A cijela se ova stvar može dodatno konfigurirati izravno u konfiguracijskoj datoteci usluge.

Međutim, nije sve bilo glatko: ova biblioteka se pokazala izuzetno nefleksibilnom u smislu uvođenja novih modula. Na primjer, ako ste trebali dodati neki poseban međuprogram, morali ste stvoriti novi sklop i naslijediti od osnovne klase koja pokreće uslugu, što je bilo izuzetno nezgodno. Srećom, takvih slučajeva nije bilo mnogo.

Era Dockera i Kubernetesa

Došlo je vrijeme kada je do nas stigao val Dockera i Kubernetesa, koji smo pozorno pratili: uostalom, bila je to sjajna prilika da se krene dalje uz tehnologije, u .Net Core. To znači da će nam trebati nova infrastruktura za pokretanje usluga: neke su knjižnice migrirale s .Net Frameworka na .Net Standard i .Net Core praktički bez promjena, neke s manjim poboljšanjima. Ali najviše od svega želio sam preraditi funkcionalnost povezanu s pokretanjem usluga na AspNet Core.

Prvo što smo razmotrili bio je koncept koji bi uklonio glavni nedostatak prethodne verzije: nedostatak fleksibilnosti. Stoga je odlučeno cijeli knjižnični sustav učiniti što neovisnijim i modularnijim te kao konstruktor skupiti servise potrebne za funkcionalnost.

Glavni cilj je stvoriti jedinstveni pristup koji opisuje kako komunicirati s bazama podataka, sabirnicama i drugim uslugama. Pokušali smo integracije učiniti brzima i bezbolnima, a programeri su se mogli usredotočiti na pisanje poslovne logike, a ne na infrastrukturu - ona je već spremna. Zajednički repozitorij pomaže poboljšati iskustvo interakcije unutar timova: kada se koriste vrlo slične interne infrastrukture, lakše je pridružiti se razvojnom procesu drugog tima i razmijeniti stručnost.

I zašto nam treba Open Source?

Želimo pokazati zrelost naše stručnosti i dobiti kvalitetnu povratnu informaciju: osoba izvan banke moći će unijeti nešto od sebe. Zanima nas i razvoj praksi za rad s mikroservisima i DDD-om na .NET-u u industriji, možda će netko htjeti preuzeti pojedine dijelove frameworka.

Zapravo, ViennaNET

Sada pogledajmo pobliže. Puni izvorni kod je objavljen ovdje.

ViennaNET.WebApi.*

Ovaj skup biblioteka sastoji se od "korijenskog" ViennaNET.WebApi, koji sadrži klasu graditelja za uslugu CompanyHostBuilder, i skupa konfiguratora ViennaNET.WebApi.Configurators.*, od kojih vam svaki omogućuje dodavanje i konfiguriranje nekih funkcija stvorenom servis. Među konfiguratorima možete pronaći veze za logovanje, dijagnostiku, tipove provjere autentičnosti i autorizacije, razmetanje, itd.

ViennaNET.WebApi.Runners.* također sadrži unaprijed konfigurirane graditelje usluga. Ovi paketi vam omogućuju da ne zapamtite svaki put kada kreirate novu uslugu koji konfiguratori moraju biti povezani. Međutim, oni ni na koji način ne ograničavaju funkcionalnost alata za izgradnju usluga.

ViennaNET.Mediator.*

Knjižnice koje vam omogućuju stvaranje interne posredničke sabirnice za naredbe i zahtjeve unutar usluge. Ovaj vam pristup omogućuje smanjenje broja DI injekcija na jednu, na primjer, u kontrolerima. Zbog toga zahtjevima možete dodati razne dekoratore, čime se objedinjuje njihova obrada i smanjuje količina koda.

ViennaNET.Validacija

Sklop koji sadrži skup klasa za kreiranje pravila provjere valjanosti i nizova iz njih. Vrlo je prikladan za implementaciju provjere valjanosti domene jer vam omogućuje da svaki poslovni uvjet opišete u obliku jednostavnog i zasebnog pravila.

ViennaNET.Redis

Knjižnica s omotima za praktičan rad s Redisom kao predmemorijom u memoriji.

ViennaNET.Specifikacije

Sklop koji sadrži klase koje implementiraju obrazac specifikacije.

Ovo nije sve što je u našem kompletu. Ostalo možete vidjeti u GitHub repozitoriju. Planiramo uskoro izdati naše biblioteke za rad s bazama podataka na OpenSource.

Hvala vam na pažnji, veselimo se vašim komentarima i zahtjevima za povlačenje.

Izvor: www.habr.com

Dodajte komentar