Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Jedan od glavnih problema u razvoju i kasnijem radu mikroservisa je kompetentna i točna konfiguracija njihovih instanci. Po mom mišljenju, novi okvir može pomoći u tome microconfig.io. Omogućuje vam da prilično elegantno riješite neke rutinske zadatke konfiguracije aplikacije.

Ako imate mnogo mikroservisa, a svaki od njih dolazi sa svojom konfiguracijskom datotekom/datotekama, tada postoji velika vjerojatnost da ćete napraviti grešku u jednoj od njih, što može biti vrlo teško otkriti bez odgovarajuće vještine i sustava za bilježenje. Glavni zadatak koji si okvir postavlja je minimiziranje dvostrukih konfiguracijskih parametara instance, čime se smanjuje vjerojatnost dodavanja pogreške.

Pogledajmo primjer. Recimo da imamo jednostavnu aplikaciju s konfiguracijskom datotekom yaml. To može biti bilo koja mikrousluga na bilo kojem jeziku. Pogledajmo kako se okvir može primijeniti na ovu uslugu.

Ali prvo, za veću praktičnost, stvorimo prazan projekt u Idea IDE, nakon što u njega instaliramo dodatak microconfig.io:

Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Postavili smo konfiguraciju pokretanja dodatka, možete koristiti zadanu konfiguraciju, kao na gornjoj snimci zaslona.

Naša usluga se zove red, a zatim ćemo u novom projektu stvoriti sličnu strukturu:

Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Stavite konfiguracijsku datoteku u mapu s nazivom usluge - primjena.yaml. Svi mikroservisi se pokreću u nekoj vrsti okruženja, pa je, osim kreiranja konfiguracije za sam servis, potrebno opisati i samo okruženje: za to ćemo kreirati mapu okruženja i dodajte mu datoteku s nazivom našeg radnog okruženja. Stoga će okvir stvoriti konfiguracijske datoteke za usluge u okruženju dev, jer je ovaj parametar postavljen u postavkama dodatka.

Struktura datoteke dev.yaml bit će vrlo jednostavno:

mainorder:
    components:
         - order

Okvir radi s konfiguracijama koje su grupirane zajedno. Za našu uslugu odaberite naziv grupe glavni poredak. Framework pronalazi svaku takvu grupu aplikacija u datoteci okruženja i stvara konfiguracije za sve njih, koje pronalazi u odgovarajućim mapama.

U samoj datoteci postavki usluge kako Navedimo za sada samo jedan parametar:

spring.application.name: order

Sada pokrenimo dodatak i on će generirati potrebnu konfiguraciju za našu uslugu prema putu navedenom u svojstvima:

Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

može slagati se i bez instaliranja dodatka, jednostavno preuzimanjem distribucije okvira i pokretanjem iz naredbenog retka.
Ovo je rješenje prikladno za korištenje na poslužitelju za izgradnju.

Vrijedno je napomenuti da okvir savršeno razumije nekretnina sintaksu, odnosno obične datoteke svojstava koje se mogu koristiti zajedno u yaml konfiguracije.

Dodajmo još jednu uslugu plaćanje a zakomplicirati postojeći.
В kako:

eureka:
 instance.preferIpAddress: true
 client:
   serviceUrl:
     defaultZone: http://192.89.89.111:6782/eureka/
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100

В plaćanje:

eureka:
 instance.preferIpAddress: true
 client:
   serviceUrl:
     defaultZone: http://192.89.89.111:6782/eureka/
server.port: 9998
spring.application.name: payments
db.url: 192.168.0.100

Glavni problem s ovim konfiguracijama je prisutnost velike količine copy-paste u postavkama usluge. Da vidimo kako će okvir pomoći da ga se riješimo. Počnimo s najočiglednijim - prisutnošću konfiguracije eureka u opisu svakog mikroservisa. Kreirajmo novi direktorij s datotekom postavki i dodajmo mu novu konfiguraciju:

Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

A sada dodajmo liniju svakom našem projektu #uključi eureku.

Framework će automatski pronaći eureka konfiguraciju i kopirati je u konfiguracijske datoteke usluge, dok zasebna eureka konfiguracija neće biti kreirana jer je nećemo specificirati u datoteci okruženja dev.yaml. Servis kako:

#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100

Također možemo premjestiti postavke baze podataka u zasebnu konfiguraciju promjenom uvozne linije u #uključi eureku, proročište.

Vrijedno je napomenuti da okvir prati svaku promjenu prilikom regeneriranja konfiguracijskih datoteka i stavlja je u posebnu datoteku pored glavne konfiguracijske datoteke. Unos u dnevniku izgleda ovako: “Stored 1 property changes to red/diff-aplikacija.yaml" To vam omogućuje brzo otkrivanje promjena velikih konfiguracijskih datoteka.

Uklanjanje zajedničkih dijelova konfiguracije omogućuje vam da se riješite mnoštva nepotrebnog kopiranja i lijepljenja, ali vam ne dopušta fleksibilnu izradu konfiguracije za različita okruženja - krajnje točke naših usluga jedinstvene su i tvrdo kodirane, to je loše. Pokušajmo ovo ukloniti.

