microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Mikroservislarni ishlab chiqish va undan keyingi foydalanishdagi asosiy muammolardan biri bu ularning instansiyalarini malakali va aniq konfiguratsiya qilishdir. Menimcha, yangi ramka bunga yordam berishi mumkin microconfig.io. Bu sizga ba'zi muntazam dastur konfiguratsiyasi vazifalarini juda oqlangan tarzda hal qilish imkonini beradi.

Agar sizda ko'plab mikroservislar mavjud bo'lsa va ularning har biri o'z konfiguratsiya fayli/fayllari bilan ta'minlangan bo'lsa, ulardan birida xato qilish ehtimoli yuqori bo'lib, tegishli malaka va ro'yxatga olish tizimisiz qo'lga olish juda qiyin bo'lishi mumkin. Ramka o'zi uchun qo'ygan asosiy vazifa takroriy nusxa konfiguratsiya parametrlarini minimallashtirish va shu bilan xato qo'shish ehtimolini kamaytirishdir.

Keling, bir misolni ko'rib chiqaylik. Aytaylik, bizda konfiguratsiya fayli bilan oddiy dastur bor yaml. Bu har qanday tilda har qanday mikroservis bo'lishi mumkin. Keling, ushbu xizmatga ramka qanday qo'llanilishi mumkinligini ko'rib chiqaylik.

Lekin avvalo, yanada qulaylik uchun microconfig.io plaginini o'rnatgandan so'ng Idea IDE-da bo'sh loyiha yarataylik:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Biz plaginni ishga tushirish konfiguratsiyasini o'rnatdik, siz yuqoridagi skrinshotda bo'lgani kabi standart konfiguratsiyadan foydalanishingiz mumkin.

Bizning xizmatimiz buyurtma deb ataladi, keyin yangi loyihada biz shunga o'xshash tuzilmani yaratamiz:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Konfiguratsiya faylini xizmat nomi bilan papkaga joylashtiring - ilova.yaml. Barcha mikroservislar qandaydir muhitda ishga tushiriladi, shuning uchun xizmatning o'zi uchun konfiguratsiyani yaratishdan tashqari, atrof-muhitning o'zini tavsiflash kerak: buning uchun biz papka yaratamiz. envs va unga ish muhitimiz nomi bilan fayl qo'shing. Shunday qilib, ramka muhitdagi xizmatlar uchun konfiguratsiya fayllarini yaratadi ulkan, chunki bu parametr plagin sozlamalarida o'rnatilgan.

Fayl tuzilishi dev.yaml juda oddiy bo'ladi:

mainorder:
    components:
         - order

Ramka birgalikda guruhlangan konfiguratsiyalar bilan ishlaydi. Bizning xizmatimiz uchun guruh nomini tanlang asosiy tartib. Ramka har bir bunday ilovalar guruhini muhit faylida topadi va ularning barchasi uchun mos keladigan papkalarda topadigan konfiguratsiyalarni yaratadi.

Xizmat sozlamalari faylining o'zida tartib Hozircha faqat bitta parametrni belgilaymiz:

spring.application.name: order

Endi plaginni ishga tushiramiz va u xususiyatlarda ko'rsatilgan yo'lga muvofiq xizmatimiz uchun kerakli konfiguratsiyani yaratadi:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

mumkin tomonidan olish va plaginni o'rnatmasdan, shunchaki ramka taqsimotini yuklab oling va uni buyruq satridan ishga tushiring.
Ushbu yechim qurilish serverida foydalanish uchun javob beradi.

Shuni ta'kidlash kerakki, ramka mukammal tushunadi mulk sintaksis, ya'ni birgalikda ishlatilishi mumkin bo'lgan oddiy xususiyat fayllari yaml konfiguratsiyalar.

Keling, boshqa xizmatni qo'shamiz to'lov va mavjudni murakkablashtiradi.
В tartib:

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

В to'lov:

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

Ushbu konfiguratsiyalar bilan bog'liq asosiy muammo - bu xizmat sozlamalarida ko'p miqdorda nusxa ko'chirish-joylashtirishning mavjudligi. Keling, ramka undan xalos bo'lishga qanday yordam berishini ko'rib chiqaylik. Keling, eng aniq - konfiguratsiya mavjudligi bilan boshlaylik eureka har bir mikroservis tavsifida. Keling, sozlamalar fayli bilan yangi katalog yaratamiz va unga yangi konfiguratsiya qo'shamiz:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Keling, har bir loyihamizga qator qo'shamiz #evrikani o'z ichiga oladi.

Ramka avtomatik ravishda evrika konfiguratsiyasini topadi va uni xizmat konfiguratsiyasi fayllariga ko'chiradi, alohida evrika konfiguratsiyasi yaratilmaydi, chunki biz uni muhit faylida ko'rsatmaymiz. dev.yaml. Xizmat tartib:

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

Import qatorini oʻzgartirish orqali maʼlumotlar bazasi sozlamalarini alohida konfiguratsiyaga ham koʻchirishimiz mumkin #eureka, oracle kiradi.

Shuni ta'kidlash kerakki, ramka konfiguratsiya fayllarini qayta tiklashda har bir o'zgarishlarni kuzatib boradi va uni asosiy konfiguratsiya fayli yonidagi maxsus faylga joylashtiradi. Uning jurnalidagi yozuv quyidagicha ko'rinadi: “Saqlangan 1 xususiyat quyidagiga o'zgaradi order/diff-application.yaml" Bu sizga katta konfiguratsiya fayllaridagi o'zgarishlarni tezda aniqlash imkonini beradi.

