Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Ένα από τα κύρια προβλήματα στην ανάπτυξη και την επακόλουθη λειτουργία των μικροϋπηρεσιών είναι η ικανή και ακριβής διαμόρφωση των παρουσιών τους. Κατά τη γνώμη μου, ένα νέο πλαίσιο μπορεί να βοηθήσει σε αυτό microconfig.io. Σας επιτρέπει να επιλύετε αρκετά κομψά ορισμένες εργασίες ρουτίνας διαμόρφωσης εφαρμογών.

Εάν έχετε πολλές μικροϋπηρεσίες και καθεμία από αυτές συνοδεύεται από το δικό της αρχείο/αρχεία διαμόρφωσης, τότε υπάρχει μεγάλη πιθανότητα να κάνετε ένα σφάλμα σε μία από αυτές, το οποίο μπορεί να είναι πολύ δύσκολο να εντοπιστεί χωρίς την κατάλληλη ικανότητα και σύστημα καταγραφής. Το κύριο καθήκον που θέτει το πλαίσιο για τον εαυτό του είναι να ελαχιστοποιήσει τις παραμέτρους διαμόρφωσης διπλότυπων περιπτώσεων, μειώνοντας έτσι την πιθανότητα προσθήκης σφάλματος.

Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε μια απλή εφαρμογή με ένα αρχείο διαμόρφωσης γιαμ. Αυτό μπορεί να είναι οποιαδήποτε microservice σε οποιαδήποτε γλώσσα. Ας δούμε πώς μπορεί να εφαρμοστεί το πλαίσιο σε αυτήν την υπηρεσία.

Αλλά πρώτα, για μεγαλύτερη ευκολία, ας δημιουργήσουμε ένα κενό έργο στο Idea IDE, αφού εγκαταστήσουμε το πρόσθετο microconfig.io σε αυτό:

Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Ρυθμίσαμε τη διαμόρφωση εκκίνησης της προσθήκης, μπορείτε να χρησιμοποιήσετε την προεπιλεγμένη διαμόρφωση, όπως στο παραπάνω στιγμιότυπο οθόνης.

Η υπηρεσία μας ονομάζεται παραγγελία, τότε σε ένα νέο έργο θα δημιουργήσουμε μια παρόμοια δομή:

Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Τοποθετήστε το αρχείο διαμόρφωσης στο φάκελο με το όνομα της υπηρεσίας - εφαρμογή.yaml. Όλες οι μικροϋπηρεσίες εκκινούνται σε κάποιο είδος περιβάλλοντος, επομένως, εκτός από τη δημιουργία μιας διαμόρφωσης για την ίδια την υπηρεσία, είναι απαραίτητο να περιγράψουμε το ίδιο το περιβάλλον: για αυτό θα δημιουργήσουμε έναν φάκελο envs και προσθέστε ένα αρχείο σε αυτό με το όνομα του περιβάλλοντος εργασίας μας. Έτσι, το πλαίσιο θα δημιουργήσει αρχεία διαμόρφωσης για υπηρεσίες στο περιβάλλον dev, καθώς αυτή η παράμετρος έχει οριστεί στις ρυθμίσεις της προσθήκης.

Δομή αρχείου dev.yaml θα είναι πολύ απλό:

mainorder:
    components:
         - order

Το πλαίσιο λειτουργεί με διαμορφώσεις που είναι ομαδοποιημένες. Για την υπηρεσία μας, επιλέξτε ένα όνομα για την ομάδα κύριας παραγγελίας. Το πλαίσιο βρίσκει κάθε τέτοια ομάδα εφαρμογών στο αρχείο περιβάλλοντος και δημιουργεί διαμορφώσεις για όλες, τις οποίες βρίσκει στους αντίστοιχους φακέλους.

Στο ίδιο το αρχείο ρυθμίσεων υπηρεσίας τάξη Ας καθορίσουμε μόνο μία παράμετρο προς το παρόν:

spring.application.name: order

Τώρα ας εκτελέσουμε το πρόσθετο και θα δημιουργήσει την απαιτούμενη διαμόρφωση για την υπηρεσία μας σύμφωνα με τη διαδρομή που καθορίζεται στις ιδιότητες:

Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Μπορείτε πάρτε μαζί και χωρίς να εγκαταστήσετε κάποιο πρόσθετο, απλώς κατεβάστε τη διανομή πλαισίου και εκτελέστε την από τη γραμμή εντολών.
Αυτή η λύση είναι κατάλληλη για χρήση σε διακομιστή κατασκευής.

Αξίζει να σημειωθεί ότι το πλαίσιο κατανοεί τέλεια περιουσία σύνταξη, δηλαδή, συνηθισμένα αρχεία ιδιοτήτων που μπορούν να χρησιμοποιηθούν μαζί σε γιαμ διαμορφώσεις.

