Hello!
Biz Raiffeisenbank-da .NET tərtibatçıları icmasıyıq və biz bir ekosistemlə mikroservisləri tez yaratmaq üçün .NET Core-a əsaslanan bir sıra infrastruktur kitabxanaları haqqında danışmaq istəyirik. Açıq Mənbəyə gətirdilər!
Bir az tarixi
Bir vaxtlar bizim böyük monolit layihəmiz var idi, o, tədricən mikroservislər dəstinə çevrildi (bu prosesin xüsusiyyətləri haqqında burada oxuya bilərsiniz).
Vaxt keçdi, layihə tədricən parçalandı və müasir JS çərçivəsində yeni müştəri modulları yaratmaq və onları brauzerdə işə salmaq istəyi yarandı. Biz WCF/SOAP-dan REST/HTTP-ə keçməyə başladıq, ona görə də AspNet WebApi əsasında xidmətləri tez işə salmaq üçün bizə yeni kitabxanalar lazım idi. .Net Framework 4.5-də ilk versiyanı memarımız boş vaxtlarında, demək olar ki, diz çökdürərək hazırlamışdı, lakin bu, proqram.cs-də avtorizasiya (NTLM) olan üç sətirdən ibarət xidməti işə salmağa imkan verdi. logging, Swagger, IoC/DI Castle Windsor-a əsaslanaraq, bütün layihə boyunca başdan-başa girişi təmin etmək üçün müxtəlif başlıqları yönləndirən fərdiləşdirilmiş HTTP müştəriləri. Və bütün bu şey birbaşa xidmət konfiqurasiya faylında daha da konfiqurasiya edilə bilər.
Bununla belə, hər şey hamar deyildi: bu kitabxana yeni modulların tətbiqi baxımından son dərəcə çevik olduğu ortaya çıxdı. Məsələn, bəzi xüsusi ara proqram əlavə etmək lazımdırsa, siz yeni montaj yaratmalı və xidməti idarə edən əsas sinifdən miras almalı idiniz, bu isə son dərəcə əlverişsiz idi. Xoşbəxtlikdən belə hallar çox deyildi.
Docker və Kubernetes dövrü
Docker və Kubernetes dalğasının bizə çatdığı vaxt gəldi, biz bunu yaxından izlədik: nəhayət, bu, .Net Core-da texnologiyalar üzrə irəliləməyə başlamaq üçün əla şans idi. Bu o deməkdir ki, xidmətləri işlətmək üçün bizə yeni infrastruktur lazım olacaq: bəzi kitabxanalar .Net Framework-dən .Net Standard və .Net Core-a praktiki olaraq heç bir dəyişiklik etmədən, bəziləri isə kiçik təkmilləşdirmələrlə köçüb. Ancaq ən çox AspNet Core-da xidmətlərin işə salınması ilə əlaqəli funksionallığı yenidən işləmək istədim.
İlk nəzərdən keçirdiyimiz şey, əvvəlki versiyanın əsas çatışmazlığını aradan qaldıracaq bir konsepsiya idi: elastikliyin olmaması. Buna görə də, bütün kitabxana sistemini mümkün qədər müstəqil və modul etmək və konstruktor kimi funksionallıq üçün lazım olan xidmətləri toplamaq qərara alınıb.
Əsas məqsəd verilənlər bazası, avtobuslar və digər xidmətlərlə qarşılıqlı əlaqəni təsvir edən vahid yanaşma yaratmaqdır. İnteqrasiyaları tez və ağrısız etməyə çalışdıq və tərtibatçılar infrastrukturdan daha çox biznes məntiqinin yazılması üzərində cəmləşə bildilər - o, artıq hazırdır. Ümumi depo komandalar daxilində qarşılıqlı əlaqə təcrübəsini yaxşılaşdırmağa kömək edir: çox oxşar daxili infrastrukturlardan istifadə edildikdə, başqa komandanın inkişaf prosesinə qoşulmaq və təcrübə mübadiləsi aparmaq daha asandır.
Və niyə bizə Açıq Mənbə lazımdır?
Biz təcrübəmizin yetkinliyini göstərmək və yüksək keyfiyyətli rəy almaq istəyirik: bankdan kənarda olan şəxs özündən nəsə gətirə biləcək. Biz həmçinin sənayedə .NET-də mikroservislər və DDD ilə işləmək üçün təcrübələrin inkişafı ilə maraqlanırıq, bəlkə kimsə çərçivənin müəyyən hissələrini ələ keçirmək istəyəcək.
Əslində, ViennaNET
İndi daha yaxından nəzər salaq.
ViennaNET.WebApi.*
Bu kitabxanalar toplusu CompanyHostBuilder xidməti üçün qurucu sinfini ehtiva edən “kök” ViennaNET.WebApi-dən və hər biri yaradılmışa bəzi funksionallıq əlavə etməyə və konfiqurasiya etməyə imkan verən ViennaNET.WebApi.Configurators.* konfiquratorlar dəstindən ibarətdir. xidmət. Konfiquratorlar arasında logging, diaqnostika, autentifikasiya və avtorizasiya növləri, ləzzət və s. üçün bağlantılar tapa bilərsiniz.
ViennaNET.WebApi.Runners.* həmçinin əvvəlcədən konfiqurasiya edilmiş xidmət qurucularını ehtiva edir. Bu paketlər konfiquratorların qoşulmalı olduğu hər dəfə yeni xidmət yaratdığınızı xatırlamamağa imkan verir. Bununla belə, onlar xidmət qurucusunun funksionallığını heç bir şəkildə məhdudlaşdırmırlar.
ViennaNET.Mediator.*
Xidmət daxilində əmrlər və sorğular üçün daxili vasitəçi avtobus yaratmağa imkan verən kitabxanalar. Bu yanaşma, məsələn, kontrollerlərdə DI inyeksiyalarının sayını birinə endirməyə imkan verir. Bunun sayəsində sorğulara müxtəlif dekoratorlar əlavə edə bilərsiniz ki, bu da onların işlənməsini birləşdirir və kodun miqdarını azaldır.
ViennaNET.Validation
Doğrulama qaydaları və onlardan ardıcıllıq yaratmaq üçün siniflər toplusunu ehtiva edən montaj. Bu, hər bir iş şəraitini sadə və ayrıca qayda şəklində təsvir etməyə imkan verdiyi üçün domen təsdiqini həyata keçirmək üçün çox rahatdır.
ViennaNET.Redis
Yaddaşdaxili keş kimi Redis ilə rahat işləmək üçün sarğıları olan kitabxana.
ViennaNET.Specifications
Spesifikasiya modelini həyata keçirən sinifləri ehtiva edən montaj.
Bu, bizim dəstimizdə olanların hamısı deyil. Qalanlarına baxa bilərsiniz
Diqqətiniz üçün təşəkkür edirik, şərhlərinizi və istəklərinizi gözləyirik.
Mənbə: www.habr.com