Επιλυτές προορισμού
Το YARP χρησιμοποιεί έναν επιλυτή προορισμού (destination resolver) για να επεκτείνει το σύνολο των διαμορφωμένων διευθύνσεων προορισμού. Ο
Επεκτασιμότητα YARP – Επιλυτές προορισμού
Εισαγωγή
Το YARP χρησιμοποιεί έναν επιλυτή προορισμού (destination resolver) για να επεκτείνει το σύνολο των διαμορφωμένων διευθύνσεων προορισμού. Ο επιλυτής προορισμού μπορεί να χρησιμοποιηθεί ως σημείο ενσωμάτωσης με συστήματα ανακάλυψης υπηρεσιών (service discovery).
Δομή
Το IDestinationResolver έχει μία μόνο μέθοδο
ResolveDestinationsAsync(IReadOnlyDictionary<string, DestinationConfig> destinations,
CancellationToken cancellationToken), η οποία πρέπει να επιστρέφει ένα στιγμιότυπο ResolvedDestinationCollection. Το ResolvedDestinationCollection περιέχει μια συλλογή στιγμιοτύπων DestinationConfig, καθώς και ένα IChangeToken για να ειδοποιεί τον διακομιστή μεσολάβησης όταν αυτές οι πληροφορίες είναι ξεπερασμένες και πρέπει να επαναφορτωθούν, κάτι που θα προκαλέσει την εκ νέου κλήση της ResolveDestinationsAsync.
DestinationConfig
Το DestinationConfig διαθέτει μια ιδιότητα Host που μπορεί να χρησιμοποιηθεί για να καθορίσει την προεπιλεγμένη τιμή της κεφαλίδας Host που θα πρέπει να χρησιμοποιεί ο διακομιστής μεσολάβησης κατά την επικοινωνία με αυτόν τον προορισμό. Αυτό επιτρέπει στο IDestinationResolver να επιλύει προορισμούς σε μια συλλογή διευθύνσεων IP, για παράδειγμα, χωρίς να προκαλεί αποτυχία στο SNI ή στη δρομολόγηση με βάση το host.
Κύκλος ζωής
Εκκίνηση
Το IDestinationResolver θα πρέπει να καταχωρίζεται στο container έγχυσης εξαρτήσεων (DI) ως singleton. Κατά την εκκίνηση, ο διακομιστής μεσολάβησης θα επιλύσει αυτό το στιγμιότυπο και θα καλέσει τη ResolveDestinationsAsync(...) με τους διαμορφωμένους προορισμούς που ανακτώνται από τα επιλυμένα IProxyConfigProviders . Σε αυτή την πρώτη κλήση, ο πάροχος μπορεί να επιλέξει:
Να προκαλέσει μια εξαίρεση, αν ο πάροχος δεν μπορεί να παράγει έγκυρη διαμόρφωση διακομιστή μεσολάβησης για οποιονδήποτε λόγο. Αυτό θα εμποδίσει την εκκίνηση της εφαρμογής. Να επιλύσει τους προορισμούς ασύγχρονα. Αυτό θα εμποδίσει την εκκίνηση της εφαρμογής μέχρι να είναι διαθέσιμοι οι επιλυμένοι προορισμοί.
Ή, μπορεί να επιλέξει να επιστρέψει ένα κενό στιγμιότυπο ResolvedDestinationCollection ενώ
επιλύει τους προορισμούς στο παρασκήνιο. Ο πάροχος θα πρέπει να ενεργοποιήσει το
IChangeToken όταν η διαμόρφωση γίνει διαθέσιμη.
Ατομικότητα
Τα αντικείμενα και οι συλλογές προορισμών που παρέχονται στον διακομιστή μεσολάβησης θα πρέπει να είναι μόνο για ανάγνωση και να μην τροποποιούνται αφότου έχουν παραδοθεί στον διακομιστή μεσολάβησης μέσω της GetConfig() .
Επαναφόρτωση
Αν το IChangeToken υποστηρίζει ActiveChangeCallbacks , μόλις ο διακομιστής μεσολάβησης επεξεργαστεί το αρχικό σύνολο προορισμών, θα καταχωρίσει μια επανάκληση (callback) σε αυτό το token. Αν ο πάροχος δεν υποστηρίζει επανακλήσεις, τότε το HasChanged θα ελέγχεται περιοδικά μαζί με τα change tokens του IProxyConfig, κάθε 5 λεπτά.
Όταν ο πάροχος θέλει να παράσχει ένα νέο σύνολο προορισμών στον διακομιστή μεσολάβησης, θα πρέπει να:
Επιλύσει αυτούς τους προορισμούς στο παρασκήνιο. Το ResolvedDestinationCollection είναι αμετάβλητο (immutable), οπότε πρέπει να δημιουργηθούν νέα στιγμιότυπα για κάθε νέο δεδομένο. Τα αντικείμενα για προορισμούς που δεν έχουν αλλάξει μπορούν να επαναχρησιμοποιηθούν, ή μπορούν να δημιουργηθούν νέα στιγμιότυπα.
Ακυρώσει το IChangeToken που επιστράφηκε από την προηγούμενη κλήση της ResolveDestinationsAsync.
Μόλις εφαρμοστούν οι νέοι προορισμοί, ο διακομιστής μεσολάβησης θα καταχωρίσει μια επανάκληση στο νέο IChangeToken . Σημειώστε ότι αν σηματοδοτηθούν πολλαπλές επαναφορτώσεις σε γρήγορη διαδοχή, ο διακομιστής μεσολάβησης ενδέχεται να παραλείψει κάποιες και να επιλύσει τους προορισμούς μόλις είναι έτοιμος.
Επιλυτής προορισμού DNS
Το YARP περιλαμβάνει μια υλοποίηση του IDestinationResolver που επεκτείνει το σύνολο των διαμορφωμένων προορισμών επιλύοντας κάθε όνομα κεντρικού υπολογιστή (host name) σε μία ή περισσότερες διευθύνσεις IP μέσω DNS, δημιουργώντας έναν προορισμό για κάθε επιλυμένη διεύθυνση IP. Ο επιλυτής προορισμού DNS μπορεί να προστεθεί στον αντίστροφο διακομιστή μεσολάβησής σας χρησιμοποιώντας τη μέθοδο
IReverseProxyBuilder.AddDnsDestinationResolver(Action
. Η μέθοδος δέχεται έναν προαιρετικό delegate για τη διαμόρφωση των επιλογών του επιλυτή, DnsDestinationResolverOptions.
Παράδειγμα
C#// Add the DNS destination resolver, restricting results to IPv4 addresses
reverseProxyBuilder.AddDnsDestinationResolver(o => o.AddressFamily =
AddressFamily.InterNetwork);Διαμόρφωση
Οι επιλογές του επιλυτή προορισμού DNS, DnsDestinationResolverOptions, διαθέτουν τις παρακάτω ιδιότητες:
RefreshPeriod
Το χρονικό διάστημα μεταξύ των αιτημάτων ανανέωσης ενός επιλυμένου ονόματος. Η προεπιλεγμένη τιμή είναι 5 λεπτά.
AddressFamily
Προαιρετικά, καθορίστε μια τιμή System.Net.Sockets.AddressFamily ίση με AddressFamily.InterNetwork ή AddressFamily.InterNetworkV6 για να περιορίσετε την επίλυση σε διευθύνσεις IPv4 ή IPv6 αντίστοιχα. Η προεπιλεγμένη τιμή, null , δίνει εντολή στον επιλυτή να μην περιορίζει την οικογένεια διευθύνσεων (address family) των αποτελεσμάτων και να αποδέχεται όλες τις διευθύνσεις που επιστρέφονται.
Ο συγγραφέας δημιούργησε αυτό το άρθρο με τη βοήθεια AI. Μάθετε περισσότερα