Як налаштувати Doconut для розподілених серверних розгортань
← Back to Blog••4 min read

Як налаштувати Doconut для розподілених серверних розгортань

Використання Doconut у розподіленій серверній конфігурації

Коли потрібно надавати PDF‑файли, файли Office, креслення CAD або зображення з кластера вузлів ASP.NET Core, розподілений режим Doconut дозволяє кожному вузлу читати ті самі артефакти сторінок із спільного розташування. Результат — горизонтально‑масштабований, безпечний переглядач, який працює за балансувальником навантаження без «липких» сесій.

Чому важливий розподілений режим

  • Масштабованість – Кожен вузол може публікувати сторінки у UNC або хмарний спільний ресурс; будь‑який інший вузол може миттєво їх обслуговувати.
  • Безпека – Артефакти зберігаються зашифрованими у спільній папці; переглядач перевіряє кожен запит за токеном сесії ASP.NET.
  • Відсутність залежності від Office – Плагін Converter працює на сервері, конвертуючи Word, Excel, PowerPoint, CAD та зображення у PDF або зображення без встановлення Microsoft Office.

Ці властивості дозволяють корпоративним DMS, CRM або порталами e‑learning зберігати обробку документів у бек‑енді .NET, одночасно масштабуючись до десятків контейнерів.

Спільне сховище для розподіленого режиму

У розподіленому режимі Doconut очікує, що артефакти сторінок (PDF‑сторінки, плитки зображень тощо) будуть записані у сховище, доступне кожному вузлу ферми — мережевий спільний ресурс, контейнер Azure Blob, бакет S3 або будь‑яке інше спільне сховище, підтримуване функцією Progressive Cloud Publishing. Переглядач автоматично шукає папку артефактів, що відповідає токену безпеки для кожного документа, тому додатковий код не потрібен, окрім забезпечення однакового доступу читання‑запису для всіх вузлів до обраного сховища.

Порада: Використовуйте один і той самий UNC‑шлях (наприклад, \\fileserver\doconut) або хмарний URL у конфігурації кожного екземпляра та підтримуйте постійні дозволи папки. Поведінка UsePerTokenSubfolders увімкнена за замовчуванням і ізолює сторінки кожного документа.

Реєстрація Doconut та проміжного ПЗ сесії

Doconut покладається на стан сесії ASP.NET Core для безпеки кожного документа. Розподілений кеш потрібен лише при використанні проекту 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, змініть шляхи одноразово і синхронізуйте клієнт BasePath:

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

Ніколи не додавайте початковий слеш до MiddlewarePath або ResourcesPath; переглядач додає слеш автоматично.

Підсумковий приклад: 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();

Розгорніть цей бінарний файл у будь‑яку кількість Docker‑контейнерів або Windows‑служб за балансувальником навантаження. Поки кожен екземпляр може досягти спільного сховища, яке ви налаштували для артефактів сторінок, переглядач буде отримувати сторінки з будь‑якого вузла, а завантаження/конверсії переживуть переходи між вузлами.

Розгортання за балансувальником навантаження

  1. Відкрийте один і той самий базовий URL (наприклад, ` на кожному вузлі.
  2. Вимкніть липкі сесії – Розподілений режим Doconut усуває потребу у прив’язці сесії.
  3. Переконайтеся, що моніторинг здоров’я перевіряє базову кінцеву точку вашого застосунку (наприклад, /health), щоб балансувальник направляв трафік лише до живих вузлів.
  4. Слідкуйте за спільною папкою щодо зростання; типове TTL у 30 хвилин обмежує розмір сховища, але ви можете змінити його відповідно до вимог комплаєнсу.

Завдяки цим крокам ваш .NET застосунок, орієнтований на документи, може обслуговувати тисячі одночасних переглядачів, зберігати кожну сторінку зашифрованою в спокої та уникати накладних витрат на встановлення Office на кожному сервері.

Готові спробувати? Отримайте безкоштовну пробну версію Doconut, запустіть кілька контейнерів, вкажіть їм спільний UNC‑шлях і спостерігайте, як переглядач масштабується без жодного cookie‑липкої сесії.

#dotnet#distributed#web‑farm#document‑viewer#scaling#розподілені#веб‑ферма#переглядач‑документів#масштабування