Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

Un o'r prif broblemau yn natblygiad a gweithrediad dilynol microwasanaethau yw cyfluniad cymwys a chywir eu hachosion. Yn fy marn i, gall fframwaith newydd helpu gyda hyn microconfig.io. Mae'n caniatΓ‘u ichi ddatrys rhai tasgau cyfluniad cymhwysiad arferol yn eithaf cain.

Os oes gennych lawer o ficrowasanaethau, a bod gan bob un ohonynt ei ffeil / ffeil ffurfweddu ei hun, yna mae tebygolrwydd uchel o wneud gwall yn un ohonynt, a all fod yn anodd iawn ei ddal heb y sgiliau cywir a system logio. Y brif dasg y mae'r fframwaith yn ei gosod iddo'i hun yw lleihau paramedrau cyfluniad achosion dyblyg, a thrwy hynny leihau'r tebygolrwydd o ychwanegu gwall.

Gadewch i ni edrych ar enghraifft. Gadewch i ni ddweud bod gennym ni gymhwysiad syml gyda ffeil ffurfweddu iaml. Gall hwn fod yn unrhyw ficrowasanaeth mewn unrhyw iaith. Gadewch i ni weld sut y gellir cymhwyso'r fframwaith i'r gwasanaeth hwn.

Ond yn gyntaf, er hwylustod, gadewch i ni greu prosiect gwag yn Idea IDE, ar Γ΄l gosod yr ategyn microconfig.io ynddo:

Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

Fe wnaethon ni sefydlu cyfluniad lansio'r ategyn, gallwch chi ddefnyddio'r cyfluniad diofyn, fel yn y screenshot uchod.

Gelwir ein gwasanaeth yn drefn, yna mewn prosiect newydd byddwn yn creu strwythur tebyg:

Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

Rhowch y ffeil ffurfweddu yn y ffolder gyda'r enw gwasanaeth - cais.yaml. Mae pob microwasanaeth yn cael ei lansio mewn rhyw fath o amgylchedd, felly, yn ogystal Γ’ chreu cyfluniad ar gyfer y gwasanaeth ei hun, mae angen disgrifio'r amgylchedd ei hun: ar gyfer hyn byddwn yn creu ffolder envs ac ychwanegu ffeil ato gydag enw ein hamgylchedd gwaith. Felly, bydd y fframwaith yn creu ffeiliau ffurfweddu ar gyfer gwasanaethau yn yr amgylchedd dev, gan fod y paramedr hwn wedi'i osod yn y gosodiadau ategyn.

Strwythur ffeil dev.yaml bydd yn eithaf syml:

mainorder:
    components:
         - order

Mae'r fframwaith yn gweithio gyda chyfluniadau sydd wedi'u grwpio gyda'i gilydd. Ar gyfer ein gwasanaeth, dewiswch enw ar gyfer y grΕ΅p prif drefn. Mae'r fframwaith yn dod o hyd i bob grΕ΅p o gymwysiadau o'r fath yn y ffeil amgylchedd ac yn creu ffurfweddiadau ar gyfer pob un ohonynt, y mae'n dod o hyd iddynt yn y ffolderi cyfatebol.

Yn y ffeil gosodiadau gwasanaeth ei hun er Gadewch i ni nodi dim ond un paramedr ar hyn o bryd:

spring.application.name: order

Nawr gadewch i ni redeg yr ategyn, a bydd yn cynhyrchu'r cyfluniad gofynnol ar gyfer ein gwasanaeth yn unol Γ’'r llwybr a nodir yn yr eiddo:

Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

A all cyd-dynnu a heb osod ategyn, dim ond lawrlwytho'r dosbarthiad fframwaith a'i redeg o'r llinell orchymyn.
Mae'r datrysiad hwn yn addas i'w ddefnyddio ar weinydd adeiladu.

Mae'n werth nodi bod y fframwaith yn deall yn iawn eiddo cystrawen, hynny yw, ffeiliau eiddo cyffredin y gellir eu defnyddio gyda'i gilydd mewn iaml cyfluniadau.

