ViennaNET: set o lyfrgelloedd ar gyfer y pen ôl

Helo bawb!

Rydym yn gymuned o ddatblygwyr .NET yn Raiffeisenbank ac rydym am siarad am set o lyfrgelloedd seilwaith yn seiliedig ar .NET Core ar gyfer creu microwasanaethau yn gyflym gydag un ecosystem. Daethant ag ef i Ffynhonnell Agored!

ViennaNET: set o lyfrgelloedd ar gyfer y pen ôl

Tipyn o hanes

Un tro cawsom brosiect monolithig mawr, a drodd yn raddol yn set o ficrowasanaethau (gallwch ddarllen am nodweddion y broses hon yn Mae'r erthygl hon yn). Yn y broses, daethom ar draws y broblem, wrth greu microwasanaethau newydd, yn aml roedd yn rhaid i ni gopïo amrywiol atebion seilwaith - megis sefydlu logio, gweithio gyda chronfa ddata, WCF, ac ati. Roedd un tîm yn gweithio ar y prosiect hwn, ac roedd pawb eisoes yn gyfarwydd â rhyw ddull sefydledig o weithio gyda seilwaith. Felly, gwnaethom wahanu'r cod cyffredin yn ystorfa ar wahân, lapio'r llyfrgelloedd a gasglwyd mewn pecynnau Nuget a'u gosod yn ein storfa Nuget fewnol.

Aeth amser heibio, rhannodd y prosiect yn raddol, ac roedd awydd i greu modiwlau ochr y cleient newydd ar fframwaith JS modern a'u rhedeg yn y porwr. Dechreuon ni symud o WCF/SOAP i REST/HTTP, felly roedd angen llyfrgelloedd newydd arnom i lansio gwasanaethau yn gyflym yn seiliedig ar AspNet WebApi. Gwnaethpwyd y fersiwn gyntaf ar y .Net Framework 4.5 gan ein pensaer bron ar ei liniau yn ei amser rhydd, ond allan o'r bocs fe'i gwnaeth hi'n bosibl lansio gwasanaeth gyda thair llinell yn Program.cs a oedd yn cynnwys awdurdodiad (NTLM), logio, Swagger, IoC/DI yn seiliedig ar Castle Windsor, cleientiaid HTTP wedi'u haddasu sy'n anfon penawdau amrywiol ymlaen i ddarparu logio o'r dechrau i'r diwedd trwy gydol y prosiect cyfan. A gallai'r holl beth hwn gael ei ffurfweddu ymhellach yn uniongyrchol yn y ffeil ffurfweddu gwasanaeth.

Fodd bynnag, nid oedd popeth yn llyfn: trodd y llyfrgell hon yn hynod anhyblyg o ran cyflwyno modiwlau newydd. Er enghraifft, os oedd angen i chi ychwanegu rhywfaint o nwyddau canol arbennig, roedd yn rhaid i chi greu gwasanaeth newydd ac etifeddu o'r dosbarth sylfaen sy'n rhedeg y gwasanaeth, a oedd yn hynod anghyfleus. Yn ffodus, nid oedd llawer iawn o achosion o'r fath.

Cyfnod Docker a Kubernetes

Mae'r amser wedi dod pan gyrhaeddodd y don o Docker a Kubernetes ni, yr ydym yn ei wylio'n agos: wedi'r cyfan, roedd yn gyfle gwych i ddechrau symud ymhellach ar hyd y technolegau, yn .Net Core. Mae hyn yn golygu y bydd angen seilwaith newydd arnom i redeg gwasanaethau: mae rhai llyfrgelloedd wedi symud o'r .Net Framework i .Net Standard a .Net Core yn ymarferol heb newidiadau, rhai gyda mân welliannau. Ond yn bennaf oll roeddwn i eisiau ail-weithio'r ymarferoldeb sy'n gysylltiedig â lansio gwasanaethau ar AspNet Core.

Y peth cyntaf a ystyriwyd gennym oedd cysyniad a fyddai'n dileu prif anfantais y fersiwn flaenorol: diffyg hyblygrwydd. Felly, penderfynwyd gwneud y system lyfrgell gyfan mor annibynnol a modiwlaidd â phosibl a chasglu'r gwasanaethau angenrheidiol ar gyfer swyddogaeth adeiladwr.

Y prif nod yw creu dull unedig sy'n disgrifio sut i ryngweithio â chronfeydd data, bysiau a gwasanaethau eraill. Fe wnaethom geisio gwneud integreiddiadau yn gyflym ac yn ddi-boen, a gallai datblygwyr ganolbwyntio ar ysgrifennu rhesymeg busnes yn hytrach na seilwaith - mae eisoes yn barod. Mae storfa gyffredin yn helpu i wella'r profiad o ryngweithio o fewn timau: pan ddefnyddir seilweithiau mewnol tebyg iawn, mae'n haws ymuno â phroses ddatblygu tîm arall a chyfnewid arbenigedd.

A pham mae angen Ffynhonnell Agored arnom?

Rydym am ddangos aeddfedrwydd ein harbenigedd a derbyn adborth o ansawdd uchel: bydd person y tu allan i'r banc yn gallu dod â rhywbeth o'i hun. Mae gennym ddiddordeb hefyd mewn datblygu arferion ar gyfer gweithio gyda microwasanaethau a DDD ar .NET yn y diwydiant; efallai y bydd rhywun am gymryd drosodd rhai rhannau o’r fframwaith.

Mewn gwirionedd, ViennaNET

Nawr gadewch i ni edrych yn agosach. Mae'r cod ffynhonnell llawn yn cael ei bostio yma.

ViennaNET.WebApi.*

Mae'r set hon o lyfrgelloedd yn cynnwys y “root” ViennaNET.WebApi, sy'n cynnwys y dosbarth adeiladu ar gyfer y gwasanaeth CompanyHostBuilder, a set o gyflunwyr ViennaNET.WebApi.Configurators.*, pob un ohonynt yn caniatáu ichi ychwanegu a ffurfweddu rhywfaint o ymarferoldeb i'r rhai a grëwyd gwasanaeth. Ymhlith y cyflunwyr gallwch ddod o hyd i gysylltiadau ar gyfer logio, diagnosteg, mathau o ddilysu ac awdurdodi, swagger, ac ati.

Mae ViennaNET.WebApi.Runners.* hefyd yn cynnwys adeiladwyr gwasanaeth wedi'u ffurfweddu ymlaen llaw. Mae'r pecynnau hyn yn eich galluogi i beidio â chofio bob tro y byddwch yn creu gwasanaeth newydd y mae angen cysylltu cyflunwyr. Fodd bynnag, nid ydynt yn cyfyngu ar ymarferoldeb adeiladwr y gwasanaeth mewn unrhyw ffordd.

FiennaNET.Cyfryngwr.*

Llyfrgelloedd sy'n caniatáu ichi greu bws cyfryngol mewnol ar gyfer gorchmynion a cheisiadau o fewn gwasanaeth. Mae'r dull hwn yn caniatáu ichi leihau nifer y pigiadau DI i un, er enghraifft, mewn rheolwyr. Oherwydd hyn, gallwch ychwanegu amrywiol addurnwyr at geisiadau, sy'n uno eu prosesu ac yn lleihau faint o god.

ViennaNET.Validation

Gwasanaeth yn cynnwys set o ddosbarthiadau ar gyfer creu rheolau dilysu a dilyniannau ohonynt. Mae'n gyfleus iawn ar gyfer gweithredu dilysu parth, gan ei fod yn caniatáu ichi ddisgrifio pob cyflwr busnes ar ffurf rheol syml ac ar wahân.

FiennaNET.Redis

Llyfrgell gyda deunydd lapio ar gyfer gwaith cyfleus gyda Redis fel storfa er cof.

ViennaNET.Specifications

Gwasanaeth yn cynnwys dosbarthiadau sy'n gweithredu patrwm y Fanyleb.

Nid dyma'r cyfan sydd yn ein set. Gallwch weld y gweddill yn ystorfa GitHub. Rydym yn bwriadu rhyddhau ein llyfrgelloedd ar gyfer gweithio gyda chronfeydd data i OpenSource yn fuan.

Diolch am eich sylw, edrychwn ymlaen at eich sylwadau a'ch ceisiadau tynnu.

Ffynhonnell: hab.com

Ychwanegu sylw