Dobro bi rješenje bilo zadržati sve krajnje točke u jednoj konfiguraciji na koju drugi mogu referencirati. U tu je svrhu u okvir uvedena podrška za rezervirana mjesta. Ovako će se promijeniti konfiguracijska datoteka eureka:

 client:
   serviceUrl:
     defaultZone: http://${endpoints@eurekaip}:6782/eureka/

Sada da vidimo kako ovo rezervirano mjesto radi. Sustav pronalazi komponentu pod nazivom krajnje točke i u tome traži smisao eurekaip, a zatim ga zamjenjuje u našu konfiguraciju. Ali što je s različitim okruženjima? Da biste to učinili, stvorite datoteku postavki u krajnje točke sljedeći tip aplikacija.dev.yaml. Framework samostalno, na temelju ekstenzije datoteke, odlučuje kojem okruženju ova konfiguracija pripada i učitava je:

Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Sadržaj razvojne datoteke:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Možemo izraditi istu konfiguraciju za portove naših usluga:

server.port: ${ports@order}.

Sve važne postavke su na jednom mjestu, čime se smanjuje vjerojatnost grešaka zbog razbacanih parametara u konfiguracijskim datotekama.

Okvir nudi mnogo gotovih rezerviranih mjesta, na primjer, možete dobiti naziv direktorija u kojem se nalazi konfiguracijska datoteka i dodijeliti ga:

#include eureka, oracle
server.port: ${ports@order}
spring.application.name: ${this@name}

Zahvaljujući tome, nema potrebe dodatno navoditi naziv aplikacije u konfiguraciji, a također se može postaviti u zajednički modul, na primjer, u istoj eureci:

client:
   serviceUrl:
     defaultZone: http://${endpoints@eurekaip}:6782/eureka/
 spring.application.name: ${this@name}

Konfiguracijska datoteka kako svesti će se na jedan redak:

#include eureka, oracle
server.port: ${ports@order}

Ako ne trebamo nikakvu postavku iz nadređene konfiguracije, možemo je navesti u našoj konfiguraciji i ona će se primijeniti tijekom generiranja. To jest, ako iz nekog razloga trebamo jedinstveni naziv za uslugu narudžbe, samo ćemo ostaviti parametar proljeće.aplikacija.naziv.

Recimo da servisu trebate dodati prilagođene postavke zapisivanja koje su pohranjene u zasebnoj datoteci, na primjer, logback.xml. Kreirajmo zasebnu grupu postavki za to:

Jednostavno upravljajte konfiguracijama mikroservisa pomoću microconfig.io

U osnovnoj konfiguraciji reći ćemo okviru gdje da smjesti datoteku s postavkama bilježenja koja nam je potrebna pomoću rezerviranog mjesta @ConfigDir:

microconfig.template.logback.fromFile: ${logback@configDir}/logback.xml

U spisu logback.xml konfiguriramo standardne dodatke, koji zauzvrat također mogu sadržavati rezervirana mjesta koja će okvir promijeniti tijekom generiranja konfiguracija, na primjer:

<file>logs/${this@name}.log</file>

Dodavanjem uvoza konfiguracijama usluga povratna prijava, automatski dobivamo konfigurirano bilježenje za svaku uslugu:

#include eureka, oracle, logback
server.port: ${ports@order}

Vrijeme je da se detaljnije upoznate sa svim dostupnim rezerviranim mjestima okvira:

${this@env} - vraća naziv trenutnog okruženja.
${…@name} — vraća naziv komponente.
${…@configDir} — vraća punu stazu do konfiguracijskog direktorija komponente.
${…@resultDir} — vraća punu stazu do odredišnog direktorija komponente (rezultirajuće datoteke bit će smještene u ovaj direktorij).
${this@configRoot} — vraća punu stazu do korijenskog direktorija spremišta konfiguracije.

Sustav vam također omogućuje da dobijete varijable okoline, na primjer put do Jave:
${env@JAVA_HOME}
Bilo kako, budući da je okvir napisan u Java, možemo dobiti sistemske varijable slične pozivu System::getProperty koristeći strukturu poput ove:
${[e-pošta zaštićena]}
Vrijedno je spomenuti podršku za jezik proširenja Opruga EL. U konfiguraciji su primjenjivi sljedeći izrazi:

connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${[email protected]} + 10} 

i možete koristiti lokalne varijable u konfiguracijskim datotekama pomoću izraza #var:

#var feedRoot: ${[email protected]}/feed
folder:
 root: ${this@feedRoot}
 success: ${this@feedRoot}/archive
 error: ${this@feedRoot}/error

Dakle, okvir je prilično moćan alat za fino podešavanje i fleksibilnu konfiguraciju mikroservisa. Okvir savršeno ispunjava svoju glavnu zadaću - eliminira copy-paste u postavkama, konsolidira postavke i, kao rezultat toga, minimizira moguće pogreške, dok vam omogućuje jednostavno kombiniranje konfiguracija i njihovu promjenu za različita okruženja.

Ako ste zainteresirani za ovaj framework, preporučam da posjetite njegovu službenu stranicu i upoznate se s cijelim dokumentacija, ili kopajte po izvorima ovdje.

Izvor: www.habr.com

Dodajte komentar