ViennaNET: skup biblioteka za pozadinu

Pozdrav svima!

Mi smo zajednica .NET programera u Raiffeisenbank i želimo da razgovaramo o skupu infrastrukturnih biblioteka zasnovanih na .NET Core za brzo kreiranje mikroservisa sa jednim ekosistemom. Donijeli su ga na Open Source!

ViennaNET: skup biblioteka za pozadinu

Malo istorije

Nekada smo imali veliki monolitni projekat, koji se postepeno pretvorio u skup mikroservisa (o karakteristikama ovog procesa možete pročitati u ovaj članak). U tom procesu nailazili smo na problem da smo prilikom kreiranja novih mikroservisa često morali kopirati razna infrastrukturna rješenja – poput podešavanja logiranja, rada sa bazom podataka, WCF-a itd. Na ovom projektu je radio jedan tim i svi su već bili navikli na neki ustaljeni pristup u radu sa infrastrukturom. Stoga smo odvojili zajednički kod u zasebno spremište, umotali prikupljene biblioteke u Nuget pakete i smjestili ih u naše interno Nuget spremište.

Vrijeme je prolazilo, projekat se postepeno fragmentirao, a postojala je želja da se kreiraju novi moduli na strani klijenta na modernom JS framework-u i pokreću ih u pretraživaču. Počeli smo da prelazimo sa WCF/SOAP na REST/HTTP, tako da su nam bile potrebne nove biblioteke za brzo pokretanje usluga zasnovanih na AspNet WebApi. Prvu verziju na .Net Framework 4.5 je naš arhitekta napravio gotovo na kolenima u slobodno vrijeme, ali je iz kutije omogućila pokretanje servisa sa tri reda u Program.cs koji je sadržavao autorizaciju (NTLM), logiranje, Swagger, IoC/DI na bazi Castle Windsor, prilagođene HTTP klijente koji prosljeđuju različita zaglavlja kako bi osigurali end-to-end logovanje kroz cijeli projekat. I cijela ova stvar se dalje može konfigurirati direktno u konfiguracijskoj datoteci usluge.

Međutim, nije sve bilo glatko: ova biblioteka se pokazala izuzetno nefleksibilnom u pogledu uvođenja novih modula. Na primjer, ako ste trebali dodati neki poseban međuoprema, morali ste kreirati novi sklop i naslijediti osnovnu klasu koja pokreće uslugu, što je bilo izuzetno nezgodno. Na sreću, takvih slučajeva nije bilo mnogo.

Era Dockera i Kubernetesa

Došlo je vrijeme kada je do nas stigao talas Dockera i Kubernetesa, koji smo pomno pratili: na kraju krajeva, bila je to odlična prilika da krenemo dalje uz tehnologije, u .Net Core. To znači da će nam trebati nova infrastruktura za pokretanje usluga: neke biblioteke su migrirale sa .Net Frameworka na .Net Standard i .Net Core praktično bez promjena, neke sa manjim poboljšanjima. Ali najviše od svega sam želio da preradim funkcionalnost povezane 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 da se kompletan bibliotečki sistem učini što nezavisnijim i modularnijim i prikupi servise potrebne za funkcionalnost kao konstruktora.

Glavni cilj je stvaranje jedinstvenog pristupa koji opisuje način interakcije sa bazama podataka, autobusima i drugim servisima. Trudili smo se da integracije budu brze i bezbolne, a programeri bi se mogli koncentrirati na pisanje poslovne logike, a ne na infrastrukturu – već je spremno. Zajedničko spremište pomaže u poboljšanju iskustva interakcije unutar timova: kada se koriste vrlo slične interne infrastrukture, lakše je pridružiti se procesu razvoja drugog tima i razmijeniti stručnost.

A zašto nam je potreban Open Source?

Želimo pokazati zrelost naše stručnosti i dobiti visokokvalitetne povratne informacije: osoba izvan banke moći će donijeti nešto od sebe. Zainteresovani smo i za razvoj praksi za rad sa mikroservisima i DDD-om na .NET-u u industriji, možda će neko poželeti da preuzme određene delove okvira.

Zapravo, ViennaNET

Pogledajmo izbliza. Kompletan izvorni kod je objavljen ovdje.

ViennaNET.WebApi.*

Ovaj skup biblioteka sastoji se od “root” ViennaNET.WebApi, koji sadrži klasu graditelja za uslugu CompanyHostBuilder, i skupa konfiguratora ViennaNET.WebApi.Configurators.*, od kojih svaki omogućava dodavanje i konfiguraciju neke funkcionalnosti kreiranom usluga. Među konfiguratorima možete pronaći konekcije za logovanje, dijagnostiku, tipove autentifikacije i autorizacije, swagger itd.

ViennaNET.WebApi.Runners.* također sadrži unaprijed konfigurirane alate za izgradnju servisa. Ovi paketi vam omogućavaju da se ne sećate svaki put kada kreirate novu uslugu koji konfiguratori treba da budu povezani. Međutim, oni ni na koji način ne ograničavaju funkcionalnost graditelja usluga.

ViennaNET.Mediator.*

Biblioteke koje vam omogućavaju da kreirate internu posredničku sabirnicu za komande i zahteve unutar usluge. Ovaj pristup vam omogućava da smanjite broj DI injekcija na jednu, na primjer, u kontrolerima. Zbog toga zahtjevima možete dodati različite dekoratere, što objedinjuje njihovu obradu i smanjuje količinu koda.

ViennaNET.Validation

Sklop koji sadrži skup klasa za kreiranje pravila validacije i sekvenci od njih. Veoma je zgodan za implementaciju validacije domena, jer vam omogućava da opišete svaki poslovni uslov u obliku jednostavnog i zasebnog pravila.

ViennaNET.Redis

Biblioteka sa omotima za praktičan rad sa Redis-om kao keš memorijom.

ViennaNET.Specifications

Sklop koji sadrži klase koje implementiraju obrazac Specifikacije.

Ovo nije sve što je u našem setu. Ostalo možete vidjeti u GitHub spremištu. Planiramo uskoro objaviti naše biblioteke za rad sa bazama podataka na OpenSource.

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

izvor: www.habr.com

Dodajte komentar