microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Mikroservislarni ishlab chiqish va keyinchalik ulardan foydalanishdagi asosiy muammolardan biri ularning namunalarini to'g'ri va aniq sozlashdir. Menimcha, yangi ramka bunga yordam berishi mumkin. microconfig.ioBu sizga ba'zi muntazam dastur konfiguratsiyasi vazifalarini juda oqlangan tarzda hal qilish imkonini beradi.

Agar sizda ko'plab mikroservislar mavjud bo'lsa, ularning har biri o'z konfiguratsiya fayl(lar)iga ega bo'lsa, ulardan birida xatolik paydo bo'lish xavfi yuqori bo'lib, tegishli treningsiz va ro'yxatga olish tizimisiz ushlash juda qiyin bo'lishi mumkin. Ramkaning asosiy maqsadi takroriy nusxa konfiguratsiya parametrlarini minimallashtirish va shu bilan xatolarni kiritish ehtimolini kamaytirishdir.

Keling, bir misolni ko'rib chiqaylik. Faraz qilaylik, konfiguratsiya fayliga ega oddiy dastur mavjud. yamlBu har qanday tildagi har qanday mikroservis bo'lishi mumkin. Keling, ushbu xizmatga ramka qanday qo'llanilishi mumkinligini ko'rib chiqaylik.

Ammo, avvalo, yanada qulayroq bo'lishi uchun, avval microconfig.io plaginini o'rnatgan holda Idea IDE-da bo'sh loyiha yarataylik:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Biz plaginni ishga tushirish konfiguratsiyasini sozlaymiz; yuqoridagi skrinshotda bo'lgani kabi standart konfiguratsiyadan foydalanishingiz mumkin.

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

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Konfiguratsiya faylini xizmat nomi bilan papkaga joylashtiring - ilova.yamlBarcha mikroservislar qandaydir muhitda ishlaydi, shuning uchun xizmat konfiguratsiyasini o'zi yaratishdan tashqari, biz muhitning o'zini tasvirlashimiz kerak: buning uchun biz papka yaratamiz. envs va ish muhitimiz nomi bilan faylni 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. Xizmatimiz uchun guruh nomini tanlaylik. asosiy tartibRamka 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'lda 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, yana bitta xizmatni qo'shamiz to'lov va bir vaqtning o'zida 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 nusxa ko'chirishning katta miqdori. Keling, ramka buni bartaraf etishga qanday yordam berishini ko'rib chiqaylik. Eng aniq narsadan boshlaylik: konfiguratsiya mavjudligi. eureka har bir mikroservis tavsifida. Sozlamalar fayli bilan yangi katalog yaratamiz va unga yangi konfiguratsiya qo'shamiz:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Va endi biz har bir loyihamizga qator qo'shamiz. #evrikani o'z ichiga oladi.

Ramka avtomatik ravishda evrika konfiguratsiyasini topadi va uni xizmat konfiguratsiya fayllariga ko'chiradi, lekin biz uni muhit faylida ko'rsatmaganimiz uchun alohida evrika konfiguratsiyasi yaratilmaydi. 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 qilingan har bir o'zgarishlarni kuzatib boradi va uni asosiy konfiguratsiya fayli yonidagi maxsus faylga joylashtiradi. Uning jurnalidagi yozuv quyidagicha ko'rinadi: "Saqlangan 1 xususiyat o'zgaradi order/diff-application.yaml”. Bu sizga katta konfiguratsiya fayllaridagi o'zgarishlarni tezda aniqlash imkonini beradi.

Umumiy konfiguratsiya qismlarini olib tashlash juda koʻp keraksiz nusxa koʻchirish va joylashtirishni yoʻq qiladi, lekin bu turli muhitlar uchun moslashuvchan konfiguratsiyaga ruxsat bermaydi — xizmatlarimizning soʻnggi nuqtalari bir tomonlama va qattiq kodlangan, bu yomon. Keling, buni bartaraf etishga harakat qilaylik.

Yaxshi yechim barcha so'nggi nuqtalarni boshqalar murojaat qilishi mumkin bo'lgan yagona konfiguratsiyada saqlashdir. Shu maqsadda, ramka to'ldiruvchilarni qo'llab-quvvatlashni amalga oshirdi. Bu erda konfiguratsiya fayli qanday o'zgarishi mumkin. 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 kiritadi. Ammo turli muhitlar haqida nima deyish mumkin? Buning uchun sozlamalar faylini yaratamiz so'nggi nuqtalar quyidagi turdagi application.dev.yamlRamka fayl kengaytmasiga asoslanib, berilgan konfiguratsiya qaysi muhitga tegishli ekanligini mustaqil ravishda hal qiladi va uni yuklaydi:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Dev faylining 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 joylashgan bo'lib, parametrlar konfiguratsiya fayllari bo'ylab tarqalib ketganligi sababli xatolar 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 ko'chirish ham 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 sozlama kerak bo'lmasa, biz uni konfiguratsiyamizda belgilashimiz mumkin va u yaratish jarayonida qo'llaniladi. Shunday qilib, agar biron sababga ko'ra buyurtma xizmati uchun noyob nom kerak bo'lsa, biz shunchaki parametrni qoldiramiz. bahor.ilova.nomi.

Aytaylik, xizmatga alohida faylda saqlanadigan moslashtirilgan jurnal sozlamalarini qo'shishingiz kerak, masalan, logback.xmlBuning uchun alohida sozlamalar guruhini yaratamiz:

microconfig.io yordamida mikroservis konfiguratsiyalarini osongina boshqaring

Asosiy konfiguratsiyada biz kerakli ro'yxatga olish sozlamalari faylini to'ldiruvchi yordamida 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 konfiguratsiyani yaratish jarayonida ramka o'zgaradigan to'ldiruvchilarni ham o'z ichiga olishi mumkin, masalan:

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

Xizmat konfiguratsiyalariga import qo'shilmoqda logback, biz har bir xizmat uchun avtomatik ravishda sozlangan jurnalni olamiz:

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

Frameworkning barcha mavjud to'ldiruvchilarini batafsil ko'rib chiqish 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 ushbu katalogga joylashtiriladi).
${this@configRoot} — konfiguratsiya xotirasining ildiz katalogiga toʻliq yoʻlni qaytaradi.

Tizim, shuningdek, Java-ga yo'l kabi muhit o'zgaruvchilarini olish imkonini beradi:
${env@JAVA_HOME}
Yoki, ramka yozilganligi sababli JAVA, biz qo'ng'iroqqa o'xshash tizim o'zgaruvchilarini olishimiz mumkin System::getProperty Ushbu turdagi konstruktsiyadan foydalanish:
${system@os.name}
Kengaytma tilini qo'llab-quvvatlashni ta'kidlash kerak Bahor ELKonfiguratsiyada quyidagi iboralar qo'llaniladi:

connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${this@datasource.minimum-pool-size} + 10} 

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

#var feedRoot: ${system@user.home}/feed
folder:
 root: ${this@feedRoot}
 success: ${this@feedRoot}/archive
 error: ${this@feedRoot}/error

Shunday qilib, ramka nozik sozlash va moslashuvchan mikroservis konfiguratsiyasi uchun juda kuchli vositadir. Ramka o'zining asosiy maqsadini mukammal darajada bajaradi - nusxa ko'chirish va joylashtirish konfiguratsiyasini yo'q qilish, sozlamalarni birlashtirish va natijada yuzaga kelishi mumkin bo'lgan xatolarni minimallashtirish - shu bilan birga turli xil muhitlar uchun oson konfiguratsiya kombinatsiyalari va moslashtirish imkonini beradi.

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

Manba: www.habr.com

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster