Cách cấu hình Doconut cho triển khai máy chủ phân tán
← Back to Blog••5 min read

Cách cấu hình Doconut cho triển khai máy chủ phân tán

Sử dụng Doconut trong Cấu hình Máy chủ Phân tán

Khi bạn cần phục vụ các tệp PDF, Office, bản vẽ CAD hoặc hình ảnh từ một cụm các nút ASP.NET Core, chế độ phân tán của Doconut cho phép mỗi nút đọc cùng một bộ artefact trang từ một vị trí chia sẻ. Kết quả là một trình xem ngang hàng, an toàn, hoạt động phía sau bộ cân bằng tải mà không cần sticky sessions.

Tại sao Chế độ Phân tán lại Quan trọng

  • Khả năng mở rộng – Mỗi nút có thể xuất bản các trang lên một UNC hoặc chia sẻ đám mây; bất kỳ nút nào khác đều có thể phục vụ chúng ngay lập tức.
  • Bảo mật – Các artefact được lưu trữ được mã hoá trên thư mục chia sẻ; trình xem xác thực mỗi yêu cầu dựa trên token phiên ASP.NET.
  • Không phụ thuộc vào Office – Plugin Converter chạy phía máy chủ, chuyển đổi Word, Excel, PowerPoint, CAD và hình ảnh sang PDF hoặc hình ảnh mà không cần cài đặt Microsoft Office.

Những đặc tính này cho phép các hệ thống DMS, CRM hoặc cổng học trực tuyến doanh nghiệp giữ việc xử lý tài liệu trong back‑end .NET đồng thời mở rộng lên hàng chục container.

Lưu trữ Chia sẻ cho Chế độ Phân tán

Trong chế độ phân tán, Doconut mong đợi các artefact trang (các trang PDF, các ô ảnh, v.v.) được ghi vào một vị trí lưu trữ mà mọi nút trong farm có thể truy cập – một chia sẻ mạng, container Azure Blob, bucket S3, hoặc bất kỳ lưu trữ chia sẻ nào khác được hỗ trợ bởi tính năng Progressive Cloud Publishing. Trình xem tự động tìm thư mục artefact khớp với token bảo mật từng tài liệu, vì vậy không cần thêm mã nào ngoài việc đảm bảo mọi nút đều có quyền đọc‑ghi giống nhau trên lưu trữ đã chọn.

Mẹo: Sử dụng cùng một đường UNC (ví dụ, \\fileserver\doconut) hoặc URL đám mây trong cấu hình của mọi instance và giữ quyền thư mục nhất quán. Hành vi UsePerTokenSubfolders được bật mặc định và cô lập các trang của từng tài liệu.

Đăng ký Doconut và Middleware Phiên

Doconut dựa vào trạng thái phiên ASP.NET Core để bảo mật từng tài liệu. Một cache phân tán chỉ cần thiết khi bạn sử dụng dự án minimal‑API; MVC hoặc Razor Pages đã tự thêm sẵn.

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

builder.Services.AddDistributedMemoryCache(); // session cần một bộ nhớ đệm
builder.Services.AddSession();                 // Doconut xác thực với session

app.UseSession();               // Phải chạy trước UseDoconut()
app.UseDoconutResources();      // Đăng ký tài nguyên viewer tĩnh
app.Map("/doconut", branch => branch.UseDoconut());

Đường dẫn Tùy chỉnh (tùy chọn)

Nếu một route khác xung đột với /doconut, hãy thay đổi các đường dẫn một lần và đồng bộ client BasePath:

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

Không bao giờ thêm dấu gạch chéo đầu vào trước MiddlewarePath hoặc ResourcesPath; trình xem sẽ tự thêm dấu gạch chéo.

Kết hợp Tất cả: Ví dụ Minimal‑API

Dưới đây là một cấu hình ngắn gọn, sẵn sàng cho môi trường production, kết hợp yêu cầu lưu trữ chia sẻ, xử lý phiên và đăng ký Doconut.

var builder = WebApplication.CreateBuilder(args);

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

// 2️⃣ Session và cache (cần thiết cho bảo mật)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // static viewer gói
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

Triển khai binary này tới bất kỳ số lượng container Docker hoặc dịch vụ Windows nào phía sau bộ cân bằng tải. Miễn là mỗi instance có thể truy cập vị trí lưu trữ chia sẻ mà bạn đã cấu hình cho các artefact trang, trình xem sẽ lấy trang từ bất kỳ nút nào, và các quá trình tải lên/chuyển đổi sẽ tồn tại qua các lần chuyển nút.

Triển khai Phía Sau Bộ Cân Bằng Tải

  1. Phơi bày cùng một URL cơ sở (ví dụ, ... trên mỗi nút).
  2. Vô hiệu hoá sticky sessions – Chế độ phân tán của Doconut loại bỏ nhu cầu về session affinity.
  3. Đảm bảo giám sát sức khỏe kiểm tra một endpoint cơ bản của ứng dụng (ví dụ, /health) để bộ cân bằng chỉ định lưu lượng tới các nút đang hoạt động.
  4. Giám sát thư mục chia sẻ để theo dõi tăng trưởng; TTL mặc định 30 phút giữ cho lưu trữ có giới hạn, nhưng bạn có thể điều chỉnh theo yêu cầu tuân thủ.

Với các bước này, ứng dụng .NET tập trung tài liệu của bạn có thể phục vụ hàng ngàn người xem đồng thời, giữ mọi trang được mã hoá khi nghỉ và tránh việc phải cài đặt Office trên mỗi máy chủ.

Sẵn sàng thử chưa? Nhận bản dùng thử miễn phí của Doconut, khởi chạy một vài container, chỉ đến một đường UNC chia sẻ, và xem trình xem mở rộng mà không có bất kỳ cookie sticky‑session nào.

#dotnet#distributed#web‑farm#document‑viewer#scaling#phân tán#trình‑xem‑tài‑liệu#mở‑rộng