Konfiguratsiyaning umumiy qismlarini olib tashlash sizga juda ko'p keraksiz nusxa ko'chirish-joylashtirishdan xalos bo'lishga imkon beradi, lekin turli xil muhitlar uchun moslashuvchan konfiguratsiyani yaratishga imkon bermaydi - xizmatlarimizning so'nggi nuqtalari noyob va qattiq kodlangan, bu yomon. Keling, buni olib tashlashga harakat qilaylik.

Yaxshi yechim barcha so'nggi nuqtalarni boshqalar murojaat qilishi mumkin bo'lgan bitta konfiguratsiyada saqlashdir. Shu maqsadda, to'ldiruvchilarni qo'llab-quvvatlash ramkaga kiritilgan. Konfiguratsiya fayli shunday o'zgaradi eureka:

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

Keling, ushbu to'ldiruvchi qanday ishlashini ko'rib chiqaylik. Tizim nomli komponentni topadi so'nggi nuqtalar va unda ma'no izlaydi evrikaip, va keyin uni konfiguratsiyamizga almashtiradi. Ammo turli muhitlar haqida nima deyish mumkin? Buning uchun sozlamalar faylini yarating so'nggi nuqtalar quyidagi tur application.dev.yaml. Ramka fayl kengaytmasiga asoslanib, ushbu konfiguratsiya qaysi muhitga tegishli ekanligini mustaqil ravishda hal qiladi va uni yuklaydi:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Dev fayli tarkibi:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Xizmatlarimiz portlari uchun bir xil konfiguratsiyani yaratishimiz mumkin:

server.port: ${ports@order}.

Barcha muhim sozlamalar bir joyda, shu bilan konfiguratsiya fayllaridagi tarqoq parametrlar tufayli xatolik ehtimolini kamaytiradi.

Ramka ko'plab tayyor to'ldiruvchilarni taqdim etadi, masalan, siz konfiguratsiya fayli joylashgan katalog nomini olishingiz va uni belgilashingiz mumkin:

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

Buning yordamida konfiguratsiyada ilova nomini qo'shimcha ravishda ko'rsatishning hojati yo'q va uni umumiy modulga, masalan, bir xil evrikaga joylashtirish mumkin:

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

Konfiguratsiya fayli tartib bir qatorga qisqartiriladi:

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

Agar bizga ota-ona konfiguratsiyasidan hech qanday sozlama kerak bo'lmasa, biz uni konfiguratsiyamizda belgilashimiz mumkin va u ishlab chiqarish jarayonida qo'llaniladi. Ya'ni, agar biron sababga ko'ra buyurtma xizmati uchun noyob nom kerak bo'lsa, biz faqat parametrni qoldiramiz bahor.ilova.nomi.

Aytaylik, siz xizmatga alohida faylda saqlanadigan maxsus jurnal sozlamalarini qo'shishingiz kerak, masalan, logback.xml. Buning uchun alohida sozlamalar guruhini yaratamiz:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Asosiy konfiguratsiyada biz to'ldiruvchi yordamida kerakli ro'yxatga olish sozlamalari faylini qaerga joylashtirishni ramkaga aytamiz. @ConfigDir:

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

Fayl ichida logback.xml biz standart qo'shimchalarni sozlaymiz, ular o'z navbatida konfiguratsiyalarni yaratish jarayonida ramka o'zgaradigan to'ldiruvchilarni ham o'z ichiga olishi mumkin, masalan:

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

Xizmat konfiguratsiyalariga import qo'shish orqali logback, biz har bir xizmat uchun avtomatik ravishda ro'yxatga olishni sozlaymiz:

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

Ramkaning barcha mavjud to'ldiruvchilari bilan batafsilroq tanishish vaqti keldi:

${this@env} - joriy muhit nomini qaytaradi.
${…@name} — komponent nomini qaytaradi.
${…@configDir} — komponentning konfiguratsiya katalogiga toʻliq yoʻlni qaytaradi.
${…@resultDir} — komponentning maqsadli katalogiga toʻliq yoʻlni qaytaradi (natijadagi fayllar shu katalogga joylashtiriladi).
${this@configRoot} — konfiguratsiyalar doʻkonining asosiy katalogiga toʻliq yoʻlni qaytaradi.

Tizim shuningdek, atrof-muhit o'zgaruvchilarini olish imkonini beradi, masalan, java yo'li:
${env@JAVA_HOME}
Yoki, ramka yozilganligi sababli JAVA, biz qo'ng'iroqqa o'xshash tizim o'zgaruvchilarini olishimiz mumkin System::getProperty shunga o'xshash strukturadan foydalanish:
${[elektron pochta bilan himoyalangan]}
Kengaytma tilini qo'llab-quvvatlashni ta'kidlash kerak Bahor EL. Konfiguratsiyada quyidagi iboralar qo'llaniladi:

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

va ifoda yordamida konfiguratsiya fayllarida mahalliy o'zgaruvchilardan foydalanishingiz mumkin #var:

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

Shunday qilib, ramka mikroservislarni nozik sozlash va moslashuvchan konfiguratsiya qilish uchun juda kuchli vositadir. Ramka o'zining asosiy vazifasini a'lo darajada bajaradi - sozlamalarda nusxa ko'chirishni yo'q qilish, sozlamalarni birlashtirish va natijada yuzaga kelishi mumkin bo'lgan xatolarni minimallashtirish, shu bilan birga konfiguratsiyalarni osongina birlashtirish va ularni turli muhitlar uchun o'zgartirish imkonini beradi.

Agar siz ushbu ramka bilan qiziqsangiz, uning rasmiy sahifasiga tashrif buyurishni va to'liq tanishishni tavsiya qilaman hujjatlar, yoki manbalarni qazib oling shu yerda.

Manba: www.habr.com

a Izoh qo'shish