Gadewch i ni ychwanegu gwasanaeth arall taliad a chymhlethu'r un presennol.
Π’ er:

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

Π’ taliad:

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

Y brif broblem gyda'r ffurfweddiadau hyn yw presenoldeb llawer iawn o gopΓ―o-gludo yn y gosodiadau gwasanaeth. Gadewch i ni weld sut y bydd y fframwaith yn helpu i gael gwared arno. Gadewch i ni ddechrau gyda'r mwyaf amlwg - presenoldeb cyfluniad eureka yn y disgrifiad o bob microwasanaeth. Gadewch i ni greu cyfeiriadur newydd gyda'r ffeil gosodiadau ac ychwanegu cyfluniad newydd iddo:

Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

Ac yn awr gadewch i ni ychwanegu'r llinell at bob un o'n prosiectau #cynnwys eureka.

Bydd y fframwaith yn dod o hyd i'r ffurfweddiad eureka yn awtomatig ac yn ei gopΓ―o i'r ffeiliau cyfluniad gwasanaeth, tra na fydd ffurfweddiad eureka ar wahΓ’n yn cael ei greu, gan na fyddwn yn ei nodi yn y ffeil amgylchedd dev.yaml. Gwasanaeth er:

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

Gallwn hefyd symud gosodiadau'r gronfa ddata i ffurfweddiad ar wahΓ’n trwy newid y llinell fewnforio i #cynnwys eureka, oracl.

Mae'n werth nodi bod y fframwaith yn olrhain pob newid wrth adfywio ffeiliau cyfluniad a'i osod mewn ffeil arbennig wrth ymyl y brif ffeil ffurfweddu. Mae'r cofnod yn ei log yn edrych fel hyn: β€œStored 1 property yn newid i gorchymyn/diff-application.yaml" Mae hyn yn caniatΓ‘u ichi ganfod newidiadau i ffeiliau cyfluniad mawr yn gyflym.

Mae cael gwared ar rannau cyffredin o'r cyfluniad yn caniatΓ‘u ichi gael gwared ar lawer o gop-gludo diangen, ond nid yw'n caniatΓ‘u ichi greu cyfluniad hyblyg ar gyfer gwahanol amgylcheddau - mae pwyntiau terfyn ein gwasanaethau yn sengl ac Γ’ chod caled, mae hyn yn ddrwg. Gadewch i ni geisio cael gwared ar hyn.

Ateb da fyddai cadw pob pwynt terfyn mewn un ffurfweddiad y gall eraill gyfeirio ato. At y diben hwn, mae cymorth i ddeiliaid lleoedd wedi'i gyflwyno i'r fframwaith. Dyma sut y bydd y ffeil ffurfweddu yn newid eureka:

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

Nawr gadewch i ni weld sut mae'r dalfan hon yn gweithio. Mae'r system yn dod o hyd i gydran a enwir endpoints ac yn edrych am ystyr ynddo eurekaip, ac yna yn ei amnewid yn ein cyfluniad. Ond beth am wahanol amgylcheddau? I wneud hyn, creu ffeil gosodiadau yn endpoints y math canlynol cais.dev.yaml. Mae'r fframwaith yn annibynnol, yn seiliedig ar yr estyniad ffeil, yn penderfynu i ba amgylchedd y mae'r cyfluniad hwn yn perthyn ac yn ei lwytho:

Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

Cynnwys ffeil dev:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Gallwn greu'r un ffurfweddiad ar gyfer porthladdoedd ein gwasanaethau:

server.port: ${ports@order}.

Mae'r holl leoliadau pwysig mewn un lle, a thrwy hynny leihau'r tebygolrwydd o wallau oherwydd paramedrau gwasgaredig mewn ffeiliau cyfluniad.

Mae'r fframwaith yn darparu llawer o ddalfannau parod, er enghraifft, gallwch gael enw'r cyfeiriadur y mae'r ffeil ffurfweddu wedi'i leoli ynddo a'i aseinio:

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

Diolch i hyn, nid oes angen nodi enw'r cais yn y ffurfweddiad hefyd a gellir ei osod hefyd mewn modiwl cyffredin, er enghraifft, yn yr un eureka:

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