Ας προσθέσουμε μια άλλη υπηρεσία πληρωμή και περιπλέκουν την υπάρχουσα.
В τάξη:

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

В πληρωμή:

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

Το κύριο πρόβλημα με αυτές τις διαμορφώσεις είναι η παρουσία μεγάλης ποσότητας αντιγραφής-επικόλλησης στις ρυθμίσεις της υπηρεσίας. Ας δούμε πώς το πλαίσιο θα βοηθήσει να απαλλαγούμε από αυτό. Ας ξεκινήσουμε με το πιο προφανές - την παρουσία διαμόρφωσης εύρηκα στην περιγραφή κάθε μικρουπηρεσίας. Ας δημιουργήσουμε έναν νέο κατάλογο με το αρχείο ρυθμίσεων και ας προσθέσουμε μια νέα διαμόρφωση σε αυτόν:

Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Και τώρα ας προσθέσουμε τη γραμμή σε κάθε έργο μας #include εύρηκα.

Το πλαίσιο θα βρει αυτόματα τη διαμόρφωση του eureka και θα την αντιγράψει στα αρχεία διαμόρφωσης της υπηρεσίας, ενώ δεν θα δημιουργηθεί ξεχωριστή διαμόρφωση eureka, αφού δεν θα την καθορίσουμε στο αρχείο περιβάλλοντος dev.yaml. Υπηρεσία τάξη:

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

Μπορούμε επίσης να μετακινήσουμε τις ρυθμίσεις της βάσης δεδομένων σε ξεχωριστή διαμόρφωση αλλάζοντας τη γραμμή εισαγωγής σε #include εύρηκα, χρησμός.

Αξίζει να σημειωθεί ότι το πλαίσιο παρακολουθεί κάθε αλλαγή κατά την αναγέννηση αρχείων ρυθμίσεων και την τοποθετεί σε ένα ειδικό αρχείο δίπλα στο κύριο αρχείο διαμόρφωσης. Η καταχώριση στο αρχείο καταγραφής της μοιάζει με αυτό: "Αποθηκευμένη 1 ιδιότητα αλλάζει σε order/diff-application.yaml" Αυτό σας επιτρέπει να εντοπίζετε γρήγορα αλλαγές σε μεγάλα αρχεία διαμόρφωσης.

Η κατάργηση κοινών τμημάτων της διαμόρφωσης σάς επιτρέπει να απαλλαγείτε από πολλά περιττά copy-paste, αλλά δεν σας επιτρέπει να δημιουργήσετε με ευελιξία μια διαμόρφωση για διαφορετικά περιβάλλοντα - τα τελικά σημεία των υπηρεσιών μας είναι μοναδικά και κωδικοποιημένα, αυτό είναι κακό. Ας προσπαθήσουμε να το αφαιρέσουμε.

Μια καλή λύση θα ήταν να διατηρήσετε όλα τα τελικά σημεία σε μια διαμόρφωση στην οποία μπορούν να αναφέρονται άλλοι. Για το σκοπό αυτό, έχει εισαχθεί στο πλαίσιο υποστήριξη για placeholders. Έτσι θα αλλάξει το αρχείο ρυθμίσεων εύρηκα:

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

Τώρα ας δούμε πώς λειτουργεί αυτό το σύμβολο κράτησης θέσης. Το σύστημα βρίσκει ένα στοιχείο με το όνομα τελικά σημεία και αναζητά νόημα σε αυτό eurekaip, και στη συνέχεια το αντικαθιστά στη διαμόρφωσή μας. Τι γίνεται όμως με τα διαφορετικά περιβάλλοντα; Για να το κάνετε αυτό, δημιουργήστε ένα αρχείο ρυθμίσεων στο τελικά σημεία τον παρακάτω τύπο application.dev.yaml. Το πλαίσιο ανεξάρτητα, με βάση την επέκταση αρχείου, αποφασίζει σε ποιο περιβάλλον ανήκει αυτή η διαμόρφωση και το φορτώνει:

Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Περιεχόμενα αρχείου προγραμματιστή:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Μπορούμε να δημιουργήσουμε την ίδια διαμόρφωση για τις θύρες των υπηρεσιών μας:

server.port: ${ports@order}.

Όλες οι σημαντικές ρυθμίσεις βρίσκονται σε ένα μέρος, μειώνοντας έτσι την πιθανότητα σφαλμάτων λόγω διάσπαρτων παραμέτρων στα αρχεία διαμόρφωσης.

Το πλαίσιο παρέχει πολλά έτοιμα σύμβολα κράτησης θέσης, για παράδειγμα, μπορείτε να λάβετε το όνομα του καταλόγου στον οποίο βρίσκεται το αρχείο διαμόρφωσης και να το αντιστοιχίσετε:

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

