Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Viena no galvenajām problēmām mikropakalpojumu izstrādē un turpmākajā darbÄ«bā ir kompetenta un precÄ«za to gadÄ«jumu konfigurācija. Manuprāt, jauns ietvars var palÄ«dzēt Å”ajā jautājumā microconfig.io. Tas ļauj diezgan eleganti atrisināt dažus ikdienas lietojumprogrammu konfigurācijas uzdevumus.

Ja jums ir daudz mikropakalpojumu, un katram no tiem ir savs konfigurācijas fails/faili, tad pastāv liela varbÅ«tÄ«ba, ka kādā no tiem tiks pieļauta kļūda, kuru var bÅ«t ļoti grÅ«ti uztvert bez atbilstoÅ”as ā€‹ā€‹prasmes un reÄ£istrÄ“Å”anas sistēmas. Galvenais uzdevums, ko ietvars sev nosaka, ir minimizēt dublētos gadÄ«jumu konfigurācijas parametrus, tādējādi samazinot kļūdas pievienoÅ”anas iespējamÄ«bu.

ApskatÄ«sim piemēru. Pieņemsim, ka mums ir vienkārÅ”a lietojumprogramma ar konfigurācijas failu jams. Tas var bÅ«t jebkurÅ” mikropakalpojums jebkurā valodā. ApskatÄ«sim, kā ietvaru var piemērot Å”im pakalpojumam.

Bet vispirms lielākas ērtÄ«bas labad izveidosim tukÅ”u projektu Idea IDE pēc spraudņa microconfig.io instalÄ“Å”anas tajā:

Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Mēs iestatÄ«jām spraudņa palaiÅ”anas konfigurāciju, varat izmantot noklusējuma konfigurāciju, kā parādÄ«ts iepriekÅ” redzamajā ekrānuzņēmumā.

Mūsu pakalpojumu sauc par pasūtījumu, tad jaunā projektā mēs izveidosim līdzīgu struktūru:

Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Ievietojiet konfigurācijas failu mapē ar pakalpojuma nosaukumu - pieteikums.yaml. Visi mikropakalpojumi tiek palaisti kaut kādā vidē, tāpēc papildus paÅ”a pakalpojuma konfigurācijas izveidei ir jāapraksta arÄ« pati vide: Å”im nolÅ«kam mēs izveidosim mapi. apņem un pievienojiet tam failu ar mÅ«su darba vides nosaukumu. Tādējādi sistēma izveidos pakalpojumu konfigurācijas failus vidē dev, jo Å”is parametrs ir iestatÄ«ts spraudņa iestatÄ«jumos.

Faila struktūra dev.yaml tas būs pavisam vienkārŔi:

mainorder:
    components:
         - order

Ietvars darbojas ar konfigurācijām, kas ir sagrupētas. MÅ«su pakalpojumam izvēlieties grupas nosaukumu galvenais pasÅ«tÄ«jums. Katru Ŕādu lietojumprogrammu grupu ietvars atrod vides failā un izveido tām visām konfigurācijas, kuras atrod attiecÄ«gajās mapēs.

PaŔā pakalpojuma iestatījumu failā rīkojums Pagaidām norādīsim tikai vienu parametru:

spring.application.name: order

Tagad palaidÄ«sim spraudni, un tas Ä£enerēs mÅ«su pakalpojumam nepiecieÅ”amo konfigurāciju atbilstoÅ”i rekvizÄ«tos norādÄ«tajam ceļam:

Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Var iztikt un neinstalējot spraudni, vienkārÅ”i lejupielādējiet ietvara izplatÄ«Å”anu un palaidiet to no komandrindas.
Å is risinājums ir piemērots izmantoÅ”anai bÅ«vÄ“Å”anas serverÄ«.

Ir vērts atzÄ«mēt, ka sistēma lieliski saprot Ä«paÅ”ums sintakse, tas ir, parastie rekvizÄ«tu faili, kurus var izmantot kopā jams konfigurācijas.

Pievienosim vēl vienu pakalpojumu maksājums un sarežģī esoÅ”o.
Š’ rÄ«kojums:

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

Š’ maksājums:

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

Galvenā Å”o konfigurāciju problēma ir liela daudzuma kopÄ“Å”anas un ielÄ«mÄ“Å”anas klātbÅ«tne pakalpojuma iestatÄ«jumos. ApskatÄ«sim, kā ietvars palÄ«dzēs no tā atbrÄ«voties. Sāksim ar acÄ«mredzamāko - konfigurācijas klātbÅ«tni Eureka katra mikropakalpojuma aprakstā. Izveidosim jaunu direktoriju ar iestatÄ«jumu failu un pievienosim tam jaunu konfigurāciju:

Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Un tagad pievienosim rindiņu katram mūsu projektam #iekļauts eureka.

Ietvars automātiski atradÄ«s eureka konfigurāciju un kopēs to pakalpojuma konfigurācijas failos, savukārt atseviŔķa eureka konfigurācija netiks izveidota, jo mēs to nenorādÄ«sim vides failā dev.yaml. apkalpoÅ”ana rÄ«kojums:

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

Mēs varam arÄ« pārvietot datu bāzes iestatÄ«jumus atseviŔķā konfigurācijā, mainot importÄ“Å”anas rindiņu uz #iekļauts eureka, orākuls.

Ir vērts atzÄ«mēt, ka sistēma izseko katru izmaiņu, atjaunojot konfigurācijas failus, un ievieto to Ä«paŔā failā blakus galvenajam konfigurācijas failam. Ieraksts tā žurnālā izskatās Ŕādi: ā€œSaglabāts 1 rekvizÄ«ts mainās uz order/diff-application.yaml" Tas ļauj ātri noteikt izmaiņas lielos konfigurācijas failos.

Kopējo konfigurācijas daļu noņemÅ”ana ļauj atbrÄ«voties no daudz nevajadzÄ«gas kopÄ“Å”anas-ielÄ«mÄ“Å”anas, taču neļauj elastÄ«gi izveidot konfigurāciju dažādām vidēm - mÅ«su pakalpojumu galapunkti ir unikāli un kodēti, tas ir slikti. Mēģināsim to noņemt.

Labs risinājums būtu saglabāt visus galapunktus vienā konfigurācijā, uz kuru var atsaukties citi. Šim nolūkam sistēmā ir ieviests atbalsts vietturiem. Šādi mainīsies konfigurācijas fails Eureka:

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

Tagad apskatÄ«sim, kā darbojas Å”is vietturis. Sistēma atrod komponentu ar nosaukumu vērtētie un meklē tajā jēgu eurekaip, un pēc tam aizstāj to mÅ«su konfigurācijā. Bet kā ar dažādām vidēm? Lai to izdarÄ«tu, izveidojiet iestatÄ«jumu failu vērtētie Ŕāda veida application.dev.yaml. Ietvars neatkarÄ«gi, pamatojoties uz faila paplaÅ”inājumu, izlemj, kurai videi Ŕī konfigurācija pieder, un ielādē to:

Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Izstrādātāja faila saturs:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Mēs varam izveidot tādu paÅ”u konfigurāciju mÅ«su pakalpojumu portiem:

server.port: ${ports@order}.

Visi svarīgie iestatījumi ir vienuviet, tādējādi samazinot kļūdu iespējamību konfigurācijas failos izkliedētu parametru dēļ.

Ietvars nodroÅ”ina daudzus gatavus vietturus, piemēram, varat iegÅ«t tā direktorija nosaukumu, kurā atrodas konfigurācijas fails, un pieŔķirt tam:

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

Pateicoties tam, konfigurācijā nav papildus jānorāda lietojumprogrammas nosaukums un to var ievietot arÄ« kopējā modulÄ«, piemēram, tajā paŔā eurekā:

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