Y ffeil ffurfweddu er yn cael ei leihau i un llinell:

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

Os nad oes angen unrhyw osodiad arnom o'r cyfluniad rhiant, gallwn ei nodi yn ein cyfluniad a bydd yn cael ei gymhwyso yn ystod y genhedlaeth. Hynny yw, os am ryw reswm mae angen enw unigryw ar y gwasanaeth archebu, byddwn ni'n gadael y paramedr gwanwyn.cais.enw.

Gadewch i ni ddweud bod angen i chi ychwanegu gosodiadau logio arferol i'r gwasanaeth, sy'n cael eu storio mewn ffeil ar wahΓ’n, er enghraifft, mewngofnodi.xml. Gadewch i ni greu grΕ΅p o osodiadau ar wahΓ’n ar ei gyfer:

Rheoli ffurfweddau microservice yn hawdd gyda microconfig.io

Yn y cyfluniad sylfaenol, byddwn yn dweud wrth y fframwaith ble i osod y ffeil gosodiadau logio sydd ei hangen arnom gan ddefnyddio dalfan @ConfigDir:

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

Mewn ffeil mewngofnodi.xml rydym yn ffurfweddu atodiadau safonol, sydd yn eu tro hefyd yn gallu cynnwys dalfannau y bydd y fframwaith yn eu newid yn ystod cynhyrchu cyfluniadau, er enghraifft:

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

Trwy ychwanegu mewnforio at ffurfweddiadau gwasanaeth mewngofnodi, rydym yn cael logio wedi'i ffurfweddu'n awtomatig ar gyfer pob gwasanaeth:

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

Mae’n bryd dod i adnabod yr holl ddeiliaid lleoedd sydd ar gael yn y fframwaith yn fwy manwl:

${this@env} - yn dychwelyd enw'r amgylchedd presennol.
${…@enw} β€” yn dychwelyd enw'r gydran.
${…@configDir} β€” yn dychwelyd y llwybr llawn i gyfeiriadur ffurfweddu'r gydran.
${…@resultDir} β€” yn dychwelyd y llwybr llawn i gyfeiriadur cyrchfan y gydran (bydd y ffeiliau canlyniadol yn cael eu gosod yn y cyfeiriadur hwn).
${this@configRoot} β€” yn dychwelyd y llwybr llawn i gyfeiriadur gwraidd y storfa ffurfweddu.

Mae'r system hefyd yn caniatΓ‘u ichi gael newidynnau amgylchedd, er enghraifft y llwybr i java:
${env@JAVA_HOME}
Naill ai, gan fod y fframwaith wedi'i ysgrifennu ynddo JAVA, gallwn gael newidynnau system tebyg i'r alwad System::getProperty defnyddio strwythur fel hyn:
${[e-bost wedi'i warchod]}
Mae'n werth sΓ΄n am gefnogaeth i'r iaith estynnol Gwanwyn EL. Mae'r ymadroddion canlynol yn berthnasol yn y ffurfweddiad:

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

a gallwch ddefnyddio newidynnau lleol mewn ffeiliau ffurfweddu gan ddefnyddio'r mynegiant #var:

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

Felly, mae'r fframwaith yn arf eithaf pwerus ar gyfer mireinio a chyfluniad hyblyg o ficrowasanaethau. Mae'r fframwaith yn cyflawni ei brif dasg yn berffaith - dileu copi-gludo mewn gosodiadau, cydgrynhoi gosodiadau ac, o ganlyniad, lleihau gwallau posibl, tra'n caniatΓ‘u ichi gyfuno ffurfweddiadau yn hawdd a'u newid ar gyfer gwahanol amgylcheddau.

Os oes gennych ddiddordeb yn y fframwaith hwn, rwy'n argymell ymweld Γ’'i dudalen swyddogol a dod yn gyfarwydd Γ’'r llawn dogfennaeth, neu gloddio i mewn i'r ffynonellau yma.

Ffynhonnell: hab.com

Ychwanegu sylw