Facile administru mikroservajn agordojn per microconfig.io

Unu el la ĉefaj problemoj en la disvolviĝo kaj posta funkciado de mikroservoj estas la kompetenta kaj preciza agordo de iliaj okazoj. Laŭ mi, nova kadro povas helpi pri tio microconfig.io. Ĝi permesas vin solvi iujn rutinajn aplikajn agordajn taskojn sufiĉe elegante.

Se vi havas multajn mikroservojn, kaj ĉiu el ili venas kun siaj propraj agordaj dosieroj/dosieroj, tiam estas alta probablo fari eraron en unu el ili, kio povas esti tre malfacile kapti sen taŭga lerteco kaj protokolo sistemo. La ĉefa tasko, kiun la kadro metas al si, estas minimumigi duplikatajn ekzemplajn agordajn parametrojn, tiel reduktante la verŝajnecon de aldono de eraro.

Ni rigardu ekzemplon. Ni diru, ke ni havas simplan aplikaĵon kun agorda dosiero yaml. Ĉi tio povas esti ajna mikroservo en iu ajn lingvo. Ni vidu kiel la kadro povas esti aplikita al ĉi tiu servo.

Sed unue, por pli granda oportuno, ni kreu malplenan projekton en Idea IDE, post instalo de la kromaĵo microconfig.io en ĝi:

Facile administru mikroservajn agordojn per microconfig.io

Ni starigis la aldonan lanĉan agordon, vi povas uzi la defaŭltan agordon, kiel en la supra ekrankopio.

Nia servo nomiĝas ordo, tiam en nova projekto ni kreos similan strukturon:

Facile administru mikroservajn agordojn per microconfig.io

Metu la agordan dosieron en la dosierujon kun la servonomo - aplikaĵo.yaml. Ĉiuj mikroservoj estas lanĉitaj en ia medio, do, krom krei agordon por la servo mem, necesas priskribi la medion mem: por tio ni kreos dosierujon. envs kaj aldonu al ĝi dosieron kun la nomo de nia labormedio. Tiel, la kadro kreos agordajn dosierojn por servoj en la medio dev, ĉar ĉi tiu parametro estas agordita en la aldonaĵagordoj.

Dosiera strukturo dev.yaml ĝi estos sufiĉe simpla:

mainorder:
    components:
         - order

La kadro funkcias kun agordoj kiuj estas grupigitaj kune. Por nia servo, elektu nomon por la grupo ĉefordono. La kadro trovas ĉiun tian grupon de aplikoj en la mediodosiero kaj kreas agordojn por ĉiuj ili, kiujn ĝi trovas en la respondaj dosierujoj.

En la servo agordoj dosiero mem ordo Ni specifu nur unu parametron nuntempe:

spring.application.name: order

Nun ni rulu la kromprogramon, kaj ĝi generos la bezonatan agordon por nia servo laŭ la vojo specifita en la propraĵoj:

Facile administru mikroservajn agordojn per microconfig.io

povas sukcesu kaj sen instali kromprogramon, simple elŝutante la kadrodistribuon kaj ruli ĝin de la komandlinio.
Ĉi tiu solvo taŭgas por uzo en konstruservilo.

Indas noti, ke la kadro perfekte komprenas propraĵo sintakso, tio estas, ordinaraj proprietaj dosieroj, kiuj povas esti uzataj kune en yaml agordojn.

Ni aldonu alian servon pago kaj kompliki la ekzistantan.
В ordo:

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

В pago:

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

La ĉefa problemo kun ĉi tiuj agordoj estas la ĉeesto de granda kvanto da kopio-gluo en la servo-agordoj. Ni vidu kiel la kadro helpos forigi ĝin. Ni komencu per la plej evidenta - la ĉeesto de agordo eŭreka en la priskribo de ĉiu mikroservo. Ni kreu novan dosierujon kun la agorda dosiero kaj aldonu novan agordon al ĝi:

Facile administru mikroservajn agordojn per microconfig.io

Kaj nun ni aldonu la linion al ĉiu el niaj projektoj #inkluzivi eŭreka.

La kadro aŭtomate trovos la eŭreka-agordon kaj kopios ĝin al la servo-agordodosieroj, dum aparta eŭreka-agordo ne estos kreita, ĉar ni ne specifos ĝin en la mediodosiero. dev.yaml. Servo ordo:

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

Ni ankaŭ povas movi la datumbazajn agordojn en apartan agordon ŝanĝante la importlinion al #include eŭreka, orakolo.

Indas noti, ke la kadro spuras ĉiun ŝanĝon dum regenerado de agordaj dosieroj kaj metas ĝin en specialan dosieron apud la ĉefa agorda dosiero. La enskribo en ĝia protokolo aspektas jene: "Stokita 1 posedaĵo ŝanĝiĝas al ordon/diff-application.yaml" Ĉi tio permesas vin rapide detekti ŝanĝojn al grandaj agordaj dosieroj.