Χάρη σε αυτό, δεν χρειάζεται να προσδιορίσετε επιπλέον το όνομα της εφαρμογής στη διαμόρφωση και μπορεί επίσης να τοποθετηθεί σε μια κοινή ενότητα, για παράδειγμα, στο ίδιο eureka:

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

Το αρχείο ρυθμίσεων τάξη θα μειωθεί σε μία γραμμή:

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

Εάν δεν χρειαζόμαστε καμία ρύθμιση από τη γονική διαμόρφωση, μπορούμε να την καθορίσουμε στη διαμόρφωση μας και θα εφαρμοστεί κατά τη δημιουργία. Δηλαδή, εάν για κάποιο λόγο χρειαζόμαστε ένα μοναδικό όνομα για την υπηρεσία παραγγελιών, απλώς θα αφήσουμε την παράμετρο άνοιξη.εφαρμογή.όνομα.

Ας υποθέσουμε ότι πρέπει να προσθέσετε προσαρμοσμένες ρυθμίσεις καταγραφής στην υπηρεσία, οι οποίες αποθηκεύονται σε ξεχωριστό αρχείο, για παράδειγμα, logback.xml. Ας δημιουργήσουμε μια ξεχωριστή ομάδα ρυθμίσεων για αυτό:

Διαχειριστείτε εύκολα τις διαμορφώσεις microservice με το microconfig.io

Στη βασική διαμόρφωση, θα πούμε στο πλαίσιο πού να τοποθετήσει το αρχείο ρυθμίσεων καταγραφής που χρειαζόμαστε χρησιμοποιώντας ένα σύμβολο κράτησης θέσης @ConfigDir:

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

Στο αρχείο logback.xml διαμορφώνουμε τυπικά προσαρτήματα, τα οποία με τη σειρά τους μπορούν επίσης να περιέχουν σύμβολα κράτησης θέσης που θα αλλάξει το πλαίσιο κατά τη δημιουργία ρυθμίσεων, για παράδειγμα:

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

Με την προσθήκη εισαγωγής στις διαμορφώσεις υπηρεσίας logback, λαμβάνουμε αυτόματα διαμορφωμένη καταγραφή για κάθε υπηρεσία:

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

Ήρθε η ώρα να εξοικειωθείτε λεπτομερέστερα με όλα τα διαθέσιμα placeholder του πλαισίου:

${this@env} - επιστρέφει το όνομα του τρέχοντος περιβάλλοντος.
${…@name} — επιστρέφει το όνομα του στοιχείου.
${…@configDir} — επιστρέφει την πλήρη διαδρομή στον κατάλογο ρυθμίσεων του στοιχείου.
${…@resultDir} — επιστρέφει την πλήρη διαδρομή στον κατάλογο προορισμού του στοιχείου (τα αρχεία που προκύπτουν θα τοποθετηθούν σε αυτόν τον κατάλογο).
${this@configRoot} — επιστρέφει την πλήρη διαδρομή στον ριζικό κατάλογο του χώρου αποθήκευσης ρυθμίσεων.

Το σύστημα σάς επιτρέπει επίσης να λαμβάνετε μεταβλητές περιβάλλοντος, για παράδειγμα τη διαδρομή προς τη Java:
${env@JAVA_HOME}
Είτε, αφού το πλαίσιο είναι γραμμένο JAVA, μπορούμε να λάβουμε μεταβλητές συστήματος παρόμοιες με την κλήση Σύστημα::getProperty χρησιμοποιώντας μια δομή όπως αυτή:
${[προστασία μέσω email]}
Αξίζει να αναφέρουμε την υποστήριξη για τη γλώσσα επέκτασης Άνοιξη ΕΛ. Οι ακόλουθες εκφράσεις ισχύουν στη διαμόρφωση:

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

και μπορείτε να χρησιμοποιήσετε τοπικές μεταβλητές σε αρχεία διαμόρφωσης χρησιμοποιώντας την έκφραση #var:

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

Έτσι, το πλαίσιο είναι ένα αρκετά ισχυρό εργαλείο για τη λεπτομερή ρύθμιση και την ευέλικτη διαμόρφωση των μικροϋπηρεσιών. Το πλαίσιο εκπληρώνει τέλεια το κύριο καθήκον του - εξάλειψη της αντιγραφής-επικόλλησης στις ρυθμίσεις, ενοποίηση ρυθμίσεων και, ως αποτέλεσμα, ελαχιστοποίηση πιθανών σφαλμάτων, ενώ σας επιτρέπει να συνδυάζετε εύκολα διαμορφώσεις και να τις αλλάζετε για διαφορετικά περιβάλλοντα.

Εάν ενδιαφέρεστε για αυτό το πλαίσιο, σας προτείνω να επισκεφτείτε την επίσημη σελίδα του και να εξοικειωθείτε με το πλήρες τεκμηρίωση, ή ψάξτε στις πηγές εδώ.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο