Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Jedan od glavnih problema u razvoju i kasnijem radu mikroservisa je kompetentna i tač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 svojim konfiguracionim fajlom/fajlom, onda postoji velika verovatnoća da napravite grešku u jednom od njih, što može biti veoma teško uhvatiti bez odgovarajuće veštine i sistema za evidentiranje. Glavni zadatak koji okvir postavlja za sebe je da minimizira duplirane konfiguracijske parametre instance, čime se smanjuje vjerovatnoća dodavanja greške.

Pogledajmo primjer. Recimo da imamo jednostavnu aplikaciju sa konfiguracionim fajlom yaml. Ovo može biti bilo koji mikroservis na bilo kom jeziku. Pogledajmo kako se okvir može primijeniti na ovu uslugu.

Ali prvo, radi veće udobnosti, napravimo prazan projekat u Idea IDE, nakon što u njega instaliramo dodatak microconfig.io:

Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Postavili smo konfiguraciju za pokretanje dodatka, možete koristiti zadanu konfiguraciju, kao na slici iznad.

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

Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Stavite konfiguracionu datoteku u fasciklu sa nazivom usluge - application.yaml. Sve mikroservise se pokreću u nekoj vrsti okruženja, tako da je, osim kreiranja konfiguracije za sam servis, potrebno opisati i samo okruženje: za to ćemo kreirati folder envs i dodajte mu datoteku s imenom našeg radnog okruženja. Stoga će okvir kreirati konfiguracijske datoteke za usluge u okruženju dev, pošto je ovaj parametar postavljen u postavkama dodatka.

Struktura fajla dev.yaml bit će prilično jednostavno:

mainorder:
    components:
         - order

Okvir radi sa konfiguracijama koje su grupisane zajedno. Za našu uslugu odaberite ime za grupu mainorder. Framework pronalazi svaku takvu grupu aplikacija u datoteci okruženja i kreira konfiguracije za sve njih, koje pronalazi u odgovarajućim folderima.

U samom fajlu postavki usluge Naredbu Navedite samo jedan parametar za sada:

spring.application.name: order

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

Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

moći slagati se i bez instaliranja dodatka, jednostavno preuzimanje okvirne distribucije i pokretanje iz komandne linije.
Ovo rješenje je pogodno za korištenje na build serveru.

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

Hajde da dodamo još jednu uslugu plaćanje i komplikovati postojeću.
В Naredbu:

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 sa ovim konfiguracijama je prisustvo velike količine copy-paste-a u postavkama servisa. Da vidimo kako će okvir pomoći da ga se riješimo. Počnimo s najočiglednijim - prisustvom konfiguracije eureka u opisu svakog mikroservisa. Kreirajmo novi direktorij s datotekom postavki i dodajmo mu novu konfiguraciju:

Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

A sada dodajmo liniju svakom našem projektu #include eureka.

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

#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 linije uvoza u #include eureka, oracle.

Vrijedi napomenuti da okvir prati svaku promjenu prilikom regeneracije konfiguracijskih datoteka i stavlja je u posebnu datoteku pored glavne konfiguracijske datoteke. Unos u njegovom dnevniku izgleda ovako: “Spremljeno 1 svojstvo se mijenja u order/diff-application.yaml" Ovo vam omogućava da brzo otkrijete promjene velikih konfiguracijskih datoteka.

Uklanjanje zajedničkih dijelova konfiguracije omogućava vam da se riješite puno nepotrebnog copy-paste-a, ali vam ne dozvoljava fleksibilno kreiranje konfiguracije za različita okruženja - krajnje točke naših usluga su jednostruke i tvrdo kodirane, to je loše. Pokušajmo ovo ukloniti.

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

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

Sada da vidimo kako ovaj čuvar mjesta funkcionira. Sistem pronalazi komponentu pod nazivom krajnje točke i traži smisao u tome eurekaip, a zatim ga zamjenjuje u našu konfiguraciju. Ali šta je sa različitim okruženjima? Da biste to učinili, kreirajte datoteku postavki u krajnje točke sledeći tip application.dev.yaml. Framework samostalno, na osnovu ekstenzije datoteke, odlučuje kojem okruženju pripada ova konfiguracija i učitava je:

Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

Sadržaj Dev fajla:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

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

server.port: ${ports@order}.

Sve važne postavke su na jednom mjestu, čime se smanjuje vjerovatnoća grešaka zbog raštrkanih parametara u konfiguracijskim datotekama.

Framework pruža mnoge gotove čuvare mjesta, na primjer, možete dobiti ime direktorija u kojem se nalazi konfiguracijski fajl i dodijeliti ga:

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

Zahvaljujući tome, nije potrebno dodatno specificirati naziv aplikacije u konfiguraciji, a može se postaviti i u zajednički modul, na primjer, u istu eureku:

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

Konfiguracijski fajl Naredbu biće svedeno na jedan red:

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

Ako nam nije potrebna nikakva postavka iz roditeljske konfiguracije, možemo je navesti u našoj konfiguraciji i ona će se primijeniti tokom generiranja. Odnosno, ako iz nekog razloga trebamo jedinstveno ime za uslugu naručivanja, samo ćemo ostaviti parametar spring.application.name.

Recimo da servisu trebate dodati prilagođena podešavanja evidentiranja koja su pohranjena u zasebnoj datoteci, na primjer, logback.xml. Kreirajmo posebnu grupu postavki za to:

Lako upravljajte konfiguracijama mikroservisa pomoću microconfig.io

U osnovnoj konfiguraciji, reći ćemo okviru gdje da smjesti datoteku postavki zapisivanja koja nam je potrebna pomoću čuvara mjesta @ConfigDir:

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

U fajlu logback.xml mi konfigurišemo standardne dodatke, koji zauzvrat mogu sadržati čuvare mesta koje će okvir promeniti tokom generisanja konfiguracija, na primer:

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

Dodavanjem uvoza u servisne konfiguracije logback, automatski dobijamo konfigurisanu evidenciju za svaku uslugu:

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

Vrijeme je da se detaljnije upoznate sa svim dostupnim placeholderima okvira:

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

Sistem vam takođe omogućava da dobijete varijable okruženja, na primer putanju do java:
${env@JAVA_HOME}
Ili, pošto je okvir upisan JAVA, možemo dobiti sistemske varijable slične pozivu System::getProperty koristeći strukturu poput ove:
${[email zaštićen]}
Vrijedi spomenuti podršku za jezik proširenja Opruga EL. Sljedeći izrazi su primjenjivi u konfiguraciji:

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

i možete koristiti lokalne varijable u konfiguracijskim datotekama koristeći izraz #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. Framework savršeno ispunjava svoj glavni zadatak - eliminira copy-paste u postavkama, konsolidira postavke i, kao rezultat, minimizira moguće greške, dok vam omogućava da lako kombinirate konfiguracije i mijenjate ih za različita okruženja.

Ako ste zainteresovani za ovaj okvir, preporučujem da posetite njegovu zvaničnu stranicu i da se upoznate sa potpunim dokumentaciju, ili kopati po izvorima ovdje.

izvor: www.habr.com

Dodajte komentar