Forigi komunajn partojn de la agordo permesas vin forigi multajn nenecesajn kopi-alglui, sed ne permesas flekseble krei agordon por malsamaj medioj - la finpunktoj de niaj servoj estas unikaj kaj malmolaj kodigitaj, ĉi tio estas malbona. Ni provu forigi ĉi tion.

Bona solvo estus konservi ĉiujn finpunktojn en unu agordo, kiun aliaj povas referenci. Por tiu celo, subteno por anstataŭiloj estis enkondukita en la kadron. Jen kiel la agorda dosiero ŝanĝiĝos eŭreka:

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

Nun ni vidu kiel funkcias ĉi tiu lokokupilo. La sistemo trovas komponanton nomitan finpunktoj kaj serĉas en ĝi signifon eurekaip, kaj poste anstataŭigas ĝin en nian agordon. Sed kio pri malsamaj medioj? Por fari tion, kreu agordan dosieron en finpunktoj jena tipo application.dev.yaml. La kadro sendepende, surbaze de la dosiertendo, decidas al kiu medio tiu agordo apartenas kaj ŝarĝas ĝin:

Facile administru mikroservajn agordojn per microconfig.io

Enhavo de dev-dosiero:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Ni povas krei la saman agordon por la havenoj de niaj servoj:

server.port: ${ports@order}.

Ĉiuj gravaj agordoj estas en unu loko, tiel reduktante la probablecon de eraroj pro disaj parametroj en agordaj dosieroj.

La kadro provizas multajn pretajn anstataŭaĵojn, ekzemple, vi povas ricevi la nomon de la dosierujo en kiu troviĝas la agorda dosiero kaj atribui ĝin:

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

Dank' al ĉi tio, ne necesas aldone specifi la nomon de la aplikaĵo en la agordo kaj ĝi ankaŭ povas esti metita en komunan modulon, ekzemple, en la sama eŭreka:

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

La agorda dosiero ordo estos reduktita al unu linio:

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

Se ni ne bezonas ajnan agordon de la gepatra agordo, ni povas specifi ĝin en nia agordo kaj ĝi estos aplikata dum generacio. Tio estas, se ial ni bezonas unikan nomon por la mendoservo, ni simple lasos la parametron printempo.apliko.nomo.

Ni diru, ke vi devas aldoni kutimajn registradajn agordojn al la servo, kiuj estas konservitaj en aparta dosiero, ekzemple, logback.xml. Ni kreu apartan grupon de agordoj por ĝi:

Facile administru mikroservajn agordojn per microconfig.io

En la baza agordo, ni diros al la kadro, kie meti la registran agorda dosieron, kiun ni bezonas per lokokupilo @ConfigDir:

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

En dosiero logback.xml ni agordas normajn aldonaĵojn, kiuj siavice ankaŭ povas enhavi anstataŭaĵojn, kiujn la kadro ŝanĝos dum la generacio de agordoj, ekzemple:

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

Aldonante importadon al servo-agordoj ensaluti, ni aŭtomate ricevas agordita ensalutu por ĉiu servo:

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

Estas tempo pli detale konatiĝi kun ĉiuj disponeblaj anstataŭiloj de la kadro:

${this@env} - resendas la nomon de la nuna medio.
${…@nomo} — redonas la nomon de la komponanto.
${…@configDir} — resendas la plenan vojon al la agorda dosierujo de la komponanto.
${…@resultDir} — resendas la plenan vojon al la celdosierujo de la komponento (la rezultaj dosieroj estos metitaj en ĉi tiun dosierujon).
${this@configRoot} — resendas la plenan vojon al la radika dosierujo de la agorda vendejo.

La sistemo ankaŭ permesas al vi akiri mediovariablojn, ekzemple la vojon al java:
${env@JAVA_HOME}
Aŭ, ĉar la kadro estas skribita enen JAVA, ni povas ricevi sistemajn variablojn similajn al la voko System::getProperty uzante strukturon kiel ĉi:
${[retpoŝte protektita]}
Menciindas subteno por la etenda lingvo Printempa EL. La sekvaj esprimoj estas aplikeblaj en la agordo:

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

kaj vi povas uzi lokajn variablojn en agordaj dosieroj uzante la esprimon #var:

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

Tiel, la kadro estas sufiĉe potenca ilo por fajnagordi kaj fleksebla agordo de mikroservoj. La kadro perfekte plenumas sian ĉefan taskon - forigi kopi-alglui en agordojn, solidigi agordojn kaj, kiel rezulto, minimumigi eblajn erarojn, ebligante vin facile kombini agordojn kaj ŝanĝi ilin por malsamaj medioj.

Se vi interesiĝas pri ĉi tiu kadro, mi rekomendas viziti ĝian oficialan paĝon kaj konatiĝi kun la plena dokumentado, aŭ enfosu la fontojn tie.

fonto: www.habr.com

Aldoni komenton