Konfigurācijas fails rīkojums tiks samazināts līdz vienai rindai:

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

Ja mums nav nepiecieÅ”ams neviens iestatÄ«jums no vecākkonfigurācijas, mēs varam to norādÄ«t savā konfigurācijā, un tas tiks lietots Ä£enerÄ“Å”anas laikā. Tas ir, ja kāda iemesla dēļ mums ir nepiecieÅ”ams unikāls pasÅ«tÄ«juma pakalpojuma nosaukums, mēs vienkārÅ”i atstāsim parametru pavasaris.pieteikums.nosaukums.

Pieņemsim, ka pakalpojumam ir jāpievieno pielāgoti reÄ£istrÄ“Å”anas iestatÄ«jumi, kas tiek saglabāti atseviŔķā failā, piemēram, logback.xml. Izveidosim tai atseviŔķu iestatÄ«jumu grupu:

Viegli pārvaldiet mikropakalpojumu konfigurācijas, izmantojot microconfig.io

Pamatkonfigurācijā mēs norādÄ«sim ietvaram, kur novietot mums nepiecieÅ”amo reÄ£istrÄ“Å”anas iestatÄ«jumu failu, izmantojot vietturi @ConfigDir:

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

Failā logback.xml mēs konfigurējam standarta papildinājumus, kas savukārt var saturēt arÄ« vietturus, kurus ietvars mainÄ«s konfigurāciju Ä£enerÄ“Å”anas laikā, piemēram:

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

Pakalpojuma konfigurācijām pievienojot importÄ“Å”anu logback, mēs automātiski saņemam konfigurētu reÄ£istrÄ“Å”anu katram pakalpojumam:

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

Ir pienācis laiks sīkāk iepazīties ar visiem pieejamajiem ietvara vietturiem:

${this@env} - atgriež paÅ”reizējās vides nosaukumu.
${ā€¦@name} ā€” atgriež komponenta nosaukumu.
${ā€¦@configDir} ā€” atgriež pilnu ceļu uz komponenta konfigurācijas direktoriju.
${ā€¦@resultDir} ā€” atgriež pilnu ceļu uz komponenta mērÄ·a direktoriju (iegÅ«tie faili tiks ievietoti Å”ajā direktorijā).
${this@configRoot} ā€” atgriež pilnu ceļu uz konfigurācijas krātuves saknes direktoriju.

Sistēma arī ļauj iegūt vides mainīgos, piemēram, ceļu uz java:
${env@JAVA_HOME}
Vai nu, jo ietvars ir ierakstÄ«ts JAVA, mēs varam iegÅ«t zvanam lÄ«dzÄ«gus sistēmas mainÄ«gos Sistēma::getProperty izmantojot Ŕādu struktÅ«ru:
${[e-pasts aizsargāts]}
Ir vērts pieminēt paplaÅ”inājuma valodas atbalstu Pavasaris EL. Konfigurācijā ir piemērojamas Ŕādas izteiksmes:

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

un jūs varat izmantot vietējos mainīgos konfigurācijas failos, izmantojot izteiksmi #var:

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

Tādējādi ietvars ir diezgan spēcÄ«gs instruments mikropakalpojumu precizÄ“Å”anai un elastÄ«gai konfigurÄ“Å”anai. Karkass lieliski pilda savu galveno uzdevumu - novērÅ” copy-paste iestatÄ«jumos, konsolidē iestatÄ«jumus un rezultātā samazina iespējamās kļūdas, vienlaikus ļaujot ērti apvienot konfigurācijas un mainÄ«t tās dažādām vidēm.

Ja jÅ«s interesē Å”is ietvars, iesaku apmeklēt tā oficiālo lapu un iepazÄ«ties ar pilnu dokumentācija, vai iedziļināties avotos Å”eit.

Avots: www.habr.com

Pievieno komentāru