Jak skonfigurować Doconut dla rozproszonych wdrożeń serwerowych
← Back to Blog••4 min read

Jak skonfigurować Doconut dla rozproszonych wdrożeń serwerowych

Używanie Doconut w rozproszonej konfiguracji serwera

Kiedy potrzebujesz serwować pliki PDF, Office, rysunki CAD lub obrazy z klastra węzłów ASP.NET Core, distributed mode Doconut pozwala każdemu węzłowi odczytywać te same artefakty stron ze współdzielonej lokalizacji. Rezultatem jest horyzontalnie skalowalny, bezpieczny podglądacz działający za load balancerem bez sesji przyklejonych.

Dlaczego tryb rozproszony ma znaczenie

  • Skalowalność – Każdy węzeł może publikować strony do udziału UNC lub chmury; każdy inny węzeł może je natychmiast serwować.
  • Bezpieczeństwo – Artefakty są przechowywane zaszyfrowane w współdzielonym folderze; podglądacz weryfikuje każde żądanie względem tokenu sesji ASP.NET.
  • Brak zależności od Office – Wtyczka Converter działa po stronie serwera, konwertując Word, Excel, PowerPoint, CAD i obrazy do PDF lub obrazów bez instalacji Microsoft Office.

Te cechy pozwalają przedsiębiorstwom DMS, CRM lub portalom e‑learningowym utrzymać przetwarzanie dokumentów w backendzie .NET przy jednoczesnym skalowaniu do dziesiątek kontenerów.

Współdzielona pamięć dla trybu rozproszonego

W trybie rozproszonym Doconut oczekuje, że artefakty stron (strony PDF, kafelki obrazów itp.) będą zapisywane w lokalizacji pamięci, do której dostęp ma każdy węzeł w farmie – udział sieciowy, kontener Azure Blob, kubełek S3 lub dowolna inna współdzielona pamięć obsługiwana przez funkcję Progressive Cloud Publishing. Podglądacz automatycznie wyszukuje folder artefaktów pasujący do tokenu bezpieczeństwa per‑dokument, więc nie jest potrzebny dodatkowy kod poza zapewnieniem, że wszystkie węzły mają takie same uprawnienia odczytu‑zapisu do wybranej pamięci.

Wskazówka: Użyj tej samej ścieżki UNC (np. \\fileserver\doconut) lub adresu URL chmury w konfiguracji każdego wystąpienia i zachowaj spójne uprawnienia folderu. Zachowanie UsePerTokenSubfolders jest włączone domyślnie i izoluje strony każdego dokumentu.

Rejestrowanie Doconut i middleware sesji

Doconut opiera się na stanie sesji ASP.NET Core dla bezpieczeństwa per‑dokument. Rozproszona pamięć podręczna jest wymagana tylko przy projekcie minimal‑API; MVC lub Razor Pages już ją dodają.

builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});

builder.Services.AddDistributedMemoryCache(); // sesja wymaga pamięci podręcznej
builder.Services.AddSession();                 // Doconut waliduje sesję

app.UseSession();               // Musi być uruchomione przed UseDoconut()
app.UseDoconutResources();      // Rejestruje statyczne zasoby podglądu
app.Map("/doconut", branch => branch.UseDoconut());

Niestandardowe ścieżki (opcjonalnie)

Jeśli inna trasa koliduje z /doconut, zmień ścieżki once i utrzymaj klienta BasePath w synchronizacji:

builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());

Nigdy nie dodawaj początkowego ukośnika do MiddlewarePath ani ResourcesPath; podglądacz dodaje ukośnik automatycznie.

Łączenie wszystkiego: przykład Minimal‑API

Poniżej znajduje się zwarta, gotowa do produkcji konfiguracja, która łączy wymóg współdzielonej pamięci, obsługę sesji i rejestrację Doconut.

var builder = WebApplication.CreateBuilder(args);

// 1️⃣ Podstawowa rejestracja Doconut
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(
        AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
    options.MiddlewarePath = "/doconut";
    options.ResourcesPath  = "/doconut-res";
});

// 2️⃣ Sesja i pamięć podręczna (wymagane dla bezpieczeństwa)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // statyczny pakiet podglądu
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

Wdróż ten binarny plik w dowolnej liczbie kontenerów Docker lub usług Windows za load balancerem. Tak długo, jak każde wystąpienie może dotrzeć do skonfigurowanej lokalizacji współdzielonej pamięci dla artefaktów stron, podglądacz pobierze strony z dowolnego węzła, a przesyłane pliki/konwersje przetrwają przeskoki węzłów.

Wdrożenie za load balancerem

  1. Udostępnij ten sam podstawowy adres URL (np. ` na każdym węźle).
  2. Wyłącz przyklejone sesje – tryb rozproszony Doconut usuwa potrzebę przywiązania sesji.
  3. Zapewnij monitorowanie zdrowia, które sprawdza podstawowy punkt końcowy aplikacji (np. /health), aby load balancer kierował ruch tylko do działających węzłów.
  4. Monitoruj współdzielony folder pod kątem wzrostu; domyślny TTL wynoszący 30 minut ogranicza rozmiar pamięci, ale możesz go dostosować do wymogów zgodności.

Z tymi krokami Twoja aplikacja .NET intensywnie pracująca z dokumentami może obsługiwać tysiące jednoczesnych podglądaczy, utrzymywać każdą stronę zaszyfrowaną w spoczynku i unikać narzutu instalacji Office na każdym serwerze.

Gotowy, by wypróbować? Pobierz bezpłatną wersję próbną Doconut, uruchom kilka kontenerów, skieruj je na współdzieloną ścieżkę UNC i obserwuj, jak podglądacz skaluje się bez jednego ciasteczka sticky‑session.

#dotnet#distributed#web‑farm#document‑viewer#scaling#rozproszone#farma‑webowa#przeglądarka‑dokumentów#skalowanie