
Πώς να διαμορφώσετε το Doconut για διανεμημένες εγκαταστάσεις διακομιστών
Χρήση του Doconut σε Διανεμημένη Διαμόρφωση Διακομιστή
Όταν χρειάζεται να σερβίρετε PDF, αρχεία Office, σχέδια CAD ή εικόνες από ένα σύμπλεγμα κόμβων ASP.NET Core, η διανεμημένη λειτουργία του Doconut επιτρέπει σε κάθε κόμβο να διαβάζει τα ίδια αρχεία σελίδων από μια κοινόχρηστη τοποθεσία. Το αποτέλεσμα είναι ένας οριζόντια κλιμακούμενος, ασφαλής προβολέας που λειτουργεί πίσω από φορτωτικό ισοζυγιστή χωρίς συνεδρίες sticky.
Γιατί είναι Σημαντική η Διανεμημένη Λειτουργία
- Κλιμακωσιμότητα – Κάθε κόμβος μπορεί να δημοσιεύει σελίδες σε UNC ή cloud share· οποιοσδήποτε άλλος κόμβος μπορεί να τις εξυπηρετεί αμέσως.
- Ασφάλεια – Τα αρχεία αποθηκεύονται κρυπτογραφημένα στον κοινόχρηστο φάκελο· ο προβολέας επικυρώνει κάθε αίτηση με το token της συνεδρίας ASP.NET.
- Χωρίς εξάρτηση από το Office – Το πρόσθετο Converter εκτελείται στο διακομιστή, μετατρέποντας Word, Excel, PowerPoint, CAD και εικόνες σε PDF ή εικόνες χωρίς εγκατάσταση του Microsoft Office.
Αυτά τα χαρακτηριστικά επιτρέπουν σε επιχειρησιακά DMS, CRM ή πλατφόρμες e‑learning να διατηρούν την επεξεργασία εγγράφων εντός του .NET back‑end ενώ κλιμακώνουν σε δεκάδες containers.
Κοινόχρηστη Αποθήκευση για Διανεμημένη Λειτουργία
Σε διανεμημένη λειτουργία το Doconut αναμένει ότι τα αρχεία σελίδων (PDF pages, image tiles, κ.λπ.) θα γραφτούν σε μια τοποθεσία αποθήκευσης που είναι προσβάσιμη από κάθε κόμβο του farm – ένα network share, Azure Blob container, S3 bucket ή οποιαδήποτε άλλη κοινόχρηστη αποθήκευση που υποστηρίζεται από τη δυνατότητα Progressive Cloud Publishing. Ο προβολέας ψάχνει αυτόματα για το φάκελο με τα αρχεία που ταιριάζει με το token ασφαλείας ανά έγγραφο, οπότε δεν απαιτείται επιπλέον κώδικας πέρα από την εξασφάλιση ότι όλοι οι κόμβοι έχουν τα ίδια δικαιώματα ανάγνωσης‑εγγραφής στη συγκεκριμένη αποθήκευση.
Συμβουλή: Χρησιμοποιήστε την ίδια διαδρομή UNC (π.χ.,
\\fileserver\doconut) ή το cloud URL σε κάθε διαμόρφωση instance και διατηρήστε σταθερά τα δικαιώματα του φακέλου. Η συμπεριφοράUsePerTokenSubfoldersείναι ενεργοποιημένη από προεπιλογή και απομονώνει τις σελίδες κάθε εγγράφου.
Καταχώρηση του Doconut και Middleware Συνεδρίας
Το Doconut βασίζεται στην κατάσταση συνεδρίας του ASP.NET Core για την ασφάλεια ανά έγγραφο. Μια διανεμημένη κρυφή μνήμη (cache) απαιτείται μόνο όταν χρησιμοποιείτε ένα έργο minimal‑API· τα MVC ή Razor Pages την προσθέτουν αυτόματα.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddDistributedMemoryCache(); // η συνεδρία χρειάζεται μια κρυφή μνήμη
builder.Services.AddSession(); // Doconut επικυρώνει εναντίον της συνεδρίας
app.UseSession(); // Πρέπει να εκτελεστεί πριν από το UseDoconut()
app.UseDoconutResources(); // Καταχωρεί στατικά περιουσιακά στοιχεία του προβολέα
app.Map("/doconut", branch => branch.UseDoconut());
Προσαρμοσμένες Διαδρομές (προαιρετικό)
Αν κάποια άλλη διαδρομή συγκρούεται με /doconut, αλλάξτε τις διαδρομές μια φορά και κρατήστε το client BasePath σε συγχρονισμό:
builder.Services.AddDoconut(options =>
{
options.MiddlewarePath = "/docs-engine";
options.ResourcesPath = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());
Μην προσθέτετε προθετικό slash σε MiddlewarePath ή ResourcesPath· ο προβολέας προσθέτει το slash αυτόματα.
Συνδυάζοντας Όλα: Παράδειγμα Minimal‑API
Παρακάτω υπάρχει μια σύντομη, έτοιμη για παραγωγή ρύθμιση που συνδυάζει την απαίτηση κοινόχρηστης αποθήκευσης, τη διαχείριση συνεδρίας και την καταχώρηση του Doconut.
var builder = WebApplication.CreateBuilder(args);
// 1️⃣ Κύρια εγγραφή Doconut
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(
AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
options.MiddlewarePath = "/doconut";
options.ResourcesPath = "/doconut-res";
});
// 2️⃣ Συνεδρία και κρυφή μνήμη (απαιτείται για την ασφάλεια)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
var app = builder.Build();
app.UseRouting();
app.UseSession();
app.UseDoconutResources(); // στατικό πακέτο προβολέα
app.Map("/doconut", branch => branch.UseDoconut());
app.Run();
Αναπτύξτε αυτό το binary σε όποιον αριθμό containers Docker ή Windows services πίσω από φορτωτικό ισοζυγιστή. Εφόσον κάθε instance μπορεί να φτάσει στη θέση κοινόχρηστης αποθήκευσης που ρυθμίσατε για τα αρχεία σελίδων, ο προβολέας θα ανακτά τις σελίδες από οποιονδήποτε κόμβο, και οι μεταφορτώσεις/μετατροπές θα επιβιώνουν μεταξύ κόμβων.
Ανάπτυξη Πίσω από Φορτωτικό Ισοζυγιστή
- Εκθέστε την ίδια βασική URL (π.χ.,
http://myapp.example.comσε κάθε κόμβο). - Απενεργοποιήστε τις συνεδρίες sticky – Η διανεμημένη λειτουργία του Doconut αφαιρεί την ανάγκη για session affinity.
- Εξασφαλίστε έλεγχο υγείας που ελέγχει ένα βασικό σημείο λήψης της εφαρμογής σας (π.χ.,
/health) ώστε ο φορτωτής να δρομολογεί κίνηση μόνο σε ενεργούς κόμβους. - Παρακολουθήστε τον κοινόχρηστο φάκελο για αύξηση μεγέθους· το προεπιλεγμένο TTL (χρόνος ζωής) των 30 λεπτών περιορίζει την αποθήκευση, αλλά μπορείτε να το προσαρμόσετε ανάλογα με τις απαιτήσεις συμμόρφωσης.
Με αυτά τα βήματα, η .NET εφαρμογή σας που επεξεργάζεται έντονα έγγραφα μπορεί να εξυπηρετήσει χιλιάδες ταυτόχρονους προβολείς, να κρατά κάθε σελίδα κρυπτογραφημένη σε ηρεμία, και να αποφεύγει το βάρος της εγκατάστασης του Office σε κάθε διακομιστή.
Έτοιμοι να το δοκιμάσετε; Αποκτήστε μια δωρεάν δοκιμή του Doconut, ξεκινήστε με μερικά containers, δείξτε τα σε μια κοινόχρηστη διαδρομή UNC, και παρακολουθήστε τον προβολέα να κλιμακώνεται χωρίς ούτε ένα cookie sticky‑session.