Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

Jedným z hlavných problémov pri vývoji a následnej prevádzke mikroslužieb je kompetentná a presná konfigurácia ich inštancií. Podľa mňa v tom môže pomôcť nový framework microconfig.io. Umožňuje pomerne elegantne vyriešiť niektoré bežné úlohy konfigurácie aplikácií.

Ak máte veľa mikroslužieb a každá z nich prichádza s vlastným konfiguračným súborom/súbormi, potom je vysoká pravdepodobnosť, že v jednej z nich urobíte chybu, ktorú môže byť veľmi ťažké zachytiť bez náležitých zručností a systému protokolovania. Hlavnou úlohou, ktorú si framework stanovuje, je minimalizovať duplicitné konfiguračné parametre inštancie, čím sa zníži pravdepodobnosť pridania chyby.

Pozrime sa na príklad. Povedzme, že máme jednoduchú aplikáciu s konfiguračným súborom yaml. Môže to byť akákoľvek mikroslužba v akomkoľvek jazyku. Pozrime sa, ako možno rámec aplikovať na túto službu.

Najprv však pre väčšie pohodlie vytvorte prázdny projekt v Idea IDE po inštalácii doplnku microconfig.io:

Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

Nastavili sme konfiguráciu spustenia doplnku, môžete použiť predvolenú konfiguráciu, ako na obrázku vyššie.

Naša služba sa nazýva objednávka, potom v novom projekte vytvoríme podobnú štruktúru:

Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

Umiestnite konfiguračný súbor do priečinka s názvom služby - aplikácia.yaml. Všetky mikroslužby sa spúšťajú v nejakom prostredí, takže okrem vytvorenia konfigurácie pre samotnú službu je potrebné popísať samotné prostredie: na to vytvoríme priečinok envs a pridajte doň súbor s názvom nášho pracovného prostredia. Rámec teda vytvorí konfiguračné súbory pre služby v prostredí dev, keďže tento parameter je nastavený v nastaveniach pluginu.

Štruktúra súboru dev.yaml bude to celkom jednoduché:

mainorder:
    components:
         - order

Rámec pracuje s konfiguráciami, ktoré sú zoskupené. Pre našu službu vyberte názov skupiny hlavný príkaz. Framework nájde každú takúto skupinu aplikácií v súbore prostredia a pre všetky vytvorí konfigurácie, ktoré nájde v zodpovedajúcich priečinkoch.

V samotnom súbore nastavení služby poriadok Uveďme zatiaľ iba jeden parameter:

spring.application.name: order

Teraz spustíme doplnok a vygeneruje požadovanú konfiguráciu pre našu službu podľa cesty uvedenej vo vlastnostiach:

Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

plechovka vychádzať a bez inštalácie pluginu, jednoducho si stiahnete distribúciu frameworku a spustíte ju z príkazového riadku.
Toto riešenie je vhodné na použitie na zostavovacom serveri.

Stojí za zmienku, že rámec dokonale rozumie majetok syntax, teda bežné súbory vlastností, ktoré je možné použiť spolu yaml konfigurácie.

Pridajme ďalšiu službu platba a skomplikovať ten existujúci.
В poriadok:

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

В platba:

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

Hlavným problémom týchto konfigurácií je prítomnosť veľkého množstva copy-paste v nastaveniach služby. Pozrime sa, ako to framework pomôže zbaviť sa. Začnime tým najzrejmejším - prítomnosťou konfigurácie eureka v popise každej mikroslužby. Vytvorme nový adresár so súborom nastavení a pridáme doň novú konfiguráciu:

Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

A teraz pridajme riadok ku každému z našich projektov #include heureka.

Framework automaticky nájde konfiguráciu heureky a skopíruje ju do konfiguračných súborov služby, pričom sa nevytvorí samostatná konfigurácia heureka, pretože ju nešpecifikujeme v súbore prostredia dev.yaml. servis poriadok:

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

Nastavenia databázy môžeme tiež presunúť do samostatnej konfigurácie zmenou importovacieho riadku na #include heureka, oracle.

Stojí za zmienku, že framework sleduje každú zmenu pri regenerácii konfiguračných súborov a umiestňuje ju do špeciálneho súboru vedľa hlavného konfiguračného súboru. Záznam v jeho protokole vyzerá takto: „Uložená 1 vlastnosť sa zmení na order/diff-application.yaml" To vám umožní rýchlo zistiť zmeny veľkých konfiguračných súborov.

Odstránenie spoločných častí konfigurácie vám umožňuje zbaviť sa množstva nepotrebného kopírovania a vkladania, ale neumožňuje flexibilne vytvárať konfiguráciu pre rôzne prostredia – koncové body našich služieb sú jedinečné a pevne zakódované, to je zlé. Skúsme to odstrániť.

Dobrým riešením by bolo ponechať všetky koncové body v jednej konfigurácii, na ktorú môžu ostatní odkazovať. Na tento účel bola do rámca zavedená podpora zástupných symbolov. Takto sa zmení konfiguračný súbor eureka:

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

Teraz sa pozrime, ako tento zástupný symbol funguje. Systém nájde komponent s názvom koncové body a hľadá v ňom zmysel eurekaipa potom ho nahradí do našej konfigurácie. Ale čo rôzne prostredia? Ak to chcete urobiť, vytvorte súbor s nastaveniami koncové body nasledujúci typ application.dev.yaml. Rámec nezávisle na základe prípony súboru rozhodne, do ktorého prostredia táto konfigurácia patrí a načíta ju:

Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

Obsah súboru Dev:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Môžeme vytvoriť rovnakú konfiguráciu pre porty našich služieb:

server.port: ${ports@order}.

Všetky dôležité nastavenia sú na jednom mieste, čím sa znižuje pravdepodobnosť chýb v dôsledku rozptýlených parametrov v konfiguračných súboroch.

Rámec poskytuje mnoho hotových zástupných symbolov, napríklad môžete získať názov adresára, v ktorom sa nachádza konfiguračný súbor, a priradiť ho:

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

Vďaka tomu nie je potrebné dodatočne špecifikovať názov aplikácie v konfigurácii a možno ju umiestniť aj do spoločného modulu, napríklad v rovnakej heureke:

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

Konfiguračný súbor poriadok sa zredukuje na jeden riadok:

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

Ak nepotrebujeme žiadne nastavenie z nadradenej konfigurácie, môžeme ho špecifikovať v našej konfigurácii a použije sa pri generovaní. To znamená, že ak z nejakého dôvodu potrebujeme jedinečný názov pre službu objednávky, ponecháme parameter jarná.názov.aplikácie.

Povedzme, že potrebujete do služby pridať vlastné nastavenia protokolovania, ktoré sú uložené v samostatnom súbore, napr. logback.xml. Vytvorme preň samostatnú skupinu nastavení:

Jednoducho spravujte konfigurácie mikroslužieb pomocou microconfig.io

V základnej konfigurácii povieme rámcu, kam umiestniť súbor s nastaveniami protokolovania, ktorý potrebujeme, pomocou zástupného symbolu @ConfigDir:

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

V súbore logback.xml konfigurujeme štandardné appendery, ktoré zase môžu obsahovať aj zástupné symboly, ktoré bude framework meniť počas generovania konfigurácií, napríklad:

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

Pridaním importu do konfigurácií služby spätné prihlásenie, automaticky získame nakonfigurované protokolovanie pre každú službu:

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

Je čas sa podrobnejšie zoznámiť so všetkými dostupnými zástupnými symbolmi rámca:

${this@env} - vráti názov aktuálneho prostredia.
${…@name} — vráti názov komponentu.
${…@configDir} — vráti úplnú cestu do konfiguračného adresára komponentu.
${…@resultDir} — vráti úplnú cestu k cieľovému adresáru komponentu (výsledné súbory budú umiestnené v tomto adresári).
${this@configRoot} — vráti úplnú cestu ku koreňovému adresáru ukladacieho priestoru konfigurácie.

Systém vám tiež umožňuje získať premenné prostredia, napríklad cestu k jave:
${env@JAVA_HOME}
Buď, pretože rámec je napísaný v JAVA, môžeme získať systémové premenné podobné volaniu System::getProperty pomocou takejto štruktúry:
${[chránené e-mailom]}
Za zmienku stojí podpora jazyka rozšírenia Pružina EL. Nasledujúce výrazy sú použiteľné v konfigurácii:

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

a pomocou výrazu môžete použiť lokálne premenné v konfiguračných súboroch #var:

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

Rámec je teda pomerne výkonným nástrojom na jemné ladenie a flexibilnú konfiguráciu mikroslužieb. Framework dokonale plní svoju hlavnú úlohu – elimináciu kopírovania a vkladania v nastaveniach, konsolidáciu nastavení a v dôsledku toho minimalizáciu možných chýb, pričom umožňuje jednoducho kombinovať konfigurácie a meniť ich pre rôzne prostredia.

Ak vás tento framework zaujal, odporúčam navštíviť jeho oficiálnu stránku a zoznámiť sa s celým dokumentáciu, alebo kopať do zdrojov tu.

Zdroj: hab.com

Pridať komentár